1. 程式人生 > >Linux學習總結:特殊許可權SUID,SGID,SBIT

Linux學習總結:特殊許可權SUID,SGID,SBIT

目錄

一、SUID

二、SGID

三、SBIT

Linux中除了rwx許可權外,另外還有三種特殊許可權:SUID、SGID、SBIT

假如本來在該位上有x, 則這些特別標誌 (SUID, SGID,SBIT)顯示為小寫字母 (s,s,t)。否則顯示為大寫字母 (S,S,T) 。在數字許可權上與rwx類似,對應三位數的二進位制,有許可權的位置上為1,無許可權的位置上為0。SUID,SGID,SBIT分別表示4,2,1。並且需要在最前面增加一位。看個例子就懂了,/usr/bin/passwd的許可權:

一、SUID

s出現在檔案所有者的x許可權上

1)SUID只能用於二進位制可執行檔案,對目錄無效

2)執行者若具有該檔案的x許可權,則將具有檔案所有者的許可權

3)許可權只在檔案執行時有效,執行完畢不再擁有所有者許可權

s許可權的具體含義是,當某個檔案的擁有者執行許可權位是s的話,其他使用者執行這個二進位制時,在執行期間,使用者獲得檔案擁有者的許可權。需要注意的是,執行程式的使用者本身要對這個程式有x許可權。如果一個屬於root:root的檔案的許可權是-rws------,那麼讓一般使用者來執行還是沒有許可權的。必須改成-rws-----x才可。

使用SUID的場景比較經典的有“有限制地對檔案進行讀寫”。比如有一個屬於root的檔案file,我希望其他使用者可以在一定限制下對其進行讀寫。顯然不能開放rw給他們。那麼我可以這麼做,將這個檔案設定成只有root可讀可寫,然後寫一個二進位制程式(程式所有者得是root),在程式中做出讀寫的控制,而後把這個程式的所屬者執行位設定為s。這樣其他使用者可以通過這個程式來對檔案讀寫,做到了“有限制的讀寫”。這種做法有點類似於面向物件程式設計中的私有變數。不允許直接改變變數,但是留出setVar方法作為介面來改變變數值。

 

linux中使用者改密碼的機制就是通過SUID來實現的

在之前使用者管理的學習中,建立使用者後使用passwd命令來為該使用者設定密碼。通過which命令檢視passwd命令的位置

Linux學習總結:特殊許可權SUID,SGID,SBIT

使用passwd命令實則是通過執行/usr/bin/passwd來改變的密碼,不過密碼資訊都放在/etc/shadow裡面,這個檔案只有root可讀可強制寫,即修改這個檔案不能直接修改

Linux學習總結:特殊許可權SUID,SGID,SBIT

普通使用者只能通過/usr/bin/passwd這個二進位制檔案來進行,所以/usr/bin/passwd是具有SUID許可權的一個檔案

Linux學習總結:特殊許可權SUID,SGID,SBIT

可以通過chmod 4xxx <檔名> 或用chmod u+s <檔名> 的方法來新增SUID許可權

 

二、SGID

s出現在檔案所屬群組的x許可權上

1)SGID和SUID不同,可以用於目錄
2)使用者若有此目錄的x,w許可權,則可進入和修改此目錄
3)使用者在此目錄下的群組將變成該目錄的群組,新建的檔案,群組是此目錄的群組。

SGID許可權和SUID是類似的,無非是把“執行中具有檔案所有者許可權”改成了“執行中具有檔案所有組的組員的許可權”。

對於目錄而言其效果是:首先使用者要有對這個目錄的讀和執行許可權,這樣才能保證他能夠進到目錄中,然後使用者在此目錄下的所有動作,其有效使用者組都是該目錄的使用者組;再次,如果使用者對該目錄有w許可權,那麼使用者建立的所有新檔案的使用者組都和這個目錄的使用者組相同。

首先我們使用root使用者在tmp目錄下建立一個目錄並且新增sgid特殊許可權

Linux學習總結:特殊許可權SUID,SGID,SBIT

可見,此目錄的建立者是root,所屬組是root

現在切換到普通使用者,並且進入該目錄建立一個檔案和一個目錄

Linux學習總結:特殊許可權SUID,SGID,SBIT

使用者組為root,也就是他們上層目錄dir_sgid這個目錄的所屬使用者組。

 

三、SBIT

t出現在檔案其他使用者的x許可權上

1)和SUID,SGID不同的是,只能用於目錄
2)使用者在該目錄下,僅自己與root才有權力刪除新建的目錄或檔案

前提條件還是一樣的,使用者需要對目錄有w和x許可權,也就是說使用者有在這個目錄下新建和刪除檔案的許可權,然後特別的地方在於,使用者在這個目錄下只能刪除自己建立的檔案和目錄,對於別人建立的是不能刪除的。

同樣我們在tmp目錄下建立一個目錄並且新增sbit特殊許可權

Linux學習總結:特殊許可權SUID,SGID,SBIT

然後切換到一個普通使用者,建立一個檔案file1。然後切換到另一個普通使用者

Linux學習總結:特殊許可權SUID,SGID,SBIT

刪除file1失敗!

其實根目錄下的/tmp目錄就設定了SBIT

Linux學習總結:特殊許可權SUID,SGID,SBIT

tmp目錄本來就是使用者存放不同使用者的臨時資訊的,肯定不希望自己的資訊被別的使用者刪除啊,所以要設定SBIT