Linux中的文件特殊權限

Linux特殊權限:SUID、SGID、SBIT

SUID:
 只對二進制程序有效
 執行者對於程序需要有x權限
 在程序運行過程中,執行者擁有程序擁有者的權限
 例如:
 普通用戶執行passwd命令。
 首先查看passwd命令的絕對路徑:
 20130629103133652.jpeg
 查看passwd命令權限:
 20130629103152294.jpeg
 passwd的擁有者是root,且擁有者權限裏面本應是x的那一列顯示的是s,這說明這個命令具有SUID權限。
 同時發現普通用戶沒有w權限,所以按理來說普通用戶是不能執行這個命令的,因爲這個命令修改了密碼肯定是要寫文件的。
 進一步分析,實際上passwd這個命令會操作/etc/shadow這個文件,因爲密碼都是放在這裏,查看密碼文件權限:
 20130629103213535.jpeg
 發現權限是000,(注意:root用戶對所有文件都是有rw權限的,對所有目錄都是有rwx權限的),這意味着普通用戶確實不能獨讀或寫這個文件。
 不過因爲passwd命令具有SUID權限,所以普通用戶執行這個命令時,當系統生成對應的進程後,這個進程就擁有了/usr/bin/passwd文件擁有者root的權限。
 20130629103229671.jpeg
 上面的操作在要輸入密碼時按CTRL+Z,回車。
 查看進程樹:
 20130629103251136.jpeg
 可以發現確實passwd的權限不是pstar而是root!

SGID:
 對於文件:
  SGID對於二進制程序有用
  程序執行着要有x權限
  執行者在執行過程中會獲得改程序用戶組的權限(相當於臨時加入了程序的用戶組)
  例如:
  普通用戶使用locate命令。(直接看圖)
 20130629103309960.jpeg
  發現用戶組權限中應該出現x的位置顯示的s,表示這個命令具有SGID權限。而普通用戶只有x權限而沒有rw權限。
  locate這個命令,實際上會去訪問/var/lib/mlocate/mlocate.db這個文件。
 20130629103333650.jpeg
  這個文件對於普通用戶沒有任何權限。所以理論上普通用戶執行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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章