哪一种更安全? sudo dnf update 或 su - ; dnf更新

哪一种更安全? sudo dnf update 或 su - ; dnf更新

这样做更安全吗:

  1. $ sudo dnf update[输入用户密码]

或者

  1. $ 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会在子进程结束时放弃特权。在这种情况下dnfsu当子进程结束时,as会删除特权。在本例中是一个交互式 shell。因此,该sudo示例会更快地放弃特权。

sudo还具有此处未提及的其他优点。 (例如sudoers,该文件可用于对每个用户可以做什么和不能做什么提供更多控制)。

相关内容