Sudo
Linux - 為什麼 su 和 sudo 二進製文件需要設置 UID root?
我正在嘗試找到所述問題的正確原因。我的理解是:
sudo
需要讀取/etc/sudoers
只能由root讀取的文件,這就是為什麼它需要設置-UID rootsu
將創建一個具有不同真實有效 UID 的新 shell,並且需要檢查密碼。要檢查密碼,它需要讀取/etc/shadow
,這就是為什麼它需要設置 UID root。檢查密碼後,它需要呼叫setuid()
分叉的程序,並且要使用任意 UID 參數,其父程序必須具有 root 作為有效 UID,所以這也是另一個原因。以上理由正確嗎?
您的理由大多是正確的,但在這兩種情況下(
su
和sudo
),他們需要以 root 身份執行的基本原因是他們需要能夠更改目前程序的各種使用者和組標識符。這涉及呼叫諸如 之類的函式setreuid
,如果呼叫程序以 root 身份執行,這些函式僅適用於任意使用者和組。兩者
su
都有sudo
其他功能也需要以 root 身份執行,但與上述相比,它們實際上是次要的細節。正如你提到的,sudo
需要閱讀/etc/sudoers
;但是後者只能由 root 讀取的事實並不是硬性要求。這兩個程序都可以使用 PAM 來執行身份驗證,但它們通常還包括需要能夠讀取的回退/etc/shadow
,這也只能由 root 讀取。名單還在繼續;但這並不重要,因為不可避免的事實是更改使用者和/或組的能力僅授予root,這就是為什麼su
並且sudo
是setuid root。sudo 的內部如何工作?相關問題提供了額外的背景。