是否可以在没有密码的情况下以 root 身份运行命令并输入 sudo?

And*_*unt 2 root sudo

假设我有一个 usersome_user和 command /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 吗?

谢谢你。

raj*_*raj 9

您可以使/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 身份运行的命令。因此你不应该省略它。

  • 你可以复制命令,然后`chown`复制到`root`和一个专门为此目的创建的组,`chmod`复制到`-rwsr-x---`,并让所有用户应该被允许使用该组的命令成员。例如,这就是 Ubuntu 允许普通用户运行 wireshark 的方式。但请注意,如果正在运行的命令不打算以这种方式工作,这可能会打开安全漏洞;例如,如果该命令允许您指定要读取或写入的文件名,它将能够读取/写入系统上的 **每个** 文件。 (5认同)

小智 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)

  • `"$@"` 已经正确地传递了参数。事实上,你是在逃避他们。如果你传递 `"he'llo"` 作为参数,命令将收到 `he\'llo` (2认同)