2014年5月28日星期三

Linux_062:SUID与SGID的作用

使用命令:ls -l /etc/passwd,查看/etc/passwd文件详细信息时,发现只有root用户才有读写权限:
-rw-r--r-- 1 root root 1778 5月  26 23:38 /etc/passwd
再使用命令:ls -l /usr/bin/passwd,查看/usr/bin/passwd文件,发现只有root用户才有执行权限。
-rwsr-xr-x. 1 root root 30768 2月  17 2012 /usr/bin/passwd
等一下,那个“s”是干吗的?
这个s就是SUID,当设置了SUID时,进程的UID为该可执行文件的属主的UID。
这就是为什么普通用户使用passwd命令时,可以修改/etc/passwd文件内容,因为passwd命令的运行权限就是root!
可以使用“chmod u+s 文件名” 和“chmod u-s 文件名”来设置和取消SUID设置。
以此类推,可以使用“chmod g+s 文件名” 和“chmod g-s 文件名”来设置和取消SGID设置。那么,SGID有什么用处呢?

假如有多个用户都工作于一个项目,比如都需要在目录project1下编辑文件。此时,SGID就可以派上用场。
(1)使用mkdir project1,创建目录project1。
(2)使用chmod g+w ,让同组的其他人可以读写目录project1。
(3)使用chgrp devel project1,改变目录project1的属组为devel。
(4)使用usermod –G devel dev1,把用户dev1加到用户组devel中,以此类推加入其他用户,比如guo。
(4)使用chmod g+s,让该目录下创建的文件的属组与该目录的属组相同。

目录project1的权限如下:
drwxrwsr-x.   2 root project1  4096 5月  28 22:12 project1

每个用户都可以在project1目录下的文件,创建后的文件的属主是每个用户自己,属组则是project1,比如:
-rw-rw-r--. 1 dev1 project1 0 4月  16 00:44 dev1.txt
-rw-rw-r--  1 guo  project1 0 5月  28 22:12 guo.txt
因为属组有写权限,因此每个用户可以修改其他用户的文件。

参考文献:
1. http://hi.baidu.com/mcaeebbkarjknte/item/f25945493c2388ab60d7b95c

没有评论: