天天看點

第7章 權限管理(2)_檔案特殊權限(SUID、SGID、SBIT)

2. 檔案特殊權限(主要用來臨時提升指令執行者或其組身份)

2.1 SetUID

(1)SetUID的功能

  ①隻有可以執行的二進制程式才能設定SUID權限。用來臨時提升執行程式(或某條指令)的使用者身份。

  ②指令執行者要對該程式擁有x(執行)權限,即使用者必須擁有執行該程式的權限。

  ③指令執行者在執行該程式時獲得該程式檔案屬主的身份(在執行程式的過程中靈魂附體為檔案的屬主

  ④SetUID權限隻在該程式執行過程中有效,也就是說身份改變隻在程式執行過程中有效。

(2)以passwd指令為例分析SUID權限

第7章 權限管理(2)_檔案特殊權限(SUID、SGID、SBIT)

  ①所有使用者密碼都是寫入/etc/shadow檔案中,但這個檔案的權限是000(表示除root使用者外的所有使用者對該檔案都沒有任何權限。注意,連檢視的權限也沒有!)

  ②但當普通使用者執行passwd修改自己的密碼時,最終這個密碼又會被寫入/etc/shadow檔案!這就有點奇怪了。普通使用者不是對檔案沒有任何權限嗎?現在竟然可以将密碼寫入shadow檔案!

  ③原來,passwd這個程式(指令)具有SUID權限(見圖中的“rwsr-xr-x”,其中的s表示SUID權限),是以當普通使用者執行了passwd指令後,其權限會被暫時地提升為該指令所有者(root)的權限。是以就可以讀取shadow檔案了。指令執行完後,又恢複為原來權限。

(3)設定SetUID的方法

  ①chmod 4755 檔案名 (其中的4表示SetUID、2表示setGID、1表示Sticky BIT(其它人),755表示所有者、所屬組和其它人的權限)

  ②chmod u+s 檔案名

(4)取消SetUID的方法

  ①chmod 755 檔案名(重新設回原來的755)

  ②chmod u-s 檔案名(直接取消SUID)

(5)應用舉例

  ①cat指令并不具有SUID權限(rwxr-xr-x),所有普通使用者不能檢視/etc/shadow檔案。但可以通過給cat設定SUID權限,這樣普通使用者也就可以檢視該檔案了。(這裡隻是實驗,注意這是很危險的!)。

第7章 權限管理(2)_檔案特殊權限(SUID、SGID、SBIT)

(6)危險的SetUID

  ①關鍵目錄應嚴格控制寫權限。比如“/”、“/usr”等。

  ②使用者密碼設定要嚴格遵守密碼三原則。

  ③對系統中預設應用具有SetUID權限的檔案作一清單,定時檢查有沒有這之外的檔案被設定了SetUID權限。

【實驗分析】給vim指令設定SUID權限(危險!)

第7章 權限管理(2)_檔案特殊權限(SUID、SGID、SBIT)

  ①設定vim的SUID權限。(注意,vim所有者為root)

  ②切換到普通使用者testUser,同時可以看出該使用者對shadow檔案沒有任何權限,對password也隻有隻讀權限。

  ③但此時,當用testUser打開vim時,由于vim開啟了SUID權限,是以testUser的身份被臨時提升為vim所有者的身份,即具有root權限。是以就可以編輯passwd檔案,這是很危險的。因為testUser使用者可以修改passwd中自己UID為0,這樣就搖身一變成為超級使用者了。

  ④這裡隻是實驗,可以将testUsedr的UID改回原來的值,并chmod u-s /usr/bin/vim

2.2 SetGID

2.2.1 SetGID的作用

(1)SetGID針對目錄的作用

  ①普通使用者必須對此目錄擁有r和x權限,才能進入此目錄

  ②普通使用者在此目錄中的有效組會變成此目錄的所屬組

  ③若普通使用者對此目錄擁有w權限時,建立的檔案的預設屬組是這個目錄的屬組。

(2) SetGID針對檔案的作用

  ①隻有可執行的二進制程式才能設定SGID權限

  ②指令執行者要對程式擁有x(執行)權限

  ③指令執行在執行程式的時候,組身份更新為該程式檔案的屬組

  ④SetGID權限同樣隻在該程式執行過程中有效,也就是說組身份改變隻在程式執行過程中有效。

2.2.2 設定和取消SGID

(1)設定SGID:

  ①#chmod 2755 檔案名(其中的2表示設定SGID)

  ②#chmod g+s 檔案名

(2)取消SGID

  ①#chmod 755 檔案名(設定為原來的權限,注意755之前沒有個2了)

  ②#chmod g-s 檔案名

2.2.3 應用舉例

(1)以locate指令為例分析SGID權限

第7章 權限管理(2)_檔案特殊權限(SUID、SGID、SBIT)

  ①使用locate查詢檔案時,其實是通路/vab/lib/mlocate/mlocate.db檔案,但該檔案對于普通使用者來說沒有任何權限。

  ②但locate指令本身具有rwx--s--x權限,即所屬組具有SGID權限。是以當普通使用者執行locate指令時,該使用者的組身份會被臨時地提升為locate指令所屬組(slocate)的權限,而slocate組對mlocate.db具有r權限,是以查詢成功。

  ③指令結束後,執行指令的使用者組身份傳回原來的組。

(2)設定目錄的SGID

第7章 權限管理(2)_檔案特殊權限(SUID、SGID、SBIT)

  ①首先以root身份建立/tmp/test目錄,并賦予這個目錄SGID權限。

  ②切換到普通使用者testUser,然後在家目錄下随便建立一個abc檔案,可以看出該檔案的所屬組為testUser。

  ③同樣以testUser身份在/tmp/test目錄下建立一個abc檔案,會發現該檔案的所屬組為root,而不是testUser。這就是因為test這個目錄具有了SGID權限,所有在該目錄下建立的檔案,其所屬組都會變成test目錄的所屬組,而不是建立者所屬組的身份。

2.3 Sticky BIT

(1)SBIT粘着位作用

  ①粘着位目前隻對目錄有效

  ②普通使用者對該目錄擁用w和x權限,即普通使用者可在此目錄擁有寫入權限

  ③如果沒有粘着位,因為普通使用者擁有w權限,是以可以删除此目錄下的所有檔案,包括其他使用者建立的檔案。一旦賦予了粘着位,除了root可以删除所有檔案,普通使用者就算擁有w權限,也隻能删除自己建立的檔案,但是不能删除其他使用者建立的檔案。

(2)設定和取消SBIT

  ①設定粘着位:chmod 1755 目錄名,或者chmod o+t 目錄名

  ②取消粘着位:chmod 755  目錄名,或者chmod o-t 目錄名

(3)應用舉例

第7章 權限管理(2)_檔案特殊權限(SUID、SGID、SBIT)