无法通过脚本重新启动计算机

无法通过脚本重新启动计算机

我需要通过本地网络网页(CGI 脚本)重启嵌入式系统。我已构建页面,它会调用站点上的脚本(即网页的 (apache) 主机)。此脚本原本应该调用重启命令,但失败了。

一次尝试是这样的:

 #!/bin/bash

 sudo reboot

当通过 telnet 进入命令行运行时,它可以工作,但当通过 CGI 调用时则不行。错误(来自/var/log/apache2/error.log)是:

sudo:没有 tty 存在并且没有指定 askpass 程序

好吧,还算公平。我尝试将NOPASSWD正确的用户添加到 sudoers 文件中,但没有成功。所以我尝试了这个在网上找到的方法。从命令行运行时也可以,但从服务器运行时不行。我想我不会得到同样的错误,因为它是通过 telnet 进行的,但事实并非如此。

 #!/usr/bin/expect

 set name [lindex $argv 0]
 spawn telnet $name
 expect "login:"
 send "<user>\r"
 expect "Password:"
 send "Reformed\r"

 send "sudo reboot\r"

错误是:

脚本的标头格式错误。错误标头=错误!!:WebInterfaceReboot

(如果我在脚本中对 IP 进行硬编码,就会出现错误Bad header=spawn telnet 192.168.0.79 #: WebInterfaceReboot send: spawn id exp6 not open while executing "send "<username>\r"" (file ./reboot2.sh" line 9)

我在服务器上启用了 cgi 日志记录,但‘详细’的 CGI 日志不再有帮助:

 %% [Wed Oct 09 09:24:25 2013] POST /cgi-bin/WebInterfaceReboot HTTP/1.1
 %% 500 /usr/lib/cgi-bin/WebInterfaceReboot
 %request
 Host: 192.168.0.79
 Connection: keep-alive
 Content-Length: 19
 Cache-Control: max-age=0
 Authorization: Basic aGhwOlJlZm9ybWVk
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
 Origin: http:// 192.168.0.79
 User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36
 Content-Type: application/x-www-form-urlencoded
 DNT: 1
 Referer: http:// 192.168.0.79/cgi-bin/WebInterfaceReboot
 Accept-Encoding: gzip,deflate,sdch
 Accept-Language: en-US,en;q=0.8

 RebootButton=Reboot
 %response
 ERROR!!

注意 'RebootButton' 是页面上按下的按钮的名称,用于调用 shell 脚本

我很确定这不是实际的 CGI 脚本,因为当我测试第一个实现时,该脚本显然正在运行。我应该对脚本或安装进行哪些更改,以使重启命令能够以这种方式运行?

答案1

Web 服务器以不同的用户身份运行,您要添加的用户就是该用户sudoers。要找出 apache 用户名,请运行此命令(我的系统输出,您的系统应该类似):

$ ps aux | grep apache2
root     13108  0.0  0.0   9756   868 pts/0    S+   17:51   0:00 tail -f /var/log/apache2/error.log
root     15140  0.0  0.2 170752  9116 ?        Ss   20:10   0:00 /usr/sbin/apache2 -k start
www-data 15143  0.0  0.1 170752  5868 ?        S    20:10   0:00 /usr/sbin/apache2 -k start
www-data 15144  0.0  0.1 170752  5540 ?        S    20:10   0:00 /usr/sbin/apache2 -k start

因此,对于 apache 用户www-data,您应该允许该用户无需密码即可运行重启(从安全角度来看这不是一个好主意,但是):

www-data ALL=NOPASSWD:/sbin/reboot

相关内容