setuid 位似乎對 bash 沒有影響
我做了一些試驗,發現了一些奇怪的東西:在位於的 bash 副本上設置 setuid 位
/usr/bin/bash-test
似乎沒有任何效果。當我執行 的一個實例時bash-test
,我的主目錄沒有設置為/root
,當我從 執行whoami
命令時bash-test
,我的使用者名沒有報告為root
,這表明它bash-test
沒有以 root 身份執行。但是,如果我將 setuid 位設置為 onwhoami
,我在任何 shell 中都會被報告為 root,正如預期的那樣。我也嘗試設置 setuid 位
/usr/bin/bash
並觀察到相同的行為。當我在其上設置 setuid 位時,為什麼 bash 沒有以 root 身份執行?selinux 可能與此有關嗎?
解釋有點煩人:bash 本身就是原因。
strace
是我們的朋友(必須是 SUID 根才能正常工作):getuid() = 1000 getgid() = 1001 geteuid() = 0 getegid() = 1001 setuid(1000) = 0 setgid(1001) = 0
bash 檢測到它已經啟動了 SUID root (UID!=EUID) 並使用它的 root 權限來丟棄這個權限,將 EUID 重置為 UID。後來甚至 FSUID,只是為了確定……:
getuid() = 1000 setfsuid(1000) = 1000 getgid() = 1001 setfsgid(1001) = 1001
最後:沒有機會。您必須使用 UID root(即 sudo)啟動 bash。
編輯 1
手冊頁是這樣說的:
如果 shell 以不等於實際使用者(組)id 的有效使用者(組)id 啟動,並且未提供 -p 選項,則不讀取啟動文件,不從環境繼承 shell 函式,SHELLOPTS 、BASHOPTS、CDPATH 和 GLOBIGNORE 變數,如果它們出現在環境中,將被忽略,有效使用者 id 設置為真實使用者 id。如果在呼叫時提供了 -p 選項,則啟動行為是相同的,但不會重置有效使用者 ID。
但這對我不起作用。
-p
在啟動選項中甚至沒有提到。我也試過--posix
;也沒有用。