天天看點

Linux特殊權限SUIDSGIDSBIT設定特殊權限

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/
           

繼續閱讀