从CGI Script重新启动服务

时间:2013-12-16 21:04:10

标签: linux perl apache bash redhat

我正在尝试通过apache运行cgi脚本来命令

service network restart

我只是将命令放在bash文件中,但是我得到了一个权限被拒绝的错误。

 #!/bin/bash
 service network restart

也许我需要一个perl解决方案?

4 个答案:

答案 0 :(得分:3)

您可以在sudoers中添加规则,让您的CGI脚本以root身份运行脚本(而不是其他任何内容)。使用sudoers修改sudo visudo以添加此行:

apache ALL = NOPASSWD: /path/to/script.sh

然后您的CGI脚本将能够sudo service network restart而无需输入密码。

答案 1 :(得分:1)

要重新启动系统服务,您需要管理员权限,我并不认为您应该授予Apache重启系统服务的权利。

只是为了回答你的问题,将Apache用户添加到sudoers并修改你的脚本以通过stdin将秘密传递给sudo命令

就足够了。
echo myPassword | sudo -S service network restart

替代方案可能是setuid root shell脚本。

但是,这对我来说似乎不是一个好主意。另请注意,重新启动网络堆栈意味着您的CGI脚本可能无法向客户端发送响应。

答案 2 :(得分:1)

我弄清楚怎么做的方法是让cgi脚本将其执行到shell

 ssh -i /var/www/.ssh/ssh-key   root@localhost 'service network restart'

您将需要在/ var / www /中创建具有适当权限的.ssh目录,然后首先从命令行使用ssh将localhost添加到known_hosts。显然,ssh密钥不应具有密码。

答案 3 :(得分:0)

另一种方法(不升级apache的权限或以root身份运行脚本)是编写脚本以简单地将要执行的命令写入文本文件。然后,设置以root身份运行的守护程序(或cron作业),扫描文本文件以查找要执行的命令,然后运行它们。只需确保命令是安全的。