SUID
passwd這個指令是用來修改密碼的,所有人都可以用來修改自己的密碼,其中root可以修改其他人的密碼。而密碼是存在/etc/shadow檔案下的,看下這個檔案的權限:
[email protected]:tmp$ ll /etc/shadow
-rw-r----- 1 root shadow 1.4K 9月 14 12:32 /etc/shadow
這個檔案隻有root有寫入的權限,那我們用passwd指令的時候,明明不是root,為什麼可以把修改的密碼寫入這個檔案呢?主要就是passwd的特殊權限:
[email protected]:tmp$ ll $(which passwd)
-rwsr-xr-x 1 root root 59K 3月 23 03:05 /usr/bin/passwd
可以發現權限不是常見的x,而是s(代表x和SUID,如果是大寫的S,代表沒有x隻有SUID,這時SUID無效)。當二進制可執行檔案擁有這種權限時,代表程序的擁有人和檔案擁有人相同,而不是執行人。也就是說,任何人執行passwd時,程序的擁有人身份不是執行人,而是passwd的擁有人(root),是以這個程序可以修改shadow檔案。
SGID
和SUID很像,擁有這個權限時:
如果是二進制可執行檔案,代表程序的群組身份和檔案所屬群組相同。
SUID不能給目錄特殊含義,但是SGID可以,比如:
[email protected]:tmp$ ll -d test/
drwxr-sr-x 2 allen root 6 9月 14 17:46 test/
[email protected]:tmp$ cd test/
[email protected]:test$ touch file
[email protected]:test$ ll file
-rw-r--r-- 1 allen root 0 9月 14 17:48 file
可以看到最後的file檔案所屬群組并不是allen組,而是和test目錄同樣的組(root)。是以對于目錄,SGID代表的含義:任何在目錄下的操作,群組身份都和目錄群組相同。
SBIT
直接看典型目錄:
[email protected]:/$ ll -d tmp/
drwxrwxrwt 18 root root 4.0K 9月 14 18:03 tmp/
當普通目錄的權限是777時,代表任何人都可以在目錄下随便增删改。但如果需要設定一個目錄為:任何人都可以新增檔案,但隻能修改删除自己建立的檔案。這時,SBIT權限的作用就展現出來了,最後一個權限值是t。
設定特殊權限
權限 | 權重 | 值 |
SUID | 4 | s |
SGID | 2 | s |
SBIT | 1 | t |
設定方法:
[email protected]:tmp$ chmod 7777 test/
[email protected]:tmp$ ll -d test/
drwsrwsrwt 2 allen allen 18 9月 14 17:48 test/
還有種方法:
[email protected]:tmp$ chmod u=s,g-s,o-t test/
[email protected]:tmp$ ll -d test/
d--Srwxrwx 2 allen allen 18 9月 14 17:48 test/