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

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

sudo使用和 使用有什么区别吗su -c?在某些情况下应该使用其中一种而不是另一种?

我之前使用的 Ubuntusudo似乎无处不在,但现在我尝试使用 Fedora 15,su -c当我尝试学习如何做一些事情时,这个习惯用法经常出现,尽管我仍然偶尔看到它sudo被使用。

答案1

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

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

一旦授权,效果是相同的:以 root 身份运行命令(或者,如果在命令行上指定,则以其他用户身份运行命令)。

还有进一步的细微差别:它们不采用相同的选项,并且它们不以完全相同的方式为运行的命令设置环境。 “命令”的含义略有不同:forsu -c是由目标用户的 shell 执行的字符串,而 forsudo没有选项,它是带参数运行的程序。但对于常见用法来说,它们是相同的。

答案2

它们在语义上是不同的。

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

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

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

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

相关内容