用户组密码管理详解

#为什么需要对用户组设置密码
如果一个用户属于某个用户组,或者多个用户组,那么这个用户是可以将自己的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: 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值