我正在尝试通过apache运行cgi脚本来命令
service network restart
我只是将命令放在bash文件中,但是我得到了一个权限被拒绝的错误。
#!/bin/bash
service network restart
也许我需要一个perl解决方案?
答案 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作业),扫描文本文件以查找要执行的命令,然后运行它们。只需确保命令是安全的。