天天看點

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

對于 SetUID、SetGID、Sticky BIT 這三個檔案特殊權限,分别介紹如下:

1. SetUID 權限

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

例如:

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

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

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

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

可以看到其所有者權限上有一個 s,這個 s 就表示 passwd 指令擁有 SetUID 權限。是以,一個普通使用者在執行 passwd 指令時會獲得它的所有者 root 的身份,而 root 是可以修改 /etc/shadow 檔案的,進而一個普通使用者可以可以修改自己的密碼。

再檢視 cat 指令,發現它沒有 SetUID 權限:

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

是以普通使用者不能檢視 /etc/shadow 檔案内容。

可以通過下圖來了解:

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

設定與取消 SetUID 的方法如下:

在所有者權限之前加上 4 代表SetUID,設定方法為:chmod 4755 檔案名,相應的取消 SetUID 方法為:chmod 755 檔案名。

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

例如:

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

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

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

2. SetGID 權限

可以對可執行的二進制程式檔案設定 SetGID 權限,也可以對目錄設定 SetGID 權限。

(1)  SetGID 針對檔案的作用

對于檔案隻有可執行的二進制程式才能設定 SetGID 權限,并且指令執行者要對該程式擁有 x(執行)權限。對于設定了 SetGID 權限的二進制程式來說,指令執行者在執行程式的時候,組身份更新為該程式檔案的所屬組。SetGID 權限同樣隻在該程式執行過程中有效,也就是說組身份改變隻在程式執行過程中有效。

例如:

對于 locate 指令,一個普通使用者可以通過它在檔案資料庫 /var/lib/mlocate/mlocate.db 中查找檔案。下面先看一下檔案資料庫的權限:

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

可以看到,從其權限來看普通使用者對其是沒有任何權限的,那為什麼卻可以通路該檔案呢?

下面再看一下 locate 指令的權限:

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

/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權限時,在目錄中建立的檔案的預設所屬組是這個目錄的所屬組。

例如:

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

設定與取消 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 權限:

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

設定與取消粘着位 Sticky BIT 權限如下:

設定粘着位 :chmod 1777 目錄名  或  chmod o+t 目錄名

取消粘着位 :chmod 777 目錄名  或  chmod o-t 目錄名

繼續閱讀