我想了解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