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

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

sgid 進行 註意 權力 添加 linux中 動作 限制 字母

目錄

一、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命令的位置

技術分享圖片

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

技術分享圖片

普通用戶只能通過/usr/bin/passwd這個二進制文件來進行,所以/usr/bin/passwd是具有SUID權限的一個文件

技術分享圖片

可以通過chmod 4xxx <文件名> 或用chmod u+s <文件名> 的方法來添加SUID權限

?

二、SGID

s出現在文件所屬群組的x權限上

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

SGID權限和SUID是類似的,無非是把“執行中具有文件所有者權限”改成了“執行中具有文件所有組的組員的權限”。

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

首先我們使用root用戶在tmp目錄下創建一個目錄並且添加sgid特殊權限

技術分享圖片

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

現在切換到普通用戶,並且進入該目錄創建一個文件和一個目錄

技術分享圖片

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

?

三、SBIT

t出現在文件其他用戶的x權限上

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

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

同樣我們在tmp目錄下創建一個目錄並且添加sbit特殊權限

技術分享圖片

然後切換到一個普通用戶,創建一個文件file1。然後切換到另一個普通用戶

技術分享圖片

刪除file1失敗!

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

技術分享圖片

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

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