Linux

setuid 位似乎對 bash 沒有影響

  • February 10, 2015

我做了一些試驗,發現了一些奇怪的東西:在位於的 bash 副本上設置 setuid 位/usr/bin/bash-test似乎沒有任何效果。當我執行 的一個實例時bash-test,我的主目錄沒有設置為/root,當我從 執行whoami命令時bash-test,我的使用者名沒有報告為root,這表明它bash-test沒有以 root 身份執行。但是,如果我將 setuid 位設置為 on whoami,我在任何 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;也沒有用。

引用自:https://unix.stackexchange.com/questions/74527