4、Linux用户和用户组管理
文章目录
- 4、Linux用户和用户组管理
- 4.1、Linux用户和用户组(包含两者之间的关系)
- 4.2、Linux /etc/passwd内容解释
- 4.3、Linux /etc/shadow(影子文件)
- 4.4、Linux /etc/login.defs:创建用户的默认设置文件
- 4.5、Linux /etc/group文件解析
- 4.6、Linux /etc/gshadow
- 4.7、Linux groupadd命令:添加用户组
- 4.8、Linux groupmod命令详解:修改用户组
- 4.9、Linux groupdel命令:刪除用户组
- 4.10、Linux useradd命令详解:添加新的系统用户
- 4.11、Linux passwd命令:修改用户密码
- 4.12、Linux usermod命令:修改用户信息
- 4.13、Linux chage用法详解:修改用户密码状态
- 4.14、Linux su命令:用户间切换(包含su和su -的区别)
- su 和 su - 的区别
内容:
1. Linux /etc/passwd内容解释
2. Linux /etc/shadow(影子文件)内容解析
3. Linux /etc/group文件解析
4. Linux /etc/gshadow文件内容解析
5. Linux初始组和附加组
6. Linux /etc/login.defs:创建用户的默认设置文件
7. Linux useradd命令详解:添加新的系统用户
8. Linux passwd命令:修改用户密码
9. Linux usermod命令:修改用户信息
10. Linux chage用法详解:修改用户密码状态
11. Linux userdel命令详解:删除用户
12. Linux id命令:查看用户的UID和GID
13. Linux su命令:用户间切换(包含su和su -的区别)
14. Linux whoami和who am i命令用法和区别
15. Linux groupadd命令:添加用户组
16. Linux groupmod命令详解:修改用户组
17. Linux groupdel命令:刪除用户组
18. Linux gpasswd命令用法详解:把用户添加进组或从组中删除
19. Linux newgrp命令用法详解:切换用户的有效组
管理员用户>>系统用户>>普通用户
4.1、Linux用户和用户组(包含两者之间的关系)
Linux用户和组的关系
用户和用户组的对应关系有以下 4 种:
- 一对一:一个用户可以存在一个组中,是组中的唯一成员;
- 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
- 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;
- 多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展。
4.2、Linux /etc/passwd内容解释
Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。
[root@localhost /]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
...省略部分输出...
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
zsw:x:1000:1000:zsw:/home/zsw:/bin/bash
/etc/passwd 文件中的内容非常规律,每行记录对应一个用户。
系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。
账号名称(用户名):登录系统时使用的名称
密码:“x” 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中。
UID:UID,也就是用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户。
UID 范围 用户身份 0 超级用户。UID 为 0 就代表这个账号是管理员账号。在 Linux 中,如何把普通用户升级成管理员呢?只需把其他用户的 UID 修改为 0 就可以了,这一点和 Windows 是不同的。不过不建议建立多个管理员账号。 1~499 系统用户(伪用户)。也就是说,此范围的 UID 保留给系统使用。其中,1~99 用于系统自行创建的账号;100~499 分配给有系统账号需求的用户。 其实,除了 0 之外,其他的 UID 并无不同,这里只是默认 500 以下的数字给系统作为保留账户,只是一个公认的习惯而已。 500~65535 普通用户。通常这些 UID 已经足够用户使用了。但不够用也没关系,2.6.x 内核之后的 Linux 系统已经可以支持 232 个 UID 了。 GID:全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号。
用户信息:该字段中可以记录可以记录用户的姓名、电话等信息。
主目录:定义用户的主目录。
登录shell:Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。
4.3、Linux /etc/shadow(影子文件)
/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。
前面介绍了 /etc/passwd 文件,由于该文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了此文件中.
打开次文件:
[root@localhost /]# cat etc/shadow
root:$6$OOpcZky1b3icEVOc$r0OoHK8hnmgDqEzmp01Ntee54dqP79MaqODeq3edaPWD.zWXC9w/59483nM/8nZ5tnCSy3rAaW0dZSwG8kY/L/::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
…省略部分输出…
postfix:!!:19045::::::
tcpdump:!!:19045::::::
zsw:$6$OYnyNHZJ$KKJC5EXxo1cIrqNjw8Hzdx9TvL.b2Ip1v/wCcx6mod2XMZBludUhadtrjrJuN18AP7jatWJsxK22zU3mJpQMu1:19048:0:99999:7:::
用户名:用户登录名
加密密码:这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。(不能手工修改;在密码串前加上 “!”、"*" 或 “x” 使密码暂时失效。)
最后一次修改时间:Linux 计算日期的时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间,到 1971 年 1 月 1 日,则为 366 天。 这里显示 15775 天,也就是说,此 root 账号在 1970 年 1 月 1 日之后的第 15775 天修改的 root 用户密码。
最小修改时间间隔:最小修改间隔时间,也就是说,到用户可以更改密码的天数,即最短口令存活期。
密码有效期:经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。
密码需要变更前的警告天数:与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 “再过 n 天你的密码就要过期了,请尽快重新设置你的密码!”。
密码过期后的宽限天数:也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。
账号失效时间:同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!
保留域:用于功能扩展。
4.4、Linux /etc/login.defs:创建用户的默认设置文件
/etc/login.defs 文件用于在创建用户时,对用户的一些基本属性做默认设置,例如指定用户 UID 和 GID 的范围,用户的过期时间,密码的最大长度,等等。
[root@localhost /]# cat etc/login.defs
设置项 | 含义 |
---|---|
MAIL_DIR /var/spool/mail | 创建用户时,系统会在目录 /var/spool/mail 中创建一个用户邮箱,比如 lamp 用户的邮箱是 /var/spool/mail/lamp。 |
PASS_MAX_DAYS 99999 | 密码有效期,99999 是自 1970 年 1 月 1 日起密码有效的天数,相当于 273 年,可理解为密码始终有效。 |
PASS_MIN_DAYS 0 | 表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0。 |
PASS_MIN_LEN 5 | 指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效。 |
PASS_WARN_AGE 7 | 指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天。 |
UID_MIN 500 | 指定最小 UID 为 500,也就是说,添加用户时,默认 UID 从 500 开始。注意,如果手工指定了一个用户的 UID 是 550,那么下一个创建的用户的 UID 就会从 551 开始,哪怕 500~549 之间的 UID 没有使用。 |
UID_MAX 60000 | 指定用户最大的 UID 为 60000。 |
GID_MIN 500 | 指定最小 GID 为 500,也就是在添加组时,组的 GID 从 500 开始。 |
GID_MAX 60000 | 用户 GID 最大为 60000。 |
CREATE_HOME yes | 指定在创建用户时,是否同时创建用户主目录,yes 表示创建,no 则不创建,默认是 yes。 |
UMASK 077 | 用户主目录的权限默认设置为 077。 |
USERGROUPS_ENAB yes | 指定删除用户的时候是否同时删除用户组,准备地说,这里指的是删除用户的初始组,此项的默认值为 yes。 |
ENCRYPT_METHOD SHA512 | 指定用户密码采用的加密规则,默认采用 SHA512,这是新的密码加密模式,原先的 Linux 只能用 DES 或 MD5 加密。 |
4.5、Linux /etc/group文件解析
/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中。此文件是记录组 ID(GID)和组名相对应的文件。
打开group文件:
[root@localhost /]# cat etc/group
root:x:0:
bin:x:1:
…省略部分输出…
postfix:x:89:
tcpdump:x:72:
zsw:x:1000:zsw
- 组名称:该组的名称,如:root、zsw
- 组密码:设置加入组的密码,但大多数情况下不使用组的密码,所以通常没有用。和 /etc/passwd 文件一样,这里的 “x” 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。
- GID:组标识符,与用户的UID一样,每个组也有自己的GID供系统识别,且不用组GID不痛。
- 组成员:此字段列出每个群组包含的所有用户。
4.6、Linux /etc/gshadow
文件用于存放组群的加密口令、组管理员等信息。
[root@localhost /]# cat etc/gshadow
root:::
bin:::
…省略部分输出…
tcpdump:!::
zsw:!!::zsw
组群名称:加密后的组群口令:族群的管理员:组群成员列表
4.7、Linux groupadd命令:添加用户组
添加用户组的命令是 groupadd,命令格式如下:
[root@localhost ~]# groupadd [选项] 组名
选项:
- -g GID:指定组 ID;
- -r:创建系统群组。
使用 groupadd 命令创建新群组:
[root@localhost /]# groupadd zsw2 #添加zsw2组
[root@localhost /]# grep "zsw2" /etc/group
zsw2:x:1001:
4.8、Linux groupmod命令详解:修改用户组
groupmod 命令用于修改用户组的相关信息,命令格式如下:
[root@localhost ~]# groupmod [选现] 组名
选项:
- -g GID:修改组 ID;
- -n 新组名:修改组名;
使用 groupmod 命令修改群组名:(建议大家先删除旧的,再建立新的。)
[root@localhost /]# groupmod -n testzsw2 zsw2
[root@localhost /]# grep "testzsw2" /etc/group
testzsw2:x:1001:
4.9、Linux groupdel命令:刪除用户组
groupdel 命令用于删除用户组(群组),此命令基本格式为:
[root@localhost ~]#groupdel 组名
使用 groupdel 命令删除群组,其实就是删除 /etc/gourp 文件和 /etc/gshadow 文件中有关目标群组的数据信息。
使用groupdel命令删除“testzsw2”群组:(如果群组里有用户,则需要先保证群组下没有用户才能进行删除)
[root@localhost /]# grep "testzsw2" /etc/group
testzsw2:x:1001:
[root@localhost /]# groupdel testzsw2
[root@localhost /]# grep "testzsw2" /etc/group
[root@localhost /]#
注意,不能使用 groupdel 命令随意删除群组。
4.10、Linux 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 之间,供系统程序使用的用户。由于系统用户主要用于运行系统所需服务的权限配置,因此系统用户的创建默认不会创建主目录。 |
其实,系统已经帮我们规定了非常多的默认值,在没有特殊要求下,无需使用任何选项即可成功创建用户。例如:
此行命令就表示创建 zsw普通用户。
[root@localhost ~]# useradd zsw
利用 useradd 命令的各种选项亲自定制要创建的用户,例如:
[root@localhost /]# grep "zsw2" /etc/group
zsw2:x:1001:
[root@localhost /]# useradd -u 1010 -g 1001 -d /home/zsw2 -s /bin/bash -p 123456 -f -1 zsw2.1
#同时查看三个文件
[root@localhost /]# grep "zsw2" /etc/passwd /etc/shadow /etc/group
/etc/passwd:zsw2.1:x:1010:1001::/home/zsw2:/bin/bash
/etc/shadow:zsw2.1:123456:19056:0:99999:7:::
/etc/group:zsw2:x:1001:
#在建立用户zsw2.1的同时,指定了UID(1010)、初始组(zsw2)、家目录(/home/zsw2/)、用户说明(test user)和用户登录Shell(/bin/bash)
通过命令进行查看/etc/default/useradd 文件:
useradd -D [选项] 参数
[root@localhost /]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
参数 | 含义 |
---|---|
GR0UP=100 | 这个选项用于建立用户的默认组,也就是说,在添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。但 CentOS 并不是这样的,而是在添加用户时会自动建立和用户名相同的组作为此用户的初始组。也就是说这个选项并不会生效。 Linux 中默认用户组有两种机制:一种是私有用户组机制,系统会创建一个和用户名相同的用户组作为用户的初始组;另一种是公共用户组机制,系统用 GID 是 100 的用户组作为所有新建用户的初始组。目前我们采用的是私有用户组机制。 |
HOME=/home | 指的是用户主目录的默认位置,所有新建用户的主目录默认都在 /home/下,刚刚新建的 lamp1 用户的主目录就为 /home/lamp1/。 |
INACTIVE=-1 | 指的是密码过期后的宽限天数,也就是 /etc/shadow 文件的第七个字段。这里默认值是 -1,代表所有新建立的用户密码永远不会失效。 |
EXPIRE= | 表示密码失效时间,也就是 /etc/shadow 文件的第八个字段。默认值是空,代表所有新建用户没有失效时间,永久有效。 |
SHELL=/bin/bash | 表示所有新建立的用户默认 Shell 都是 /bin/bash。 |
SKEL=/etc/skel | 在创建一个新用户后,你会发现,该用户主目录并不是空目录,而是有 .bash_profile、.bashrc 等文件,这些文件都是从 /etc/skel 目录中自动复制过来的。因此,更改 /etc/skel 目录下的内容就可以改变新建用户默认主目录中的配置文件信息。 |
CREATE_MAIL_SPOOL=yes | 指的是给新建用户建立邮箱,默认是创建。也就是说,对于所有的新建用户,系统都会新建一个邮箱,放在 /var/spool/mail/ 目录下,和用户名相同。例如,lamp1 的邮箱位于 /var/spool/mail/lamp1。 |
4.11、Linux passwd命令:修改用户密码
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 账户修改 lamp 普通用户的密码,可以使用如下命令:
[root@localhost /]# passwd zsw2.1
更改用户 zsw2.1 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
root 可以强行修改用户的密码和简易程度。普通用户只能通过passwd修改用户密码。
4.12、Linux 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。
相比 useradd 命令,usermod 命令还多出了几个选项,即 -L 和 -U,作用分别与 passwd 命令的 -l 和-u 相同。需要注意的是,并不是所有的 Linux 发行版都包含这个命令,因此,使用前可以使用 man usermod 命令确定系统是否支持。
此命令对用户的临时锁定,同 passwd 命令一样,都是在 /etc/passwd 文件目标用户的加密密码字段前添加 “!”,使密码失效;反之,解锁用户就是将添加的 “!” 去掉。
栗子:
#把lamp用户从zsw2加入zsw组
[root@localhost /]# usermod -G zsw zsw2.1
[root@localhost /]# grep "zsw2.1" /etc/group
zsw:x:1000:zsw,zsw2.1
4.13、Linux chage用法详解:修改用户密码状态
chage 命令的基本格式:
[root@localhost ~]#chage [选项] 用户名
选项:
- -l:列出用户的详细密码状态;
- -d 日期:修改 /etc/shadow 文件中指定用户密码信息的第 3 个字段,也就是最后一次修改密码的日期,格式为 YYYY-MM-DD;
- -m 天数:修改密码最短保留的天数,也就是 /etc/shadow 文件中的第 4 个字段;
- -M 天数:修改密码的有效期,也就是 /etc/shadow 文件中的第 5 个字段;
- -W 天数:修改密码到期前的警告天数,也就是 /etc/shadow 文件中的第 6 个字段;
- -i 天数:修改密码过期后的宽限天数,也就是 /etc/shadow 文件中的第 7 个字段;
- -E 日期:修改账号失效日期,格式为 YYYY-MM-DD,也就是 /etc/shadow 文件中的第 8 个字段。
栗子:
[root@localhost /]# echo "zsw2.1" | passwd --stdin zsw2.1
更改用户 zsw2.1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost /]# grep "zsw2.1" /etc/group
zsw:x:1000:zsw,zsw2.1
[root@localhost /]# chage -d 0 zsw2.1
#通过chage命令设置此账号密码创建的日期为 1970 年 1 月 1 日(0 就表示这一天),这样用户登陆后就必须修改密码
[root@localhost /]#
4.14、Linux su命令:用户间切换(包含su和su -的区别)
su 是最简单的用户切换命令(普通用户之间切换以及普通用户切换至 root 用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换;从 root 用户切换至其他用户,无需知晓对方密码,直接可切换成功。)
su 命令的基本格式如下:
[root@localhost ~]# su [选项] 用户名
选项:
- -:当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等),使用 - 选项可省略用户名,默认会切换为 root 用户。
- -l:同 - 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号。
- -p:表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件)。
- -m:和 -p 一样;
- -c 命令:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。
#查看当前用户登录
[root@localhost /]# whoami
root
su 和 su - 的区别
注意,使用 su 命令时,有 - 和没有 - 是完全不同的,- 选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。我们知道,环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行。
4.15、Linux id命令:查看用户的UID和GID
id 命令可以查询用户的UID、GID 和附加组的信息。命令比较简单,格式如下:
[root@localhost ~]# id 用户名
4.16、Linux gpasswd命令用法详解:把用户添加进组或从组中删除
为了避免系统管理员(root)太忙碌,无法及时管理群组,我们可以使用 gpasswd 命令给群组设置一个群组管理员,代替 root 完成将用户加入或移出群组的操作。
gpasswd 命令的基本格式如下:
[root@localhost ~]# gpasswd 选项 组名
选项 | 功能 |
---|---|
选项为空时,表示给群组设置密码,仅 root 用户可用。 | |
-A user1,… | 将群组的控制权交给 user1,… 等用户管理,也就是说,设置 user1,… 等用户为群组的管理员,仅 root 用户可用。 |
-M user1,… | 将 user1,… 加入到此群组中,仅 root 用户可用。 |
-r | 移除群组的密码,仅 root 用户可用。 |
-R | 让群组的密码失效,仅 root 用户可用。 |
-a user | 将 user 用户加入到群组中。 |
-d user | 将 user 用户从群组中移除。 |
栗子:
#以lamp用户登陆系统,并将用户 lamp 和 lamp1 加入group1群组。
[lamp@localhost ~]#gpasswd -a lamp group1
[lamp@localhost ~]#gpasswd -a lamp1 group1
[lamp@localhost ~]#grep "group1" /etc/group
group1:x:506:lamp,lamp1
使用
usermod -G
命令也可以将用户加入群组,但会产生一个问题,即使用此命令将用户加入到新的群组后,该用户之前加入的那些群组都将被清空。
- 虽然使用 usermod 命令成功地将 lamp 用户加入在 group2 群组中,但 lamp 用户原本在 group1 群组中,此时却被移出,这就是使用 usermod 命令造成的。
- 因此,将用户加入或移出群组,最好使用 gpasswd 命令。
4.17、Linux newgrp命令用法详解:切换用户的有效组
我们知道,每个用户可以属于一个初始组(用户是这个组的初始用户),也可以属于多个附加组(用户是这个组的附加用户)。既然用户可以属于这么多用户组,那么用户在创建文件后,默认生效的组身份是哪个呢?
当然是初始用户组的组身份生效,因为初始组是用户一旦登陆就获得的组身份。也就是说,用户的有效组默认是初始组,因此所创建文件的属组是用户的初始组。那么,既然用户属于多个用户组,能不能改变用户的初始组呢?使用命令 newgrp 就可以。
newgrp 命令可以从用户的附加组中选择一个群组,作为用户新的初始组。此命令的基本格式如下:
[root@localhost ~]# newgrp 组名
比如:
切换至 user1 用户,通过 newgrp 切换用户组进行下列操作,读者可从中体会出 newgrp 命令的作用。
#切换至 user1 用户
[root@localhost ~]# su - user1
[root@localhost ~]# whoami
user1
#使用 newgrp 命令一边切换 user1 的初始组,一边创建文件
[root@localhost ~]# mkdir user1_doc
[root@localhost ~]# newgrp group2
[root@localhost ~]# mkdir user2_doc
[root@localhost ~]# newgrp group3
[root@localhost ~]# mkdir user3_doc
#查看各文件的详细信息
[root@localhost ~]# ll
total 12
drwxr-xr-x 2 user1 group1 4096 Oct 24 01:18 user1_doc
drwxr-xr-x 2 user1 group2 4096 Oct 24 01:18 user2_doc
drwxr-xr-x 2 user1 group3 4096 Oct 24 01:19 user3_doc
可以看到,通过使用 newgrp 命令切换用户的初始组,所创建的文件各自属于不同的群组,这就是 newgrp 所发挥的作用,即通过切换附加组成为新的初始组,从而让用户获得使用各个附加组的权限。
4.18、vipw
vipw >>>等同于 vi /etc/passwd 命令
4.19、vigv
vigv >>>等同于 vi /etc/group 命令 (更加安全)
4.20、whoami
whoami 命令用于显示当前用户的名称。