setuid 位似乎對 bash 沒有影響

setuid 位似乎對 bash 沒有影響

我做了一些實驗,發現了一些奇怪的事情:在位於 的 bash 副本上設定 setuid 位元/usr/bin/bash-test似乎沒有效果。當我運行 的實例時bash-test,我的主目錄未設定為,並且當我從/root運行命令時,我的用戶名未報告為,這表示它沒有以 root 身份運行。但是,如果我將 setuid 位元設為 on ,正如預期的那樣,我會被報告為任何 shell 中的 root。whoamibash-testrootbash-testwhoami

/usr/bin/bash我也嘗試設定 setuid 位元並觀察到相同的行為。

當我設定 setuid 位元時,為什麼 bash 不能以 root 身分執行? selinux 可能與此有關嗎?

答案1

這個解釋有點煩人:bash 本身就是原因。strace是我們的朋友(必須是 SUID root 才能正常工作):

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;也沒有用。

答案2

無論如何,SUID root 程序才不是以 root 的環境運行($HOME,shell 的配置,等等),它以 root 運行權力(即,它可以刪除任何文件,更改任何權限等)。

相關內容