close

最近在想Linux下的執行檔setuid/setgid的意思還滿容易理解的

就是非owner在執行該檔時,在runtime期間會暫時擁有該檔的owner/group權限
而且在這期間,你的euid(effective uid)就會是該owner id


但是目錄的setuid/setgid就沒那麼好懂
查了一下這篇有詳細解說
在Linux下,一個目錄設了setuid沒有意義,但是設了setgid就有意義了
如果這個目錄設了setgid,那麼之後在這個目錄內新增檔案或資料夾
這些檔案或資料夾的group就會繼承這個設了setgid的目錄之group
而不是建立者的group,這樣可以避免多人協作上的不便
這些檔案或資料夾的owner仍是建立者的.


而且這個動作是不會溯及既往的,也就是在你對這個目錄
設了setgid前的檔案/目錄都不會變動.
只有設了setgid後,在裡面新增的檔案/目錄才有效果,
所以如果你想要變動設定setgid之前的檔案/目錄
只能寫shell或用工具一個一個設了.


目錄還有所謂的sticky bit
也就是像/tmp目錄一樣
任何人都可以寫東西進去,但寫進去的東西只有該目錄owner
或寫進去的人或root可以更名/刪除,
除此之外其他人沒辦法動你的東西.


檔案的sticky bit看起來好像比較少在用,
維基裡面舉了Solaris的 swap file當例子


最後就是你在設定setuid/setgid/sticky bit時
本身該給的execution執行權限就要給,
如果沒給的話,setuid/setgid的s 和 sticky bit的 t會變成大寫

mint@mint ~ $ chmod 7666 tt*
mint@mint ~ $ ls -ld tt*

drwSrwSrwT 2 mint mint 40 Dec 12 20:33 tt
-rwSrwSrwT 1 mint mint  0 Dec 12 20:33 tt_file


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 fvalinux 的頭像
    fvalinux

    Elegance

    fvalinux 發表在 痞客邦 留言(0) 人氣()