因此,当内核完成引导时,它会启动init进程,该进程当然具有0的uID.然后可以启动其他进程,例如ssh守护进程.这个新进程继承了其父进程的uID,例如0. sshd现在也启动子进程,每个连接一个.然后完成对尝试登录的用户的身份验证,无论是通过passwd文件,影子文件,pam等.一旦sshd通过它使用的任何方法对用户进行了身份验证,它就会调用setuID / seteuID来更改进程UID.现在我的理解是一个程序只能从root到另一个用户而不是从用户x到root或者用户x到用户y(这是正确的吗?)(使用setuID调用?)
因此,在这方面,内核实际上只知道分配给文件,进程等的uID.用户帐户中的身份验证在用户空间中受到控制,并且通过仅允许根程序进入非根程序来保护.
所以我的问题是,如果以上是正确的,那么sudo是如何工作的.当前运行我的非root帐户的终端如何临时切换到root权限?它是否与sudo进程交互?如果以上是错误的,即使是一点点,我也想知道我错在哪里.
解决方法 如果您查看sudo二进制文件,您将看到它在可执行文件上设置了setuID权限位.这向内核指示应该始终使用可执行文件的所有者的uID执行,如果是sudo,则为root.一旦sudo以root身份运行,它就可以在fork / exec之前进行必要的身份验证和setuID-syscall.---s--x--x. 2 root root 219272 Jul 17 2012 /usr/bin/sudo
如果您注意到’s’和所有者,您将看到我的意思.
总结以上是内存溢出为你收集整理的linux – 了解setuid和sudo全部内容,希望文章能够帮你解决linux – 了解setuid和sudo所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)