快速連接文章

請輸入Linux command

會員登入






遺失密碼
尚未註冊? 註冊

票選專區

您希望引用的 wiki 語系?
 

RSS

PayPal Donation

Enter Amount:

IDigitalNet Newsletter


E-Mail Address:
請選擇訂閱選項:
SUID & SGID 列印 E-mail
作者 Sonia   

當您在 Linux 系統上面執行一個檔案的時候(具有 x permission)﹐這個檔案所執行的程式﹐所具備的權限﹐就以執行者的 ID 為準﹕如果您是 root﹐那麼這個程式也是以 root 的權限執行﹔如果您是 user1﹐那就以 user1 的權限執行。但如果﹐一個執行檔還具有 SUID 屬性的話﹐那這個程式所具有的權限﹐就不是命令的執行者﹐而是檔案的擁有者﹕如果一個檔案具備 SUID 屬性﹐它的 user 和 group 都是 root﹐而且 others 也具有 x 權限﹐那麼﹐當 user1 執行這個檔案的時候﹐程式所具有的權限就不是 user1 而是 root﹗同樣﹐如果 SGID 也打開﹐那麼這個程式也具有檔案之 goup 群組相同的權限。

這樣的設計﹐是讓一些普通使用者以檔案擁有者的權限去執行某些程式。例如﹕某些程式﹐如 passwd (您不妨輸入 ls -l /usr/bin/passwd 看看)﹐需要寫入檔案系統中使用者本身不能存取的位置(如 /etc/shadow)﹐如果沒有 SUID 和 SGID 屬性﹐那這樣的設計是沒辦法做到的。不過﹐這樣的設計﹐也同時帶來了系統上的安全威脅。例如﹕系統被植入一個擁有者為 root 的後門程式﹐它能抓取只有 root 才能讀取的密碼檔案。如果在沒有 SUID 的情況之下﹐就算是一般用戶執行它﹐也沒辦法達到目的﹐因為程式只具備一般用戶的身份而已﹔但如果這個程式有設定 SUID﹐就算一般用戶執行它﹐也可以﹗

我們如何設定 SUID 和 SGID 呢﹖ 就是剛才我們提到的 chmod 的第 4 個數字﹕如果是 4 就是 SUID﹔如果是 2 就是 SGID﹔如果是 1﹐則為檔案設上一個特殊標籤﹕sticky bit (黏著位元)﹐當這個標籤打開的時候﹐只有檔案的擁有者才能刪除這個檔案(root 除外)﹐其它使用者就算具有 w 的權限﹐也只能修改檔案的內容﹐而不能將檔案刪除。如果一個目錄具有這個位元﹐那麼其下所建立的檔案﹐也具有這個屬性。

$ ls -l /etc/passwd
-rw-r--r--    1 root     wheel        1355 Nov  1 21:16 /etc/passwd
一般用戶不能直接修改 passwd 檔,但是,一般用戶確實需要在他們需要改變其密碼的任何時候,能夠修改 /etc/passwd(至少間接地)。但是,如果用戶不能修改該檔,究竟怎樣完成這個工作呢?
來看一看 passwd 可執行檔,我們可以看到它屬於 root 用戶:
$ ls -l /usr/bin/passwd
-rwsr-xr-x    1 root     wheel       17588 Sep 24 00:53 /usr/bin/passwd
這裏有一個 s 取替了用戶許可權三元群組中的一個 x。當 passwd 執行時,它將代表 root 用戶執行(具有完全超級用戶存取權)。

重要警告:在許多環境中,suid 和 suid 很管用,但是不恰當地使用這些位元可能使系統的安全遭到破壞。最好盡可能地少用“suid”程式。passwd 命令是為數不多的必須使用“suid”的命令之一。

最後更新 ( 2006/03/06, Monday )
 
< 前一個   下一個 >