我需要像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”我需要input密码为Apache。
如果我把sudoers中的行改为:
apache ALL = (root) NOPASSWD:ALL
我可以不用密码运行“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.
请注意,我们被拒绝访问命令/bin/bash -c...
,这与我们在sudoers文件/blah/important_script...
指定的命令不同。 当你告诉sudo允许用户运行一个特定命令时,他们必须使用sudoers中指定的确切的命令行,所以我们需要适当地改变sudoers。
bob ALL=(root) NOPASSWD: /bin/bash -c /blah/important_script.sh
这现在适用于鲍勃
$ sudo -i /bin/bash -c /blah/important_script.sh
那么为什么这样做呢? 那么sudo的man page就有了答案
-i [命令] -i(模拟初始login)选项将目标用户的密码数据库条目指定的shell作为loginshell运行。 这意味着特定于login的资源文件(如.profile或.login)将被shell读取。 如果指定了一个命令,它会通过shell的-c选项传递给shell执行。 如果没有指定命令,交互式shell被执行…