Set UID
當s這個標誌出現在文件所有者的x權限上時,如/usr/bin/passwd這個文件的權限狀態:“-rwsr-xr-x.”,此時就被稱爲Set UID,簡稱爲SUID。那麼這個特殊權限的特殊性的作用是什麼呢?
- SUID權限僅對二進制程序(binary program)有效;
- 執行者對於該程序需要具有x的可執行權限;
- 本權限僅在執行該程序的過程中有效(run-time);
- 執行者將具有該程序擁有者(owner)的權限。
SUID的目的就是:讓本來沒有相應權限的用戶運行這個程序時,可以訪問他沒有權限訪問的資源。passwd就是一個很鮮明的例子,下面我們就來了解一下這相passwd執行的過程。
我們知道,系統中的用戶密碼是保存在/etc/shadow中的,而這個文件的權限是----------. (這個權限和以前版本的RHEL也有差別,以前的是-r--------)。其實有沒有r權限不重要,因爲我們的root用戶是擁有最高的權限,什麼都能 幹了。關鍵是要把密碼寫入到/etc/shadow中。我們知道,除了root用戶能修改密碼外,用戶自己同樣也能修改密碼,爲什麼沒有寫入權限,還能修 改密碼,就是因爲這個SUID功能。
下面就是passwd這個命令的執行過程 - 因爲/usr/bin/passwd的權限對任何的用戶都是可以執行的,所以系統中每個用戶都可以執行此命令。
- 而/usr/bin/passwd這個文件的權限是屬於root的。
- 當某個用戶執行/usr/bin/passwd命令的時候,就擁有了root的權限了。
- 於是某個用戶就可以藉助root用戶的權力,來修改了/etc/shadow文件了。
- 最後,把密碼修改成功。
注:這個SUID只能運行在二進制的程序上(系統中的一些命令),不能用在腳本上(script),因爲腳本還是把很多的程序集合到一起來執行,而不是腳本自身在執行。同樣,這個SUID也不能放到目錄上,放上也是無效的。
Set GID
我們前面講過,當s這個標誌出現在文件所有者的x權限上時,則就被稱爲Set UID。那麼把這個s放到文件的所屬用戶組x位置上的話,就是SGID。如開頭的/usr/bin/wall命令。
那麼SGID的功能是什麼呢?和SUID一樣,只是SGID是獲得該程序所屬用戶組的權限。
這相SGID有幾點需要我們注意: - SGID對二進制程序有用;
- 程序執行者對於該程序來說,需具備x的權限;
- SGID主要用在目錄上;
理解了SUID,我想SGID也很容易理解。如果用戶在此目錄下具有w權限的話,若使用者在此目錄下建立新文件,則新文件的羣組與此目錄的羣組相同。
Sticky Bit
這個就是針對others來設置的了,和上面兩個一樣,只是功能不同而已。
SBIT(Sticky Bit)目前只針對目錄有效,對於目錄的作用是:當用戶在該目錄下建立文件或目錄時,僅有自己與 root纔有權力刪除。
最具有代表的就是/tmp目錄,任何人都可以在/tmp內增加、修改文件(因爲權限全是rwx),但僅有該文件/目錄建立者與 root能夠刪除自己的目錄或文件。
注:這個SBIT對文件不起作用。
SUID/SGID/SBIT權限設置
和我們前面說的rwx差不多,也有兩種方式,一種是以字符,一種是以數字。
4 爲 SUID = u+s
2 爲 SGID = g+s
1 爲 SBIT = o+t