一、SetGID
SGID即可以針對文件生效,也可以針對目錄生效,這和SUID明顯不同。
1、針對文件的作用
針對文件,SGID的含義如下:
(1)只有可執行的二進制程序才能設置SGID權限。
同SUID。
(2)命令執行者要對該程序擁有x(執行)權限。
同SUID。
(3)命令執行在執行程序的時候,組身份升級為該程序文件的屬組。
#查看locate命令
[root@localhost ~ ] # ll /usr/bin/locate
-rwx-s--x 1 root slocate 35612 8月 24 2010 /usr/bin/locate
#查看mlocate.db文件
[root@localhost ~ ] # ll /var/lib/mlocate/mlocate.db
-rw-r---1 root slocate 1838850 1月 20 04:29 /var/lib/mlocate/mlocate.db
當普通用戶user1執行locate
命令時,會發生如下事情:
-
/usr/bin/locate
是可執行二進制程序,可以賦予SGID, - 執行命令的用戶user1,對
/usr/bin/locate
命令擁有執行權限。 - 執行
/usr/bin/locate
命令時,組身份會升級為slocate
組,而slocate
組對
/var/lib/mlocate/mlocate.db
數據庫擁有r
權限,所以普通用戶可以使用locate
命令查詢mlocate.db數據庫。 - 命令結束,user1用戶的組身份返回為user1組。
(4)SetGID權限同樣只在該程序執行過程中有效,也就是說組身份改變只在程序執行過程中有效。
2、針對目錄的作用
SGID針對目錄設置,含義如下:
- 普通用戶必須對此目錄擁有r和x權限,才能進入此目錄。
- 普通用戶在此目錄中的有效組會變成此目錄的屬組。
- 若普通用戶對此目錄擁有w權限時(也就是其他人權限是7,普通用戶才能進入目錄),新建的文件的默認屬組是,這個目錄的屬組。
不明白,看下面的例子。
#進入臨時目錄做此實驗。因為臨時目錄才允許普通用戶修改
[root@localhost ~ ] # cd /tmp/
#建立測試目錄
[root@localhost tmp] # mkdir dtest
#給測試目錄賦予SGID
[root@localhost tmp] # chmod g+s dtest
#查看dtest/目錄,SGID已經生效
[root@localhost tmp] # ll -d dtest/
drwxr-sr-x 2 root `root` 4096 1月 20 06:04 dtest/
#給測試目錄權限,讓普通用戶可以寫,
#注意權限一定要是777,否則普通用戶進入不了目錄。
[root@localhost tmp]#chmod 777 dtest/
#切換成普通用戶userl
[root@localhost tmp] # su - user1
#普通用戶進入測試目錄,
#如果上邊權限不設置成777,測試普通用戶進不來。
[user1@localhost ~ ]$ cd /tmp/dtest/
#普通用戶建立abc文件
[user1@localhost dtest]$ touch abc
#abc文件的默認屬組不再是user1用戶組,而變成了dtest組的屬組root
[user1@localhost dtest]$ ll
總用量0
-rw-rw-r-1 userl `root` 0 1月 20 06:07 abc
總結上邊例子的意思:也就是說,root用戶如果給目錄賦予了
SGID
特殊權限。那么普通用戶(user1)在該文件中所創建的文件的所有組不是user1,而是這個目錄的所屬組。
SGID針對目錄的作用本身沒有風險。就是賦予目錄的權限是777有些風險,能不用就別用。
關于特殊權限SGID的針對目錄的作用,了解一下即可。