如何执行“sudo -i”特定命令

如何执行“sudo -i”特定命令

我需要使用 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...

相关内容