1. 程式人生 > >Linux檔案特殊許可權——SetUID、SetGID、Sticky BIT

Linux檔案特殊許可權——SetUID、SetGID、Sticky BIT

對於 SetUID、SetGID、Sticky BIT 這三個檔案特殊許可權,分別介紹如下:

1. SetUID 許可權

只有可以執行的二進位制程式才能設定SetUID許可權,並且命令執行者要對該程式擁有x(執行)許可權。對於設定了 SetUID 許可權的命令來說,其功能是命令執行者在執行該程式檔案時獲得該程式檔案所有者的身份。SetUID 許可權只在該程式執行過程中有效,也就是說身份改變只在程式執行過程中有效。

例如:

使用者真正的加密密碼存在於 /etc/shadow 檔案中,通過 passwd 命令修改密碼即是修改 /etc/shadow 檔案,通過 ll 命令可以看出該檔案的許可權為 000:


所以按道理說,一個普通使用者是不能修改自己的密碼的,但事實上是可以做到的。我們再通過 ll 命令檢視 passwd 命令:



可以看到其所有者許可權上有一個 s,這個 s 就表示 passwd 命令擁有 SetUID 許可權。因此,一個普通使用者在執行 passwd 命令時會獲得它的所有者 root 的身份,而 root 是可以修改 /etc/shadow 檔案的,從而一個普通使用者可以可以修改自己的密碼。
再檢視 cat 命令,發現它沒有 SetUID 許可權:


所以普通使用者不能檢視 /etc/shadow 檔案內容。
可以通過下圖來理解:


設定與取消 SetUID 的方法如下:
在所有者許可權之前加上 4 代表SetUID,設定方法為:chmod 4755 檔名,相應的取消 SetUID 方法為:chmod 755 檔名


還有設定方法為: chmod u+s 檔名,相應的取消 SetUID 方法為:chmod u-s 檔名

例如:


SetUID 許可權是存在一定的危險的,使用 SetUID 要注意以下三點:

  • 關鍵目錄應嚴格控制寫許可權,比如 /、/usr、/etc 等 ;
  • 使用者的密碼設定要嚴格遵守密碼三原則;
  • 對系統中預設應該具有 SetUID 許可權的檔案作一列表,定時檢查有沒有這些之外的檔案被設定了 SetUID 許可權。

2. SetGID 許可權

可以對可執行的二進位制程式檔案設定 SetGID 許可權,也可以對目錄設定 SetGID 許可權。
(1)  SetGID 針對檔案的作用
對於檔案只有可執行的二進位制程式才能設定 SetGID 許可權,並且命令執行者要對該程式擁有 x(執行)許可權。對於設定了 SetGID 許可權的二進位制程式來說,

命令執行者在執行程式的時候,組身份升級為該程式檔案的所屬組。SetGID 許可權同樣只在該程式執行過程中有效,也就是說組身份改變只在程式執行過程中有效。
例如:
對於 locate 命令,一個普通使用者可以通過它在檔案資料庫 /var/lib/mlocate/mlocate.db 中查詢檔案。下面先看一下檔案資料庫的許可權:


可以看到,從其許可權來看普通使用者對其是沒有任何許可權的,那為什麼卻可以訪問該檔案呢?
下面再看一下 locate 命令的許可權:


/usr/bin/locate是可執行二進位制程式,可以賦予SetGID,看到它的所屬組許可權上有一個 s,這個 s 就表示 locate 命令擁有SetGID 許可權。普通使用者對 /usr/bin/locate 命令擁有執行許可權因此,一個普通使用者在執行 locate 命令時組身份會升級為 locate 命令的所屬組 slocate,而 slocate 對檔案資料庫 /var/lib/mlocate/mlocate.db 擁有 r(讀)許可權,所以locate 命令可以訪問檔案資料庫,從而普通使用者可以通過 locate 命令查詢檔案。當然,命令結束後普通使用者的組身份返回為它原來的所屬組。

(2) SetGID 針對目錄的作用

普通使用者必須對一個目錄擁有r和x許可權,才能進入此目錄。對於設定了 SetGID 許可權的目錄來說,普通使用者在此目錄中的有效組會變成此目錄的所屬組,若普通使用者對此目錄擁有w許可權時,在目錄中新建的檔案的預設所屬組是這個目錄的所屬組。
例如:


設定與取消 SetGID 的方法如下:
在所有者許可權之前加上 2 代表SetGID,設定方法為:chmod 2755 檔名,相應的取消 SetGID 方法為:chmod 755 檔名。 
還有設定方法為: chmod g+s 檔名,相應的取消 SetGID 方法為:chmod g-s 檔名

(3) Sticky BIT 許可權

Sticky BIT 表示的是粘著位,主要是用來避免其他使用者對檔案的誤操作。
粘著位目前只對目錄有效,普通使用者要對該目錄擁有w和x許可權,即普通使用者可以在此目錄擁有寫入許可權。如果沒有粘著位,因為普通使用者擁有w許可權,所以可以刪除此目錄下所有檔案,包括其他使用者建立的檔案。一但賦予了粘著位,除了root可以刪除所有檔案,普通使用者就算擁有w許可權也只能刪除自己建立的檔案,但是不能刪除其他使用者建立的檔案。
例如:
最常見的系統中擁有粘著位的目錄是 /tmp,通過檢視許可權可以看到 /tmp 的其他人許可權有一個 t,表示擁有粘著位,即擁有 Sticky BIT 許可權:


設定與取消粘著位 Sticky BIT 許可權如下:
設定粘著位 :chmod 1777 目錄名  或  chmod o+t 目錄名
取消粘著位 :chmod 777 目錄名  或  chmod o-t 目錄名