假设我有一个用户some_user
和命令/usr/bin/command
。我怎样才能通过输入 来以 root 身份执行此命令/usr/bin/command
,但不能sudo /usr/bin/command
?
我尝试用 进行编辑sudoers
,visudo
但没有成功,没有提示输入密码,但我需要写入sudo
:
some_user ALL=(ALL:ALL) NOPASSWD: /usr/bin/command
上述命令和之间有什么区别吗www-data ALL=(ALL) NOPASSWD: /usr/bin/kill
?
谢谢。
答案1
您可以设置/usr/bin/command
setuid root。但是,这将适用于所有用户,而不仅仅是特定用户。即,任何键入的用户都/usr/bin/command
将以 root 身份运行命令,而无需指定密码 - 您无法将其限制为仅限特定用户。此外,当您设置/usr/bin/command
setuid 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 ' "$@")