是否可以以 root 身份运行命令而无需密码并输入 sudo?

是否可以以 root 身份运行命令而无需密码并输入 sudo?

假设我有一个用户some_user和命令/usr/bin/command。我怎样才能通过输入 来以 root 身份执行此命令/usr/bin/command,但不能sudo /usr/bin/command

我尝试用 进行编辑sudoersvisudo但没有成功,没有提示输入密码,但我需要写入sudo

some_user ALL=(ALL:ALL) NOPASSWD: /usr/bin/command

上述命令和之间有什么区别吗www-data ALL=(ALL) NOPASSWD: /usr/bin/kill

谢谢。

答案1

您可以设置/usr/bin/commandsetuid root。但是,这将适用于所有用户,而不仅仅是特定用户。即,任何键入的用户都/usr/bin/command将以 root 身份运行命令,而无需指定密码 - 您无法将其限制为仅限特定用户。此外,当您设置/usr/bin/commandsetuid root 时,除非您删除 setuid 位,否则将无法以非 root 身份运行此命令。

顺便说一句。这正是它的sudo工作原理 -/usr/bin/sudo是 setuid root,因此当您键入 时它会自动变为 root sudo。如果不是 setuid root,它将无法切换到 root。

但是我建议您不要设置随机命令 setuid root。它sudo被设计为以这种方式使用,并且在实际让您运行命令之前会进行许多安全检查。根据定义,如果您在终端中输入命令名称,则您将以当前用户 ID 运行该命令(除非该命令本身提升权限,例如通过 setuid root,或sudo像 Tony 的解决方案中那样在内部使用)。sudo可以清楚地区分以非 root 身份运行的命令和以 root 身份运行的命令。因此您不应该省略它。

答案2

编写包装器脚本可能最容易。新脚本通过 sudo/usr/local/bin/command运行/usr/bin/command

/usr/local/bin/命令

#!/bin/bash

echo "[I] Invoked by '${USER}', running as root" >&2
sudo /usr/bin/command $(printf '%q ' "$@")

相关内容