Linux之特殊权限 SUID SGID SBIT

Set UID

當s這個標誌出現在文件所有者的x權限上時,如/usr/bin/passwd這個文件的權限狀態:“-rwsr-xr-x.”,此時就被稱為Set UID,簡稱為SUID 。那麼這個特殊權限的特殊性的作用是什麼呢?

1、SUID權限僅對二進製程序(binary program)有效;

2、執行者對於該程序需要具有x的可執行權限;

3、本權限僅在執行該程序的過程中有效(run-time);

4、執行者將具有該程序擁有者(owner)的權限。

SUID的目的就是:讓本來沒有相應權限的用戶運行這個程序時,可以訪問他沒有權限訪問的資源。 passwd就是一個很鮮明的例子,下面我們就來了解一下這相passwd執行的過程。

我們知道,系統中的用戶密碼是保存在/etc/shadow中的,而這個文件的權限是———-. (這個權限和以前版本的RHEL也有差別,以前的是-r——–)。其實有沒有r權限不重要,因為我們的root用戶是擁有最高的權限,什麼都能乾了。關鍵是要把密碼寫入到/etc/shadow中。我們知道,除了root用戶能修改密碼外,用戶自己同樣也能修改密碼,為什麼沒有寫入權限,還能修改密碼,就是因為這個SUID功能。

下面就是passwd這個命令的執行過程

1、因為/usr/bin/passwd的權限對任何的用戶都是可以執行的,所以系統中每個用戶都可以執行此命令。

2、而/usr/bin/passwd這個文件的權限是屬於root的。

3、當某個用戶執行/usr/bin/passwd命令的時候,就擁有了root的權限了。

4、於是某個用戶就可以藉助root用戶的權力,來修改了/etc/shadow文件了。

5、最後,把密碼修改成功。

注:這個SUID只能運行在二進制的程序上(系統中的一些命令),不能用在腳本上(script),因為腳本還是把很多的程序集合到一起來執行,而不是腳本自身在執行。同樣,這個SUID也不能放到目錄上,放上也是無效的。

Set GID

我們前面講過,當s這個標誌出現在文件所有者的x權限上時,則就被稱為Set UID。那麼把這個s放到文件的所屬用戶組x位置上的話,就是SGID。如開頭的/usr/bin/wall命令。

那麼SGID的功能是什麼呢?和SUID一樣,只是SGID是獲得該程序所屬用戶組的權限。

這相SGID有幾點需要我們注意:

1、SGID對二進製程序有用;

2、程序執行者對於該程序來說,需具備x的權限;

3、SGID主要用在目錄上;

理解了SUID,我想SGID也很容易理解。如果用戶在此目錄下具有w權限的話,若使用者在此目錄下建立新文件,則新文件的群組與此目錄的群組相同。

Sticky Bit

這個就是針對others來設置的了,和上面兩個一樣,只是功能不同而已。

SBIT(Sticky Bit)目前只針對目錄有效,對於目錄的作用是:當用戶在該目錄下建立文件或目錄時,僅有自己與root才有權力刪除。

最具有代表的就是/tmp目錄,任何人都可以在/tmp內增加、修改文件(因為權限全是rwx),但僅有該文件/目錄建立者與root能夠刪除自己的目錄或文件。

注:這個SBIT對文件不起作用。