“sudo”和“su -c”有什么区别

Vit*_* Py 11 su sudo

usingsudo和 using之间有什么区别su -c吗?在某些情况下应该使用一种而不是另一种?

我以前使用 Ubuntu,那里sudo似乎无处不在,但现在我尝试使用 Fedora 15,su -c当我尝试学习如何做一些事情时,这个习语经常出现,尽管我仍然时不时地看到有人sudo在使用它。

Gil*_*il' 14

sudo和之间的区别在于su它们如何执行身份验证:

  • su 提示输入目标用户的密码。
  • sudo检查源用户是否有权运行命令(授权在 中指定/etc/sudoers)。根据配置,它可能会提示输入源用户的密码,以降低无人值守控制台的风险并提醒用户权限提升正在进行中。

获得授权后,效果相同:以 root 身份运行命令(或者,如果在命令行中指定,则以其他用户身份运行)。

还有更小的区别:它们不采用相同的选项,并且它们不以完全相同的方式为它们运行的​​命令设置环境。但对于常见用法,它们是相同的。


Zim*_*Zim 5

它们在语义上是不同的。

使用su意味着您不希望被调用的进程知道您不是真正的目标用户。手册页建议始终选择 option su --login

使用的sudo意思正好相反。sudo甚至设置一个新的环境变量SUDO_UID来告诉进程你到底是谁。

顺便说一句,su适用于古老的 unix 显示管理器或 shell 配置文件,它在调用交互式 shell 之前仅设置少量环境变量HOME、等)。PATHsu重置这些变量。

然而,现代初始化系统设置了更多的环境变量。例如Linux PAM 设置XDG_RUNTIME_DIR,它不会被重置su。因此,su --login无法模拟真实的登录。请参阅https://github.com/systemd/systemd/issues/7451#issuecomment-346787237