假设我有一个 usersome_user和 command /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 吗?
谢谢你。
您可以使/usr/bin/commandsetuid 根。但是,这适用于所有用户,而不仅仅是特定用户。IE。任何键入的用户都/usr/bin/command将以 root 身份运行命令,而无需指定密码 - 您不能仅将其限制为特定用户。此外,当您设置/usr/bin/commandsetuid root 时,将不可能以非 root 身份运行此命令,直到您删除 setuid 位。
顺便提一句。这正是sudo工作原理 -/usr/bin/sudo是 setuid root,所以当你输入sudo. 如果它不是 setuid root,它将无法切换到 root。
但我建议你不要设置随机命令 setuid root。sudo旨在使用这种方式,并且在实际让您运行命令之前进行了许多安全检查。根据定义,如果您在终端中键入命令名称,则您正在以当前用户 ID 运行该命令(除非该命令自行提升权限,例如通过成为 setuid root,或sudo在 Tony 的解决方案中在内部使用)。sudo是否有明确区分以非 root 身份运行的命令和以 root 身份运行的命令。因此你不应该省略它。
小智 5
编写包装脚本可能最容易。通过 sudo/usr/local/bin/command运行的新脚本/usr/bin/command
/usr/local/bin/command
#!/bin/bash
echo "[I] Invoked by '${USER}', running as root" >&2
sudo /usr/bin/command $(printf '%q ' "$@")
Run Code Online (Sandbox Code Playgroud)