2. 檔案特殊權限(主要用來臨時提升指令執行者或其組身份)
2.1 SetUID
(1)SetUID的功能
①隻有可以執行的二進制程式才能設定SUID權限。用來臨時提升執行程式(或某條指令)的使用者身份。
②指令執行者要對該程式擁有x(執行)權限,即使用者必須擁有執行該程式的權限。
③指令執行者在執行該程式時獲得該程式檔案屬主的身份(在執行程式的過程中靈魂附體為檔案的屬主
④SetUID權限隻在該程式執行過程中有效,也就是說身份改變隻在程式執行過程中有效。
(2)以passwd指令為例分析SUID權限
①所有使用者密碼都是寫入/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權限,這樣普通使用者也就可以檢視該檔案了。(這裡隻是實驗,注意這是很危險的!)。
(6)危險的SetUID
①關鍵目錄應嚴格控制寫權限。比如“/”、“/usr”等。
②使用者密碼設定要嚴格遵守密碼三原則。
③對系統中預設應用具有SetUID權限的檔案作一清單,定時檢查有沒有這之外的檔案被設定了SetUID權限。
【實驗分析】給vim指令設定SUID權限(危險!)
①設定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權限
①使用locate查詢檔案時,其實是通路/vab/lib/mlocate/mlocate.db檔案,但該檔案對于普通使用者來說沒有任何權限。
②但locate指令本身具有rwx--s--x權限,即所屬組具有SGID權限。是以當普通使用者執行locate指令時,該使用者的組身份會被臨時地提升為locate指令所屬組(slocate)的權限,而slocate組對mlocate.db具有r權限,是以查詢成功。
③指令結束後,執行指令的使用者組身份傳回原來的組。
(2)設定目錄的SGID
①首先以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)應用舉例