linux – 了解setuid和sudo

linux – 了解setuid和sudo,第1张

概述我试图了解sudo如何在 Linux用户区和 Linux内核中运行.从用户的角度来看,我对它并不是那么感兴趣,但我更感兴趣的是从实现/内核的角度来理解它. (我已经讨论过将它放在stackexchange和超级用户之间,但我认为这将是最好的.如果我做出了错误的选择,请随意移动它…) 因此,当内核完成引导时,它会启动init进程,该进程当然具有0的uid.然后可以启动其他进程,例如ssh守护进程.这 我试图了解sudo如何在 Linux用户区和 Linux内核中运行.从用户的角度来看,我对它并不是那么感兴趣,但我更感兴趣的是从实现/内核的角度来理解它. (我已经讨论过将它放在stackexchange和超级用户之间,但我认为这将是最好的.如果我做出了错误的选择,请随意移动它…)

因此,当内核完成引导时,它会启动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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1027185.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存