[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 35612 8月24 2010 /usr/bin/locate
其實,SGID 和 SUID 的不同之處就在于,SUID 賦予用戶的是文件所有者的權限,而 SGID 賦予用戶的是文件所屬組的權限,就這么簡單。
就以本節開頭的 locate 命令為例,可以看到,/usr/bin/locate 文件被賦予了 SGID 的特殊權限,這就意味著,當普通用戶使用 locate 命令時,該用戶的所屬組會直接變為 locate 命令的所屬組,也就是 slocate。[root@localhost ~]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 1838850 1月20 04:29 /var/lib/mlocate/mlocate.db
再次強調,無論是 SUID,還是 SGID,它們對用戶身份的轉換,只有在命令執行的過程中有效,一旦命令執行完畢,身份轉換也隨之失效。
[root@localhost ~]# cd /tmp
#進入臨時目錄做此實驗。因為只有臨時目錄才允許普通用戶修改
[root@localhost tmp]# mkdir dtest
#建立測試目錄
[root@localhost tmp]# chmod g+s dtest
#給測試目錄賦予SetGID權限
[root@localhost tmp]# ll -d dtest
drwxr-sr-x 2 root root 4096 Apr 19 06:04 dtest
#SetGID權限已經生效
[root@localhost tmp]# chmod 777 dtest
#給測試目錄賦予777權限,讓普通用戶可以寫
[root@localhost tmp]# su - lamp
[lamp@localhost ~]# grep lamp /etc/passwd /etc/group
/etc/passwd:lamp:x:501:501::/home/lamp:/bin/bash
/etc/group:lamp:x:501:
#切換成普通用戶lamp,此用戶的所屬群組為 lamp
[lamp@localhost ~]$ cd /tmp/dtest/
#普通用戶進入測試目錄
[lamp@localhost dtest]$ touch abc
[lamp@localhost dtest]$ mkdir zimulu
#在此目錄中創建新的文件 abc 和子目錄 zimulu
[lamp@localhost dtest]$ ll
total 0
-rw-rw-r--. 1 lamp root 0 Apr 19 06:07 abc
drwxrwsr-x. 2 lamp root 40 Apr 19 06:07 zimulu
新聞熱點
疑難解答