1.SetUID的功能
-
實現SetUID功能的前提條件
(1) 只有可執行的二進制程序才能設定SUID
(2) 命令執行者要對該程序擁有x(執行)權限 -
SetUID的功能
(1) 命令執行者在執行改程序時獲得該程序文件屬主的身份(在執行程序的過程中靈魂附體爲文件的屬組)
(2) SetUID權限只在該程序中有效,也就是說身份改變只在程序執行過程中有效。
小提示: 命令的執行者一般是普通用戶
舉個栗子:
- passwd命令擁有SetUID權限,所以普通用戶可以修改自己的密碼
這個passwd爲什麼要有setUID權限那??? 普通用戶可以改自己的密碼的,真正的密碼其實寫入了/etc/shadow文件中。但是通過查看shadow文件的權限可知:
shadow文件的權限是000,普通用戶別說寫了,連看都看不到這個文件,但是普通用戶可以更改自己的密碼,實際上是寫入了/etc/shadow這個文件, 普通用戶明明對他沒有權限,怎麼可能寫入這個文件的那?因爲這個passwd這條命令作用的,當普通用戶執行passwd這條命令的時候,因爲passwd有SUID權限, 任何普通用戶在執行這條命令的時候,都暫時性地獲得這個文件的所有者權限,普通用戶在執行passwd命令的時候,系統沒有把他當作普通用戶來對待,而是當作超級用戶來對待,超級用戶對shadow文件擁有任何權限,雖然shadow文件的權限是000,到那時這個權限對超級用戶是沒有意義的超級用戶對這個文件依然有rwx權限。
小提示: 普通用戶對passwd作爲其他人的身份進行文件的操作,其他人必須要有執行權限x的,這樣才能調用passwd命令,作爲一個前提條件。
再舉個栗子:
cat命令沒有SetUID權限,所以普通用戶不能查看/etc/shadow文件內容
2.設定SetUID的方法
- 4代表SetUID
chmod 4755 文件名
chmod u+s 文件名
開始實驗:
備註:
-
上圖中系統用S的方式報警,告訴這種SUID是不能執行的。只有給可執行的二進制文件,或者說可執行的二進制程序賦予SUID纔可以用的。給空文件賦予SUID是不能運行的,是沒有任何意義的。
-
實驗中的abc文件只是空文件是不能運行的,只不過是練習用而已。
-
系統有一些默認的SetUID權限,如果沒有特殊情況,不允許用戶設定SetUID的其他程序,系統有了這些SetUID命令,像passwd命令,是迫不得已,因爲這樣已經非常危險了,如果還要手工設定一些SetUID的一些命令,萬一要是設錯了,就會帶來一些災難性的後果。
-
4755 4代表SetUID,跟所有者有關
2755 2代表SetGID,跟所屬組有關
1755 1代表SetBIT權限,跟其他人有關
7755 三種權限都有,沒有意義,因爲操作的對象是不一樣的
3.取消SetUID的方法
- 命令:
chmod 755 文件名
命令:chmod u-s 文件名
小提示: 這兩種方法都可以
4.危險的SetUID
- 關鍵目錄應嚴格控制寫權限。比如“/”、“/usr”等
- 用戶的密碼設置要嚴格遵守密碼三原則
- 對系統中默認應該具有SetUID權限的文件作一列表,定時檢查有沒有這之外的文件被設置了SetUID權限
小提示: 定期的掃描setUID權限 ,可以寫一個shell程序,讓他自己來執行。
開始實驗:
- 舉個栗子:
賦予vi具有SUID權限,超級用戶可以使用vi/vim只是可以使用的普通用戶默認使用的全都是vim,所以要跟vim來設置,這樣會帶來什麼危險那??? 任何一個普通用戶,在使用vim命令的時候,身份會變成root
普通用戶本來對shadow文件是沒有權限的,修改不了這個文件的內容,到那剛纔給vim設置了SetUID權限,所以當我是vim命令時候,普通用戶的身份就可以變成root了。
這是可以修改這個文件的內容了,可以把普通用戶改成超級用戶 (手工把st的UID寫成0) 強制保存退出, 雖然這個st用戶對他沒有權限,但是給vim賦予了setUID權限,所以普通用戶在執行的過程變成了root用戶,所以非常可怕的,只要給vim賦予了setUID權限,普通用戶就可以利用vim這個命令,修改所有的系統文件,比如密碼文件,系統的啓動文件,系統的自動掛載文件。隨隨便便把系統搞崩潰是非常容易的,使系統的安全性大大降低!!!
5. 總結
1. setUID作用普通用戶在執行擁有SetUID程序的時候,暫時的會獲得這個程序的所有者的身份
2. 設定SetUID權限、取消SetUID權限的方法
3. Setuid是一個不安全的命令,除了系統擁有這些默認的SetUID權限,儘量不用給程序或者命令賦予SetUID權限,還要定期掃描,保證系統當中,除了默認SetUID之外,不會產生過多的SetUID權限。