我需要使用 sudo -i 运行 important_script.sh,无需密码。
如果我在 sudoers 中有:
apache ALL = (root) NOPASSWD: /blah/important_script.sh
并运行“sudo /blah/important_script.sh”我可以不用密码运行它。
但是如果我运行“sudo -i /blah/important_script.sh”,我需要输入 apache 密码。
如果我将 sudoers 中的行更改为:
apache ALL = (root) NOPASSWD:ALL
我可以无需密码运行命令“sudo -i /blah/important_script.sh”。
但我希望只运行 /blah/important_script.sh,而不是所有命令。
那么,我如何设置只有 /blah/important_script.sh 可以使用 sudo -i 运行而无需密码。
答案1
当我尝试这个时,我收到一条错误消息,它给出了问题的线索
Sorry, user bob is not allowed to execute '/bin/bash -c /blah/important_script.sh' as root on host.
请注意,我们被拒绝访问/bin/bash -c...
与 sudoers 文件中指定的命令不同的命令/blah/important_script...
。当您告诉 sudo 允许用户运行特定命令时,他们必须使用 sudoers 中指定的确切命令行,因此我们需要适当地更改 sudoers。
bob ALL=(root) NOPASSWD: /bin/bash -c /blah/important_script.sh
这对 bob 来说现在有效
$ sudo -i /bin/bash -c /blah/important_script.sh
那么为什么会这样呢? sudo 的 man 页面有答案
‑i [命令] ‑i(模拟初始登录)选项将目标用户的密码数据库条目指定的 shell 作为登录 shell 运行。这意味着 shell 将读取登录特定的资源文件(例如 .profile 或 .login)。如果指定了命令,则会通过 shell 的 ‑c 选项将该命令传递给 shell 执行。如果没有指定命令,则执行交互式 shell...