这样做更安全吗:
$ sudo dnf update
[输入用户密码]
或者
$ su - [enter root password] # dnf update
我总是假设它们是完全相同的东西,因为 sudo 使用 setuid-root,因此作为 sudo 的第一个参数运行的进程是使用 sudo 的有效 ID(即 root)运行的。
我想我的问题是:sudo 最终会将其有效 ID 放弃给普通用户吗?那么在这种情况下,上面的数字 1 将是一个更安全的选择,因为如果 sudo 运行的程序被攻击者破坏,那么攻击者有可能不是以 root 身份运行,因为权限已经被删除了?
答案1
第一个命令(可能)需要您的正确密码,dnf update
以 root 身份运行,然后退出:
$ sudo dnf update [enter user password]
第二个命令将需要 root 的密码,然后启动 root shell。在该 shell 中运行dnf update
:
$ su - [enter root password] # dnf update
你并没有真正进行同类比较。您可以比较这两个命令,它们都会启动一个 root shell,您在其中运行(至少)该命令dnf update
sudo -s
dnf update
su -
dnf update
或者您可以比较这两个命令,这两个命令都启动 root 特权实例dnf update
,然后退出回调用者的 shell
sudo dnf update
su root -c 'dnf update'
我认为您实际上要问的是,是否最好使用 root 权限调用单个命令,或者启动一个 root 权限 shell 来运行一个或多个命令。
- 如果
dnf
功能或其下载以某种方式受到损害,那么它如何运行并不重要,问题在于它根本运行 - 如果您谈论的是危害您的系统,那么这取决于用户密码 (
sudo
) 与 root 密码 (su
)的安全性 - 如果您正在考虑是否可以信任该用户,那么您是否获得一个运行多个命令的 root shell 或一个一次运行一个命令的 root shell 并不重要。问题是命令可以以 root 身份运行
就我个人而言,我根据需要混合搭配我的用法。我很少使用su
,但我确实会sudo {command....}
在快速一次性或sudo -s
需要运行多个命令的短暂会话中使用(例如 Debian 包管理工具,apt-get update
后跟apt-get upgrade
)。
答案2
Yessudo
会在子进程结束时放弃特权。在这种情况下dnf
。su
当子进程结束时,as会删除特权。在本例中是一个交互式 shell。因此,该sudo
示例会更快地放弃特权。
sudo
还具有此处未提及的其他优点。 (例如sudoers
,该文件可用于对每个用户可以做什么和不能做什么提供更多控制)。