UNIX系統中許多地方都會涉及 suid 和 sgid,在學習時還有 euid、egid 和原本 real uid、gid 和 sticky bit 幾個名詞
本篇記錄這幾個名詞之間的關聯與系統權限的觀念
在 UNIX 底下使用 ls -l
指令可以看見類似以下的表示法
-rwxr-xr-x
我們也可以使用 chmod
指令改變檔案權限
這邊細節請見參考資料
而除了 owner、group、other 各自的 read、write、excute 的執行權限外,最前面一位表示文件種類
在 UNIX 中有著將一切視為檔案的概念,最前面一位包含了
而一般 suid、sgid 只對 regular file 和 directory 有意義
若檔案有配置 suid 則會顯示在檔案權限的可執行位上
一般所謂的 real uid、real gid 是指我們登入時的 uid、gid
suid、sgid 指的是 setuid、setgid,這是可以設置在文件權限上的
uid, gid 會在user登入時會參照 /etc/passwd 中的設定賦予
而 euid 和 egid 指的是 effective 的意思,kernel 是依照 euid 和 egid 來決定 process 對 resource 的訪問權限
假設一個 process 在沒有 setuid、setgid 的情況下
euid=uid egid=gid
若 process 在有 setuid、setgid 的情況下
euid=process owner uid egid=process owner gid
suid 的權限高於 sgid,若僅設 suid、而 euid 和 egid 權限衝突下,以 euid 優先
所以在UNIX系統中我們使用 passwd
更改自己密碼時,user 本身不需要 root 權限
但 passwd 這隻程式會去修改 /etc/master.passwd 和 /etc/passwd 檔案中 user 的密碼資料
/etc/master.passwd和/etc/passwd都是只有root可寫入
這是因為 /usr/bin/passwd 這個檔案有 setuid
-r-sr-xr-x 2 root wheel 8392 Mar 22 23:50 /usr/bin/passwd
這邊可以看到最後三碼是 r-x,所以一般 user 都可以直接執行
而在 2~4 碼可以看到 r-s 這表示在執行時程式的 euid 會被設為 file owner 也就是 root
因此一般 user 執行 passwd 時,程式本身就能拿到root權限而去修改 /etc/passwd 中的資料了
除了 suid、sgid 外,在權限配置上還有個會出現的就是 sticky bit
sticky bit 對 regular file 而言有以下兩個功能
對 directory 的效用則為
在該資料夾內的檔案僅可被以下人員 delete 或 rename
常見的 sticky bit directory 如 /tmp