|
gpasswd 命令用来设定用户组密码。只有 root 或管理员才能运行命令对此设定,并且设定后的组密码在 /etc/group 的组密码域里是加密的,所用的散列加密算法由 /etc/default/passwd 文件中的 GROUP_CRYPT 项指定,如果不设定该项,那么由 CRYPT 这项指定。如果上述两项都没指定,那默认就使用 DES 算法来加密。
gpasswd 的使用很简单,比如下面打算给 tape 这个组加上一个密码:linux-xh53:~ # gpasswd tape
Changing the password for group tape.
New Password:
Re-enter new password:
$6$
Password changed. 设置完后可以查看 /etc/group 文件一下:tape:$6$bNBvTFttlkf2$C7F0fLLDmS/qVMgyTTn8tg6tfpYU5V5LRFRJD.DgNhYQcBNT44dkHoZbuhVOkV9cWfUfWMzNznR.cNNhmgYNQ.:101:
如果要清除掉组密码,那么用 gpasswd 的 -r 选项,如:linux-xh53:~ # gpasswd -r tape
Password removed.
newgrp 命令用来改变有效组 ID,换句话来说就是临时获得其他组的权限(在子 shell 里,类似于你运行了一下 su 命令),如果改组已经加入了组密码,那么就通过 newgrp 来输入组密码从而达到访问文件的目的。
例如我这里有一个 getpid 的程序,它的权限如下:ls -al getgid
-rwxr-xr-x 1 beyes users 9805 Dec 24 20:59 getgid 它的拥有者是 beyes,所属用户组是 users (gid 值为 100),运行该程序,主要是用来打印出运行程序的用户的真实组ID和有效组ID,以及尝试打开一个和该文件同样权限的 temp.txt 文件(这里,我已经给 temp.txt 去掉了其他组的读权限)。此外,我已经用上面的 gpasswd 给 users 组添加了密码。那么我现在想用一个名为 groad ,其属组为 tape(gid 值为 101) 的用户运行该文件:./getgid
Process's gid = 101, egid = 101
Open failure, errno is 13:Permission denied 由此可见,并没有权限打开 temp.txt 这个文件,原因是 groad 既不是 temp.txt 的拥有者,也不是 users 组成员,并且 temp.txt 的其他组也没有读权限。
下面,我用 newgrp 命令为 groad 这个用户临时获取 users 的权限:newgrp users
Password: #在这里输入组密码 在输入组密码后,再次打开该文件:./getgid
Process's gid = 100, egid = 100
Open successfully! 已经成功打开了。
关于 getpid 程序的代码可参考:http://www.groad.net/bbs/read.php?tid-5716.html |
|