Command-Line
set-user-ID 機制在 Unix 中是如何工作的?
有人可以解釋一下 Unix 中的 set-user-ID 機制嗎?這個設計決定背後的理由是什麼?它與有效的使用者 id 機制有何不同?
您可能知道 unix 中文件的正常讀、寫和執行權限。
然而,在許多應用程序中,這種類型的權限結構——例如,授予給定使用者讀取給定文件的完全權限,或者根本沒有讀取文件的權限——過於粗糙。出於這個原因,Unix 包含另一個權限位,
set-user-ID
即位。如果為執行檔設置此位,則每當所有者以外的使用者執行文件時,該使用者在訪問所有者的任何其他文件時獲得所有者的所有文件讀/寫/執行權限!要設置文件的 set-user-ID 位,請鍵入
chmod u+s filename
確保您也設置了 group-other 執行權限;擁有其他組的讀取權限也會很好。所有這些都可以通過單個語句完成
chmod 4755 filename
它也稱為保存的 UID。啟動的文件具有 Set-UID 位,保存的 UID 將是文件所有者的 UID。否則,保存的 UID 將是真實的 UID。
什麼是有效的 uid ?
此 UID 用於評估程序執行特定操作的權限。EUID 可以更改為 Real UID,如果 EUID!=0,則可以更改為超級使用者 UID。如果 EUID=0,則可以更改為任何值。
例子
此類程序的一個範例是
passwd
. 如果您完整列出它,您會看到它具有 Set-UID 位並且所有者是“root”。當一個普通使用者,比如“mtk”,執行passwd
時,它開始於:Real-UID = mtk Effective-UID = mtk Saved-UID = root