我有點困惑。如果我將 zsh 復制到 tmp 并更改 Set-UID 位chmod u s,則更改用戶,然后運行復制的 zsh。如果我運行,whoami我會得到 root。如果我對 bash 做同樣的事情,在我運行 bash 之后,我會得到我之前登錄的用戶。他們有什么不同的原因嗎?
uj5u.com熱心網友回復:
這是 bash 的一個有意的特性;要禁用它,請使用該-p選項運行 bash。
更詳細地說:當您運行 setuid 二進制檔案時,行程的有效 uid (euid) 設定為二進制檔案的有效 uid,但其真實 uid 不會更改。bash 檢測到差異,并且(如果-p未通過該選項)它將其 euid 重置為真實的 uid。
從bash 手冊:
使用不相等的有效和真實 UID/GID 呼叫
如果 Bash 以不等于實際用戶(組) id 的有效用戶(組) id 啟動,并且
-p未提供該選項,則不讀取啟動檔案,不從環境繼承 shell 函式SHELLOPTS,BASHOPTS,CDPATH, 和GLOBIGNORE變數,如果它們出現在環境中,將被忽略,并且有效的用戶 id 被設定為真實的用戶 id。如果-p在呼叫時提供了該選項,則啟動行為是相同的,但不會重置有效用戶 ID。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/442426.html
上一篇:匯出具有動態陣列名稱的陣列
