已索引
该文章已被其他文章引用。
组密码文件 /etc/gshadow 的内容格式为:
project:encrypted-password:boss:manager
第1列是组名,第2列是加密后的组密码,第三列组管理员用户列表(该列用户可以设置组密码及添加用户到第四列),第四列是允许无密码切换为该组的用户列表。
构造实验环境:
# groupadd project
# gpasswd project
# useradd boss
# useradd manager
# useradd guoke
# vi /etc/gshadow
project:encrypted-password:boss:manager
# ll -d /share/
drwxrwx---. 2 root project 6 Jun 6 22:05 /share/
测试:
# su - boss
$ id
uid=1003(boss) gid=1003(boss) groups=1003(boss)
$ touch /share/boss.file
touch: cannot touch ‘/share/boss.file’: Permission denied
$ newgrp project <-- newgrp 命令可以临时更改用户的主要组
Password: <-- 需要输入密码,因为boss不在第4列里面
$ id
uid=1003(boss) gid=1005(project) groups=1003(boss),1005(project)
用户的主要组临时变为了project,原来所属的组不丢失。
[boss@server0 ~]$ touch /share/boss.file
[boss@server0 ~]$ exit
exit
[boss@server0 ~]$ exit
logout
注意执行了两遍exit才回到root用户身份。
# su - manager
$ touch /share/manager.file
touch: cannot touch ‘/share/manager.file’: Permission denied
$ newgrp project <-- 不需要输入密码,因为manager在第4列中
$ touch /share/manager.file
[manager@server0 ~]$ exit
exit
[manager@server0 ~]$ exit
logout
注意执行了两遍exit才回到root用户身份。
# su - guoke
$ touch /share/guoke.file
touch: cannot touch ‘/share/guoke.file’: Permission denied
$ newgrp project
Password: <-- 其它用户想切换到该组,需要输入密码
$ id
uid=1005(guoke) gid=1005(project) groups=1006(guoke),1005(project)
[guoke@server0 ~]$ touch /share/guoke.txt
[guoke@server0 ~]$ exit
exit
[guoke@server0 ~]$ exit
logout
第3列用户是组的管理员,可以使用 gpasswd 命令对组进行管理(man gpasswd)。例如:
$ gpasswd project <-- 为该组重置密码
$ gpasswd -a guoke project
该命令会将用户 guoke 同时加到 /etc/group 文件和 /etc/gshadow 中的 project 组的最后
$ gpasswd -d guoke project
该命令会同时将用户 guoke 从 /etc/group 文件和 /etc/gshadow 中的 project 组的最后删除
$ gpasswd -r project
将组的密码列清空,这样一来,非第4列中的用户在使用 newgrp 切换时,会提示输入密码,直接回车将报错(无论怎么输入密码都会提示密码无效),这样一来,就只有第4列中的用户可以 newgrp 到该组。
$ gpasswd -R project
将组的密码列变为 ! ,man page 说 Only group members with a password will be allowed to use newgrp to join the named group. 但是实验时,第4列中的用户还是无密码就切换了。
# gpasswd -A guoke project
只能root执行,将第3列用户名修改为 guoke。
# gpasswd -A boss,guoke project
只能root执行,将第3列用户名修改为 boss 和 guoke。
按照 man gshadow 说明,第3列中的用户是可以管理第4列中的用户的,但实验时提示无权限:
[boss@server0 ~]$ gpasswd -M guoke project
gpasswd: Permission denied.
[boss@server0 ~]$ gpasswd -M guoke,manager project
gpasswd: Permission denied.
用root做没问题:
[root@server0 ~]# gpasswd -M guoke project
将第4列用户名修改为 guoke
# gpasswd -M manager,guoke project
将第4列用户名修改为 boss 和 guoke