Linux用户和用户组管理

来源:互联网 发布:true key 是什么软件 编辑:程序博客网 时间:2024/05/22 18:09

在系统的/etc/passwd这个文件中有很多东西,我们着重看这两条

root:x:0:0:root:/root:/bin/basheaglezsx:x:1000:1000:eaglezsx:/home/eaglezsx:/bin/bash

每句话都由7个字段组成。第一条是root用户,第二条是自己创建的eaglezsx用户。

  • 第1个字段为用户名
  • 第2字段为该账号的口令。早期的Unix系统口令确实是放在这里,但基于安全因素,后来就将其存放到/etc/shadow中了,这里只用一个x代替。
  • 第3个字段为一个数字,这个数字代表用户标志号,也称uid。系统是通过这个数字识别用户身份的。这里0就是root,也就是说我们可以修改test用户的uid为0,那么系统会认为root和test是同一个账户。uid的取值范围是0~65535(但实际上已经可以支持到4294967294),0是超级用户(root)的标识号,CentOS 7的普通用户标志号从1000开始。如果我们自定义一个普通用户,你会看到该账户的标志号是大于或等于1000的。
  • 第4个字段也是数字,表示组标志号,也称gid。这个字段对应着/etc/group中的一条记录。
  • 第5个字段为注释说明,没有实际意义。通常记录该用户的一些属性,例如姓名、电话、地址等。我们可以通过chfn命令来更改这些信息。
  • 第6个字段为用户的家目录,当用户登陆时,就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/username,用户家目录是可以自定义的。比如,建立一个普通用户test1,要想让test1的家目录在/data目录下,只要将/etc/passwd文件中对应该用户那行中的本字段修改为/data即可。
  • 最后一个字段为用户的shell。用户登陆后,要启动一个进程,用来将用户下达的指定传达给内核,这就是shell。Linux的shell有sh、csh、ksh、tcsh、bash等多种,而Red Had/CentOS的shell就是bash。查看/etc/passwd文件,该字段除了/bin/bash,还有很多/sbin/nologin,它表示不允许该账号登陆。如果想建立一个不允许登陆的账号,可以把该字段改成/sbin/nologin,默认是/bin/bash。

新增组命令groupadd

命令groupadd的格式为groupadd [-g GID] groupname

groupadd grptest1:新建一个名字为grptest1的组

如果不加-g选项,则按照系统默认的gid创建组。跟uid一样,gid也是从1000开始的。我们也可以自定义gid

groupadd -g 1008 grptest2

删除组命令groupdel

groupdel grptest2

当组中有用户的时候不能删除组,只有删除用户后才可以删除该组

增加用户的命令useradd

useradd [-u UID][-g GID][-d HOME][-M][-s]

  • -u:表示定义UID
  • -g:表示使新增用户属于已经存在的某个组,后面可以跟组id,也可以跟组名。
  • -d:表示自定义用户的家目录
  • -M:表示不建立家目录
  • -s:表示自定义shell

useradd -u 1005 -g 1006 -M -s /sbin/nolgin user11

删除账户的命令usrdel

userdel [-r] username,其中-r选项的作用是,当删除用户时,一并删除该用户的家目录。

用户密码管理

账户创建后,默认是没有设置密码的,只有设置好密码后,才可以登陆系统。

passwd [username] 该命令后面若不加用户名,则是为自己设定密码。

如果登陆的是root用户,后面可以跟普通账户的名字,意思是修改指定账户的密码。

只用root才可以修改其他账户的密码,普通账户只能修改自己的密码。

用户身份切换

命令su

在Linux系统中有些事情只有root用户才能做,普通用户是不能做的,这时就需要临时切换到root身份了。

su [-] username 普通用户的su命令不加username时,就是切换到root用户。当然,root用户同样可以使用su命令切换到普通用户。该命令加上-后,会初始化当前用户的各种环境变量。比如,如果不加-切换到root账号时,当前目录没有变化;而加上-切换到root用户使,当前目录为root用户的家目录。这跟直接登录root账户是一样的。当由root切换到普通用户时,是不需要输入密码的。

命令sudo

su命令的缺点

su 的确为管理带来方便,通过转换到root下,能完成任何系统管理工具,只要把root的密码交给任何一个普通用户,他都能转换到root来完成任何的系统管理工作;但通过su转换到root后,也有不安全因素;比如系统有10个用户,而且都参和管理。假如这10个用户都涉及到终极权限的运用,做为管理员假如想让其他用户通过su来转换到终极权限的root,必须把root权限密码都告诉这10个用户;假如这10个用户都有root权限,通过root权限能够做任何事,这在一定程度上就对系统的安全造成了威协;想想Windows吧,简直就是恶梦;“没有不安全的系统,只有不安全的人”,我们绝对不能确保这 10个用户都能按正常操作流程来管理系统,其中任何一人对系统操作的重大失误,都可能导致系统崩溃或数据损失;所以su 工具在多人参和的系统管理中,并不是最好的选择,su只适用于一两个人参和管理的系统,毕竟su并不能让普通用户受限的使用;终极用户root密码应该掌控在少数用户手中,这绝对是真理!

为了改进这个问题,设计了sudo这个命令,使用sudo命令执行一个只有root才能执行的命令是可以办到的,但是需要输入密码。这个密码并不是root的密码,而是用户自己的密码。默认情况下只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的。可以使用visudo命令编辑相关的配置文件/etc/sudoers。visudo是他专用的编工具,此工具的好处是在添加规则不太准确时,保存退出时会提示给我们错误信息。

sudo 的适用条件

由于su 对转换到终极权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。假如用su 来转换到终极用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参和管理时,最好是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成和其相关的工作,这时我们就有必要用到 sudo。

通过sudo,我们能把某些终极权限有针对性的下放,并且无需普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;

sudo 执行命令的流程是当前用户转换到root(或其他指定转换到的用户),然后以root(或其他指定的转换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文档/etc/sudoers来进行授权;

使用visudo命令编辑相关的配置文件/etc/sudoers。如果没有visudo这个命令,先使用命令yum install -y sudo安装。

默认root支持sudo,是因为这个文件中有一行root ALL=(ALL) ALL。在该行下面加入test ALL=(ALL),就可以让用户test用户拥有sudo的特权。从左到右,第一段test这里为一个用户,指定让哪个用户有sudo特权;第二段ALL=(ALL),左边的ALL指的是所有的主机,右边的ALL指的是获取哪个用户的身份,第二段几乎不用配置;第三段设定可以使用sudo的命令有哪些。

使用visudo命令编辑/etc/sudoers配置文件(必须使用root用户),它的使用方法和vim一样。添加一行test ALL=(ALL) ALL

## Allow root to run any commands anywhere root    ALL=(ALL)   ALLtest    ALL=(ALL)   ALL

此时可以验证一下test用户的权限。比如我现在是root用户,我先执行su test切换到test用户,然后执行ls(当前目录是root),之后会提示权限不够。然后我执行sudo ls会出现一大段提示(初次使用sudo命令时会有,以后再使用sudo命令时就不会提示了),并让输入密码,这个密码是test用户的。输入完密码之后就会显示出root目录下的东西了。


玩儿的时候遇到的问题

当前我在根目录,当我执行sudo cd root之后没有任何提示,但执行pwd后会发现还是在根目录,cd命令没有效果。

原因:sudo cd这个命令无法执行,因为cd不是一个应用程序而是Linux内建的命令,而sudo仅仅只对应用程序起作用。

解决办法,以root身份登录

执行sudo -i,然后再执行cd /root

bash-4.2$ sudo -i[root@localhost ~]# cd /root[root@localhost ~]# pwd/root[root@localhost ~]# exit登出bash-4.2$ 

sudo -i表示以root身份登录,进程的实际用户ID和有效用户ID都变成了root,主目录也切换为root的主目录。可以随时执行exit退出root用户。

也可以使用sudo -s效果和sudo -i一样,只是-i会切换到/root目录,而-s是到/目录。

sudo 命令:执行该条命令期间,进程的有效用户ID临时更改为root。


如果每增加一个用户就设置行,这样太麻烦,所以可以设置:把# %whell ALL=(ALL) ALL前面的#去掉,让这一行生效。它的意思是,wheel这个组的所有用户都拥有了sudo的权利,只要把需要设置sudo权限的所有用户加入到wheel这个组中即可。

配置文件/etc/sudoers包含了许多配置项,可以使用命令man sudoers来获得帮助信息。