【Linux】用户和用户组管理(第四篇)
目录
1.Linux用户和组的关系
2.命令详解
1./etc/passwd内容解释
默认的Shell
2./etc/shadow(影子文件)内容解释
3./etc/group文件解析
4./etc/gshadow文件内容解析
5.useradd命令详解:添加新的系统用户
6.passwd命令:修改用户密码
7.usermod命令:修改用户信息
8.userdel命令详解:删除用户
9.id命令:查看用户的UID和GID
10.su命令:用户间切换
11.whoami和who am i命令用法和区别
12.groupadd命令:添加用户组
13.groupmod命令详解:修改用户组
14.groupdel命令:刪除用户组
15.gpasswd命令用法详解:把用户添加进组或从组中删除
16.newgrp命令用法详解:切换用户的有效组
用户和用户组管理,顾名思义就是添加用户和用户组、更改密码和设定权限等操作。可能有很多人觉得用户管理没有意义,因为我们在使用个人计算机的时候,不管执行什么操作,都以管理员账户登录,而从来没有添加和使用过其他普通用户。这样做对个人计算机来讲问题不大,但在服务器上是行不通的。
大家想象一下,我们是一个管理团队,共同维护一组服务器,难道每个人都能够被赋予管理员权限吗?显然是不行的,因为不是所有的数据都可以对每位管理员公开,而且如果在运维团队中有某位管理员对 Linux 不熟悉,那么赋予他管理员权限的后果可能是灾难性的。
因此,越是对安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范。
1.Linux用户和组的关系
用户和用户组的对应关系有以下 4 种:
-
一对一:一个用户可以存在一个组中,是组中的唯一成员;
-
一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
-
多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;
-
多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展。
2.命令详解
1./etc/passwd内容解释
每行用户信息都以 ":" 作为分隔符,划分为 7 个字段,每个字段所表示的含义如下:
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
默认的Shell
Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。
我们知道,用户登陆 Linux 系统后,通过使用 Linux 命令完成操作任务,但系统只认识类似 0101 的机器语言,这里就需要使用命令解释器。也就是说,Shell 命令解释器的功能就是将用户输入的命令转换成系统可以识别的机器语言。
通常情况下,Linux 系统默认使用的命令解释器是 bash(/bin/bash),当然还有其他命令解释器,例如 sh、csh 等。
2./etc/shadow(影子文件)内容解释
/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。
3./etc/group文件解析
/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中。
各用户组中,还是以 ":" 作为字段之间的分隔符,分为 4 个字段,每个字段对应的含义为:
组名:密码:GID:该用户组中的用户列表
4./etc/gshadow文件内容解析
/etc/passwd 文件存储用户基本信息,同时考虑到账户的安全性,将用户的密码信息存放另一个文件 /etc/shadow 中。本节要将的 /etc/gshadow 文件也是如此,组用户信息存储在 /etc/group 文件中,而将组用户的密码信息存储在 /etc/gshadow 文件中。
文件中,每行代表一个组用户的密码信息,各行信息用 ":" 作为分隔符分为 4 个字段,每个字段的含义如下:
组名:加密密码:组管理员:组附加用户列表
一个用户可以所属多个附加组,但只能有一个初始组.
5.useradd命令详解:添加新的系统用户
Linux 系统中,可以使用 useradd 命令新建用户,此命令的基本格式如下:
[root@localhost ~]#useradd [选项] 用户名
选项 | 含义 |
---|---|
-u UID | 手工指定用户的 UID,注意 UID 的范围(不要小于 500)。 |
-d 主目录 | 手工指定用户的主目录。主目录必须写绝对路径,而且如果需要手工指定主目录,则一定要注意权限; |
-c 用户说明 | 手工指定/etc/passwd文件中各用户信息中第 5 个字段的描述性内容,可随意配置; |
-g 组名 | 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录。 |
-G 组名 | 指定用户的附加组。我们把用户加入其他组,一般都使用附加组; |
-s shell | 手工指定用户的登录 Shell,默认是 /bin/bash; |
-e 曰期 | 指定用户的失效曰期,格式为 "YYYY-MM-DD"。也就是 /etc/shadow 文件的第八个字段; |
-o | 允许创建的用户的 UID 相同。例如,执行 "useradd -u 0 -o usertest" 命令建立用户 usertest,它的 UID 和 root 用户的 UID 相同,都是 0; |
-m | 建立用户时强制建立用户的家目录。在建立系统用户时,该选项是默认的; |
-r | 创建系统用户,也就是 UID 在 1~499 之间,供系统程序使用的用户。由于系统用户主要用于运行系统所需服务的权限配置,因此系统用户的创建默认不会创建主目录。 |
测试用例1:
添加用户mytest
#创建用户-用户界面无法登录
root@ubuntu:/home/myubuntu# useradd mytest
#-m 创建用户并且和它的主目录/home/mytest 用户界面可以登录
root@ubuntu:/home/myubuntu# useradd -m mytest
用 sudo adduser 命令创建用户不存在无法登陆问题。
测试用例2:
添加用户mytest产生的相关信息
root@ubuntu:/home/myubuntu# grep "mytest" /etc/passwd
mytest:x:1001:1001::/home/mytest:
root@ubuntu:/home/myubuntu# grep "mytest" /etc/shadow
mytest:!:18983:0:99999:7:::
root@ubuntu:/home/myubuntu# grep "mytest" /etc/group
mytest:x:1001:
root@ubuntu:/home/myubuntu# grep "mytest" /etc/gshadow
mytest:!::
6.passwd命令:修改用户密码
学习 useradd 命令我们知道,使用此命令创建新用户时,并没有设定用户密码,因此还无法用来登陆系统,本节就来学习 passwd 密码配置命令 。
passwd 命令的基本格式如下:
[root@localhost ~]#passwd [选项] 用户名
选项:
-
-S:查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用;
-
-l:暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!",使密码失效。仅 root 用户可用;
-
-u:解锁用户,和 -l 选项相对应,也是只能 root 用户使用;
-
--stdin:可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用;
-
-n 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段;
-
-x 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段;
-
-w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段;
-
-i 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。
测试用例:
root@ubuntu:/home/myubuntu# passwd mytest
7.usermod命令:修改用户信息
利用 useradd 命令添加用户,但如果不小心添错用户信息,后期如何修改呢?
办法有两个,一个是使用 Vim 文本编辑器手动修改涉及用户信息的相关文件(/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow),另一个方法就是使用本节介绍了 usermod 命令,该命令专门用于修改用户信息。
这里一定要分清 useradd 命令和 usermod 命令的区别,前者用于添加用户,当然,添加用户时可以对用户信息进行定制;后者针对与已存在的用户,使用该命令可以修改它们的信息。
usermod 命令的基本格式如下:
[root@localhost ~]#usermod [选项] 用户名
选项:
-
-c 用户说明:修改用户的说明信息,即修改 /etc/passwd 文件目标用户信息的第 5 个字段;
-
-d 主目录:修改用户的主目录,即修改 /etc/passwd 文件中目标用户信息的第 6 个字段,需要注意的是,主目录必须写绝对路径;
-
-e 日期:修改用户的失效曰期,格式为 "YYYY-MM-DD",即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段;
-
-g 组名:修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID);
-
-u UID:修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID);
-
-G 组名:修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件;
-
-l 用户名:修改用户名称;
-
-L:临时锁定用户(Lock);
-
-U:解锁用户(Unlock),和 -L 对应;
-
-s shell:修改用户的登录 Shell,默认是 /bin/bash。
如果你仔细观察会发现,其实 usermod 命令提供的选项和 useradd 命令的选项相似,因为 usermod 命令就是用来调整使用 useradd 命令添加的用户信息的。
不过,相比 useradd 命令,usermod 命令还多出了几个选项,即 -L 和 -U,作用分别与 passwd 命令的 -l 和-u 相同。需要注意的是,并不是所有的 Linux 发行版都包含这个命令,因此,使用前可以使用 man usermod 命令确定系统是否支持。
此命令对用户的临时锁定,同 passwd 命令一样,都是在 /etc/passwd 文件目标用户的加密密码字段前添加 "!",使密码失效;反之,解锁用户就是将添加的 "!" 去掉。
接下来,给大家分别讲解 usermod 命令几个选项的具体用法。
#将myubuntu用户加入到mytest组中
root@ubuntu:/home/myubuntu# usermod -G mytest myubuntu
root@ubuntu:/home/myubuntu# grep "myubuntu" /etc/group
mytest:x:1001:myubuntu
8.userdel命令详解:删除用户
userdel 命令功能很简单,就是删除用户的相关数据。此命令只有 root 用户才能使用。
通过前面的学习我们知道,用户的相关数据包含如下几项:
-
用户基本信息:存储在 /etc/passwd 文件中;
-
用户密码信息:存储在 /etc/shadow 文件中;
-
用户群组基本信息:存储在 /etc/group 文件中;
-
用户群组信息信息:存储在 /etc/gshadow 文件中;
-
用户个人文件:主目录默认位于 /home/用户名,邮箱位于 /var/spool/mail/用户名。
其实,userdel 命令的作用就是从以上文件中,删除与指定用户有关的数据信息。
userdel 命令的语法很简单,基本格式如下:
[root@localhost ~]# userdel -r 用户名
-r 选项表示在删除用户的同时删除用户的家目录。
注意,在删除用户的同时如果不删除用户的家目录,那么家目录就会变成没有属主和属组的目录,也就是垃圾文件。
测试用例:
#删除用户mytest1
root@ubuntu:/home/myubuntu# userdel mytest1
9.id命令:查看用户的UID和GID
[root@localhost ~]# id 用户名
10.su命令:用户间切换
su 是最简单的用户切换命令,通过该命令可以实现任何身份的切换,包括从普通用户切换为 root 用户、从 root 用户切换为普通用户以及普通用户之间的切换。
普通用户之间切换以及普通用户切换至 root 用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换;从 root 用户切换至其他用户,无需知晓对方密码,直接可切换成功。
[root@localhost ~]# su [选项] 用户名
选项:
-
-:当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等),使用 - 选项可省略用户名,默认会切换为 root 用户。
-
-l:同 - 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号。
-
-p:表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件)。
-
-m:和 -p 一样;
-
-c 命令:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。
11.whoami和who am i命令用法和区别
whoami 命令和 who am i 命令是不同的 2 个命令,前者用来打印当前执行操作的用户名,后者则用来打印登陆当前 Linux 系统的用户名。
12.groupadd命令:添加用户组
添加用户组的命令是 groupadd,命令格式如下:
[root@localhost ~]# groupadd [选项] 组名
选项:
-
-g GID:指定组 ID;
-
-r:创建系统群组。
测试用例:
root@ubuntu:/home/myubuntu# groupadd grouptest
root@ubuntu:/home/myubuntu# grep "grouptest" /etc/group
grouptest:x:1002:
root@ubuntu:/home/myubuntu# grep "grouptest" /etc/gshadow
grouptest:!::
13.groupmod命令详解:修改用户组
groupmod 命令用于修改用户组的相关信息,命令格式如下:
[root@localhost ~]# groupmod [选现] 组名
选项:
-
-g GID:修改组 ID;
-
-n 新组名:修改组名;
14.groupdel命令:刪除用户组
groupdel 命令用于删除用户组(群组),此命令基本格式为:
[root@localhost ~]#groupdel 组名
通过前面的学习不难猜测出,使用 groupdel 命令删除群组,其实就是删除 /etc/gourp 文件和 /etc/gshadow 文件中有关目标群组的数据信息。
15.gpasswd命令用法详解:把用户添加进组或从组中删除
为了避免系统管理员(root)太忙碌,无法及时管理群组,我们可以使用 gpasswd 命令给群组设置一个群组管理员,代替 root 完成将用户加入或移出群组的操作。
gpasswd 命令的基本格式如下:
[root@localhost ~]# gpasswd 选项 组名
表 1 详细介绍了此命令提供的各种选项以及功能。
选项 | 功能 |
---|---|
选项为空时,表示给群组设置密码,仅 root 用户可用。 | |
-A user1,... | 将群组的控制权交给 user1,... 等用户管理,也就是说,设置 user1,... 等用户为群组的管理员,仅 root 用户可用。 |
-M user1,... | 将 user1,... 加入到此群组中,仅 root 用户可用。 |
-r | 移除群组的密码,仅 root 用户可用。 |
-R | 让群组的密码失效,仅 root 用户可用。 |
-a user | 将 user 用户加入到群组中。gpasswd -a user group |
-d user | 将 user 用户从群组中移除。gpasswd -d user group |
从表 1 可以看到,除 root 可以管理群组外,可设置多个普通用户作为群组的管理员,但也只能做“将用户加入群组”和“将用户移出群组”的操作。
16.newgrp命令用法详解:切换用户的有效组
我们知道,每个用户可以属于一个初始组(用户是这个组的初始用户),也可以属于多个附加组(用户是这个组的附加用户)。既然用户可以属于这么多用户组,那么用户在创建文件后,默认生效的组身份是哪个呢?
当然是初始用户组的组身份生效,因为初始组是用户一旦登陆就获得的组身份。也就是说,用户的有效组默认是初始组,因此所创建文件的属组是用户的初始组。那么,既然用户属于多个用户组,能不能改变用户的初始组呢?使用命令 newgrp 就可以。
newgrp 命令可以从用户的附加组中选择一个群组,作为用户新的初始组。此命令的基本格式如下:
[root@localhost ~]# newgrp 组名