#为什么需要对用户组设置密码
如果一个用户属于某个用户组,或者多个用户组,那么这个用户是可以将自己的shell灵活的切换到对应的自己
的所属组。所谓切换用户组指的是切换用户的主要组。比如zrf用户属于users,admins,xianggang这3个
组。
[root@xzq-almalinux ~]# usermod -aG users,admins,xianggang zrf
[root@xzq-almalinux ~]# id zrf
uid=1005(zrf) gid=1005(zrf) groups=1005(zrf),100(users),1006(admins),1007(xianggang)
由于zrf用户的主要组是zrf,所以zrf用户创建文件后,文件的所属组属于zrf这个主要组
[root@xzq-almalinux ~]# su - zrf -c 'touch /tmp/zrf-file1.txt'
[root@xzq-almalinux ~]# ls -l /tmp/zrf-file1.txt
-rw-r--r--. 1 zrf zrf 0 Nov 2 16:35 /tmp/zrf-file1.txt
如果zrf用户想要创建一个所属组为admins的文件,那么就需要将主要组从zrf换成admins,可以使用
newgrp命令实现。newgrp命令可以切换用户当前的主要组。
[zrf@xzq-almalinux ~]$ newgrp admins
[zrf@xzq-almalinux ~]$ id
uid=1005(zrf) gid=1006(admins) groups=1006(admins),100(users),1005(zrf),1007(xianggang) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[zrf@xzq-almalinux ~]$ touch /tmp/zrf-file2.txt
[zrf@xzq-almalinux ~]$ ls -l /tmp/zrf-file2.txt
-rw-r--r--. 1 zrf admins 0 Nov 2 16:38 /tmp/zrf-file2.txt
执行 newgrp admins 后,
用户 zrf 的当前有效主组(gid)切换为 admins 组(gid=1006)
id 命令的输出 gid=1006(admins)
[zrf@xzq-almalinux ~]$ exit
exit
[zrf@xzq-almalinux ~]$ id
uid=1005(zrf) gid=1005(zrf) groups=1005(zrf),100(users),1006(admins),1007(xianggang) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
1. Linux 用户组的两种 “身份”
每个用户在系统中存在两种与组相关的身份:
默认主组:在 /etc/passwd 中记录(创建用户时自动生成,如 zrf 组),是用户的 “固有组”,不会随会话变化。
有效主组:当前会话中实际生效的主组(默认与默认主组一致),可以通过 newgrp 临时修改,用于决定 “新创建文件的默认所属组”。
2. newgrp 的工作原理
newgrp 组名 命令的本质是 创建一个新的子 shell 会话,并在这个子会话中临时将 “有效主组” 切换为指定组:
执行后,当前终端会进入一个新的 shell 环境(子会话),此时 id 命令显示的 gid 变为目标组(如 admins)。
在这个子会话中创建的文件,其所属组会跟随当前有效主组(因此 /tmp/zrf-file2.txt 属于 admins 组)。
3. 退出会话后恢复的原因
当你执行 exit 时,实际是 退出了 newgrp 创建的子 shell 会话,回到了原来的父会话:
子会话结束后,临时修改的 “有效主组” 失效,父会话的有效主组仍为默认主组(zrf 组)。
因此,id 命令显示的 gid 恢复为默认值,后续操作也会基于默认主组进行。
总结
这个现象的核心是:newgrp 仅在当前子会话中临时改变有效主组,不影响用户的默认主组配置,也不会改变 shell 本身的类型。一旦退出子会话,所有临时设置自动失效,回到初始状态。
注意,newgrp命令指示用于临时的切换,下次zrf用户登录的时候,主要组会根据/etc/passwd文件中指定的
gid来设置
由于admins用户组是zrf用户的附加组,所以zrf用户使用newgrp切换到admins组并不需要提供任何凭据,
但是一旦zrf用户想切换到一个自己不属于的用户组,那么就需要提供这个用户组的密码了。比如zrf想切换到
japan用户组,就需要提供japan用户组的密码。
[zrf@xzq-almalinux ~]$ newgrp japan
Password
#设置用户组密码
只有root用户和用户组的管理员可以设置用户组密码
[root@xzq-almalinux ~]# gpasswd japan
Changing the password for group japan
New Password:cls
Re-enter new password:cls
[zrf@xzq-almalinux ~]$ id
uid=1005(zrf) gid=1005(zrf) groups=1005(zrf),100(users),1006(admins),1007(xianggang) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[zrf@xzq-almalinux ~]$ touch file1
[zrf@xzq-almalinux ~]$ ls -l file1
-rw-r--r--. 1 zrf zrf 0 Nov 2 16:47 file1
[zrf@xzq-almalinux ~]$ newgrp japan
Password:
[zrf@xzq-almalinux ~]$ id
uid=1005(zrf) gid=1009(japan) groups=1009(japan),100(users),1005(zrf),1006(admins),1007(xianggang) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[zrf@xzq-almalinux ~]$ touch file2
[zrf@xzq-almalinux ~]$ ls -l file2
-rw-r--r--. 1 zrf japan 0 Nov 2 16:47 file2
#/etc/gshadow
/etc/gshadow 是 Linux 系统中存放用户组影子信息的文件,用于存储用户组的加密密码、组管理员以及组
成员等信息,只有 root 用户才有权限访问。
结构:文件中的每一行代表一个用户组,以 “:” 分隔成 4 个字段,格式为
groupname:password:admin,admin,...:member,member,...。
用户组名:第一个字段是用户组的名称,用于标识系统中的不同用户组。例如 root、users 等。
用户组密码:第二个字段存储的是用户组的加密密码。如果该字段为空或为 !,表示这个用户组没有设置密
码。当设置了用户组密码后,非本组成员可以使用 newgrp 命令并提供正确密码临时切换到该用户组,获得相
应权限。
用户组管理者:第三个字段记录的是用户组管理员的用户名。如果有多个用户组管理者,用 , 号分割。只有用
户组管理员才有权限修改该用户组的密码或成员列表。该字段也可为空,表示没有指定特定的管理员。
组成员:第四个字段列出了属于该用户组的所有成员的用户名,多个成员之间用 , 号分割。
[root@xzq-almalinux ~]# gpasswd --help
Usage: gpasswd [option] GROUP
Options:
-a, --add USER add USER to GROUP
-d, --delete USER remove USER from GROUP
-h, --help display this help message and exit
-Q, --root CHROOT_DIR directory to chroot into
-r, --delete-password remove the GROUP's password
-R, --restrict restrict access to GROUP to its members
-M, --members USER,... set the list of members of GROUP
-A, --administrators ADMIN,...
set the list of administrators for GROUP
Except for the -A and -M options, the options cannot be combined.
#设置组管理员 和 组管理员操作
gpasswd 是 Linux 组管理工具,语法:gpasswd [选项] 组名,关键选项如下:
-a 用户名:添加用户到组(例:gpasswd -a lzl japan)
-d 用户名:从组移除用户(例:gpasswd -d ldh japan)
-A 管理员,...:设组管理员(多管理员用逗号分隔,例:gpasswd -A zrf japan)
-M 成员,...:批量设组成员(覆盖原有成员,例:gpasswd -M lzl,ldh japan)
-r:删除组密码(例:gpasswd -r japan)
-R:限制组访问(仅成员可切换,例:gpasswd -R japan)
-h:显示帮助
[root@xzq-almalinux ~]# useradd lzl
[root@xzq-almalinux ~]# gpasswd -a lzl japan
Adding user lzl to group japan
[root@xzq-almalinux ~]# su - zrf
[zrf@xzq-almalinux ~]$ gpasswd -a ldh japan
gpasswd: Permission denied.
[root@xzq-almalinux ~]# gpasswd -A zrf japan
[root@xzq-almalinux ~]# getent gshadow japan
japan:$6$rounds=100000$LvYeBAhcRgaeDtUZ$cuS7rHegPuYTnWfsEbB70PbsK72Hz6fVS7BODOJrlmUJp4qrY2sMXTKmTeOzGd2340XOgl4cOqe05aa3/0g3c1:zrf:lzl
[root@xzq-almalinux ~]# su - zrf
[zrf@xzq-almalinux ~]$ gpasswd -a ldh japan
Adding user ldh to group japan
[zrf@xzq-almalinux ~]$ gpasswd -d ldh japan
Removing user ldh from group japan
[zrf@xzq-almalinux ~]$ gpasswd japan
Changing the password for group japan
New Password:
Re-enter new password:
2430

被折叠的 条评论
为什么被折叠?



