我需要像 sudo -i 一样在没有密码的情况下运行 important_script.sh。
如果我有 sudoers:
apache ALL = (root) NOPASSWD: /blah/important_script.sh
Run Code Online (Sandbox Code Playgroud)
并运行“sudo /blah/important_script.sh”我可以在没有密码的情况下运行它。
但是,如果我运行“sudo -i /blah/important_script.sh”,我需要输入 apache 的密码。
如果我将 sudoers 中的行更改为:
apache ALL = (root) NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)
我可以在没有密码的情况下运行命令“sudo -i /blah/important_script.sh”。
但我希望只能运行 /blah/important_script.sh,而不是所有命令。
那么,我如何设置只有 /blah/important_script.sh 可以在没有密码的情况下使用 sudo -i 运行。
当我尝试这个时,我收到一条错误消息,它提供了问题的线索
Sorry, user bob is not allowed to execute '/bin/bash -c /blah/important_script.sh' as root on host.
Run Code Online (Sandbox Code Playgroud)
请注意,我们被拒绝访问与/bin/bash -c...
我们在 sudoers 文件中指定的命令不同的命令/blah/important_script...
。当您告诉 sudo 允许用户运行特定命令时,他们必须使用 sudoers 中指定的确切命令行,因此我们需要适当地更改 sudoers。
bob ALL=(root) NOPASSWD: /bin/bash -c /blah/important_script.sh
Run Code Online (Sandbox Code Playgroud)
这现在适用于鲍勃
$ sudo -i /bin/bash -c /blah/important_script.sh
Run Code Online (Sandbox Code Playgroud)
那么它为什么要这样做呢?那么 sudo 的手册页有答案
?i [命令] ?i(模拟初始登录)选项运行由目标用户的密码数据库条目指定的 shell 作为登录 shell。这意味着 shell 将读取特定于登录名的资源文件,例如 .profile 或 .login。如果指定了命令,它将通过 shell 的 ?c 选项传递给 shell 以执行。如果未指定命令,则执行交互式 shell...
归档时间: |
|
查看次数: |
4552 次 |
最近记录: |