Command-Line

set-user-ID 機制在 Unix 中是如何工作的?

  • December 11, 2012

有人可以解釋一下 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

參考連結 1

參考連結 2

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