sudo
内部如何运作?不像 ,它怎么可能在没有 root 密码的情况下成为 root 用户su
?该过程涉及哪些系统调用等?这难道不是 Linux 中一个巨大的安全漏洞(例如,为什么我不能编译一个打了很多补丁的补丁sudo
,它只是做了常规操作sudo
,但没有要求非特权用户的密码)?
我已阅读login 和 su internals。我还阅读了如何使用 sudo?但尽管标题,他们主要是处理之间的差异su
和sudo
。
在多用户系统上,什么防止任何用户通过 root 访问任何其他用户文件?作为上下文,这个问题基于我的理解如下:
有两个与 root 权限相关的命令,sudo
和su
. 使用sudo
,您不会成为另一个用户(包括 root)。sudo
具有代表您执行的已批准命令的预定义列表。由于您没有成为 root 用户或其他用户,您只需使用自己的密码进行身份验证即可。
使用su
,您实际上成为 root 用户或其他用户。如果您想成为用户Bob,您需要Bob 的密码。要成为 root,您需要 root 密码(在多用户系统上定义)。
参考:howtogeek.com:
su
将您切换到 root 用户帐户并需要 root 帐户的密码。sudo
以 root 权限运行单个命令——它不会切换到 root 用户。
和
如果执行 su bob 命令,会提示你输入 Bob 的密码,shell 会切换到 Bob 的用户账户;computerhope.com 上的类似描述
'sudo' 是一个 root 二进制 setuid,它代表授权用户执行 root 命令
如果您成为 root,您就可以访问所有内容。任何未被授权访问其他用户帐户的人都不会获得 root 密码,也不会拥有sudo
允许它的定义。
这一切都是有道理的,直到您查看类似此链接的内容,这是一个使用教程sudo -V
,然后sudo su -
仅使用您自己的密码成为 …
我看到很多帖子说你输入sudo su
以获得具有 root 权限的交互式提示,我看到同样多的帖子讨论了sudo -i
vs 的优缺点sudo su
。
在这里,我正在挠头思考为什么人们不只是写su
... 毕竟su
是替代用户的缩写,默认情况下切换到 root,所以真的有必要写sudo su
吗?