Linux特殊許可權:SUID、SGID、SBIT
SUID:
只對二進位程式有效
執行者對於程式需要有x許可權
在程式運行過程中,執行者擁有程式擁有者的許可權
例如:
普通使用者執行passwd命令。
首先查看passwd命令的絕對路徑:
查看passwd命令許可權:
passwd的擁有者是root,且擁有者許可權裡面本應是x的那一列顯示的是s,這說明這個命令具有SUID許可權。
同時發現普通使用者沒有w許可權,所以按理來說普通使用者是不能執行這個命令的,因為這個命令修改了密碼肯定是要寫檔案的。
進一步分析,實際上passwd這個命令會操作/etc/shadow這個檔案,因為密碼都是放在這裡,查看密碼檔案許可權:
發現許可權是000,(注意:root使用者對所有檔案都是有rw許可權的,對所有目錄都是有rwx許可權的),這意味著普通使用者確實不能獨讀或寫這個檔案。
不過因為passwd命令具有SUID許可權,所以普通使用者執行這個命令時,當系統產生對應的進程後,這個進程就擁有了/usr/bin/passwd檔案擁有者root的許可權。
上面的操作在要輸入密碼時按CTRL+Z,斷行符號。
查看進程樹:
可以發現確實passwd的許可權不是pstar而是root!
SGID:
對於檔案:
SGID對於二進位程式有用
程式執行著要有x許可權
執行者在執行過程中會獲得改程式使用者組的許可權(相當於臨時加入了程式的使用者組)
例如:
普通使用者使用locate命令。(直接看圖)
發現使用者組許可權中應該出現x的位置顯示的s,表示這個命令具有SGID許可權。而普通使用者只有x許可權而沒有rw許可權。
locate這個命令,實際上會去訪問/var/lib/mlocate/mlocate.db這個檔案。
這個檔案對於普通使用者沒有任何許可權。所以理論上普通使用者執行locate命令是不行的。
不過因為locate命令有SGID許可權,所以運行locate產生進程時,這個進程會得到locate命令的使用者組許可權,相當於pstar這個使用者被臨時加入了使用者組slocate。
於是就對mlocate.db這個檔案有了r許可權,可以訪問了!
對於目錄:
使用者對此目錄有rx許可權可以進入目錄
使用者進入此目錄後,有效使用者組會變成該目錄的使用者組
若使用者在此目錄有w許可權,則使用者建立的檔案使用者組與該目錄使用者組相同
例如:
一個團隊想在linux某個目錄下協同工作來做一個項目,那麼每個團隊成員都得對這個目錄下的所有檔案具有rwx許可權。
於是我們首先建立一個使用者組,再建立幾個帳號,每個帳號的使用者組都加入剛才建立的那個使用者組。
再建立工作目錄,許可權設為770,把目錄的使用者組加上上一步建立的使用者組。
到這裡為止,我們思考下會有什麼問題?
現在帳號A建立一個檔案,建立檔案的擁有者和使用者組都會是A!重要的是其他使用者都無法訪問這個檔案!
所以我們需要給這個目錄加入SGID許可權,之後任意一個使用者建立的檔案,檔案使用者組都會是這個目錄的使用者組。萬事OK!
SBIT:
只針對目錄有效
當使用者對目錄擁有wx許可權時,使用者在該目錄建立的檔案或目錄,只有自己與root才可以刪除。
設定和查看SUID/SGID/SBIT許可權的方法:
SUID是4 SGID是2 SBIT是1
chmod 4755 filename
第一個7代表的就是這三個特殊命令,後面的755是普通許可權。上面的命令把filename這個檔案加入了SUID許可權。
查看特殊許可權的方法就是普通的ls命令:
SUID會在所屬使用者權限本應是x的地方顯示s
SGID會在所屬使用者組許可權本應是x的地方顯示s
SBIT在其它使用者權限本應是x的地方顯示t
如果希望尋找系統中所有具有特殊許可權的檔案,則:
find / -perm +7000