Sudo

你能用這個想法實現一個等效的 sudo 嗎?

  • November 23, 2021

我們的 sudo 執行檔將由具有 setuid 位的 root 擁有。執行檔會做兩件事:

  1. 檢查使用者是否被允許
  2. execve argv[1](虛擬碼)

通常這將允許普通使用者以 root 身份執行程序。問題是如何檢查使用者是否被允許,因為由於 setuid 我們在啟動時是 root 使用者,因此不知道使用者是誰?

問題是如何檢查使用者是否被允許,因為由於 setuid 我們在啟動時是 root 使用者,因此不知道使用者是誰?

這就是 uid 和有效 uid 概念的用武之地。當您執行 setuid 程序時,getuid仍然返回“真實”使用者的 uid;setuid 位會導致有效的 uid 發生變化。有關詳細資訊,請參閱man getuid和相關文件。

您所建議的正是 sudo 的工作原理……至少,這是開始。

要讓事情真正發揮作用,還需要做更多的工作,sudo 做了一些相當複雜的事情來確保它是安全的並記錄事件。編寫一個幼稚的版本很容易,即使在不應該執行的情況下,並且使用者無權使用它時,也很容易被欺騙執行。

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