我如何“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”我需要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被执行…