我想了解sudo如何在Linux用戶空間和Linux內核中工作。從用戶的角度來看,我沒有那麼感興趣,但我更感興趣的是從實現/內核的角度來理解它。 (我曾經討論過把這個放在stackexchange和超級用戶上,但我認爲這裏是最好的,如果我做出了錯誤的選擇,請隨意移動它)瞭解setuid和sudo
所以當內核完成啓動後,啓動init進程當然具有0.的uid。然後可以啓動其他進程,如ssh守護進程。這個新進程繼承其父代的uid,例如現在sshd也啓動子進程,每個連接一個。然後完成用戶嘗試登錄的身份驗證,無論是通過passwd文件,shadow文件,pam等。一旦sshd通過使用哪種方法對用戶進行身份驗證,它會調用setuid/seteuid來更改進程UID。現在我的理解是程序只能從根到另一個用戶,而不是從用戶x到根或用戶x到用戶y(是否正確?)(用setuid調用?)
因此,在這方面,內核真正只知道分配給文件,進程等的uid。通過只允許根程序放入非根程序,對用戶帳戶的身份驗證進行控制,並保護其安全。
所以我的問題是,如果上述是正確的,sudo是如何工作的。我的終端當前正在運行我的非root用戶帳戶如何臨時切換到root權限?它是否與sudo進程交互?如果上述錯誤,即使有一點我想知道我錯在哪裏。
閱讀http://advancedlinuxprogramming.com/ – 2013-03-14 06:18:21