以下摘自鸟哥的Linux私房菜
關於檔案的重要權限,那就是 rwx 這三個讀、寫、執行的權限。 但是,眼尖的朋友們一定注意到了一件事,那就是,怎麼我們的 /tmp 權限怪怪的? 還有,那個 /usr/bin/passwd 也怪怪的?怎麼回事啊?看看先:
[root@study ~]# ls -ld /tmp ; ls -l /usr/bin/passwd
drwxrwxrwt. 14 root root 4096 Jun 16 01:27 /tmp
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
|
不是應該只有 rwx 嗎?還有其他的特殊權限( s 跟 t )啊?啊.....頭又開始昏了~ @_@ 因為 s 與 t 這兩個權限的意義與系統的帳號 (第十三章)及系統的程序(process, 第十六章)較為相關, 所以等到後面的章節談完後你才會比較有概念!底下的說明先看看就好,如果看不懂也沒有關係, 先知道s放在哪裡稱為SUID/SGID以及如何設定即可,等系統程序章節讀完後,再回來看看喔!
- Set UID
當 s 這個標誌出現在檔案擁有者的 x 權限上時,例如剛剛提到的 /usr/bin/passwd 這個檔案的權限狀態:『-rwsr-xr-x』,此時就被稱為 Set UID,簡稱為 SUID 的特殊權限。 那麼SUID的權限對於一個檔案的特殊功能是什麼呢?基本上SUID有這樣的限制與功能:
- SUID 權限僅對二進位程式(binary program)有效;
- 執行者對於該程式需要具有 x 的可執行權限;
- 本權限僅在執行該程式的過程中有效 (run-time);
- 執行者將具有該程式擁有者 (owner) 的權限。
講這麼硬的東西你可能對於 SUID 還是沒有概念,沒關係,我們舉個例子來說明好了。 我們的 Linux 系統中,所有帳號的密碼都記錄在 /etc/shadow 這個檔案裡面,這個檔案的權限為:『---------- 1 root root』,意思是這個檔案僅有root可讀且僅有root可以強制寫入而已。 既然這個檔案僅有 root 可以修改,那麼鳥哥的 dmtsai 這個一般帳號使用者能否自行修改自己的密碼呢? 你可以使用你自己的帳號輸入『passwd』這個指令來看看,嘿嘿!一般使用者當然可以修改自己的密碼了!
唔!有沒有衝突啊!明明 /etc/shadow 就不能讓 dmtsai 這個一般帳戶去存取的,為什麼 dmtsai 還能夠修改這個檔案內的密碼呢? 這就是 SUID 的功能啦!藉由上述的功能說明,我們可以知道
- dmtsai 對於 /usr/bin/passwd 這個程式來說是具有 x 權限的,表示 dmtsai 能執行 passwd;
- passwd 的擁有者是 root 這個帳號;
- dmtsai 執行 passwd 的過程中,會『暫時』獲得 root 的權限;
- /etc/shadow 就可以被 dmtsai 所執行的 passwd 所修改。
但如果 dmtsai 使用 cat 去讀取 /etc/shadow 時,他能夠讀取嗎?因為 cat 不具有 SUID 的權限,所以 dmtsai 執行 『cat /etc/shadow』 時,是不能讀取 /etc/shadow 的。我們用一張示意圖來說明如下:
另外,SUID 僅可用在binary program 上, 不能夠用在 shell script 上面!這是因為 shell script 只是將很多的 binary 執行檔叫進來執行而已!所以 SUID 的權限部分,還是得要看 shell script 呼叫進來的程式的設定, 而不是 shell script 本身。當然,SUID 對於目錄也是無效的~這點要特別留意。