Linux SETUID機制
(1)進程運行時能夠訪問哪些資源或文件,不取決於進程文件的屬主屬組,而是取決於運行該命令的用戶身份的uid/gid,以該身份獲取各種系統資源。
(2)對一個屬主為root的可執行文件,如果設置了SUID位,則其他所有普通用戶都將可以以root身份運行該文件,獲取相應的系統資源。
(3)可以簡單地理解為讓普通用戶擁有可以執行“只有root權限才能執行”的特殊權限。
(4)setuid,setuid的作用是讓執行該命令的用戶以該命令擁有者的權限去執行,比如普通用戶執行passwd時會擁有root的權限,這樣就可以修改/etc/passwd這個文件了。它的標志為:s,會出現在x的地方,例:-rwsr-xr-x 。而setgid的意思和它是一樣的,即讓執行文件的用戶以該文件所屬組的權限去執行。
(5)我們知道/tmp是系統的臨時文件目錄,所有的用戶在該目錄下擁有所有的權限,也就是說在該目錄下可以任意創建、修改、刪除文件,那如果用戶A在該目錄下創建了一個文件,用戶B將該文件刪除了,這種情況我們是不能允許的。為了達到該目的,就出現了stick bit(粘滯位)的概念。它是針對目錄來說的,如果該目錄設置了stick bit(粘滯位),則該目錄下的文件除了該文件的創建者和root用戶可以刪除和修改/tmp目錄下的stuff,別的用戶均不能動別人的,這就是粘滯位的作用。
Chmod命令中的特殊權限位含義:
1、S_ISUID 04000 文件的 (set user-id on execution)位
2、S_ISGID 02000 文件的 (set group-id on execution)位
3、S_ISVTX 01000 文件的sticky 位
上面的都是8進制數。
如何設置UID、GID、STICK_BIT:
SUID:置於 u 的 x 位,原位置有執行權限,就置為 s,沒有了為 S .
chmod u+s xxx # 設置setuid權限
chmod 4551 file // 權限: r-sr-x—x
SGID:置於 g 的 x 位,原位置有執行權限,就置為 s,沒有了為 S .
chmod g+s xxx # 設置setgid權限
chmod 2551 file // 權限: r-xr-s--x
STICKY:粘滯位,置於 o 的 x 位,原位置有執行權限,就置為 t ,否則為T .
chmod o+t xxx # 設置stick bit權限,針對目錄
chmod 1551 file // 權限: r-xr-x--t