2010-10-29 101 views

回答

3

你有你的Apache用户添加到与NOPASSWD sudoers文件,并只给访问即重新启动,然后运行系统(“命令重启”);

对于sudoersfile:

www-data reboot = NOPASSWD: /sbin/reboot 

这将使Apache访问重新启动服务器,但reme​​mer该系统上的所有用户,然后就可以重新启动。

0

试试这个:

<?php 
shell_exec("/usr/sbin/reboot"); 
exec("/usr/sbin/reboot"); 
system("/usr/sbin/reboot"); 
?> 

详情请看:

http://www.linuxquestions.org/questions/linux-newbie-8/shutdown-and-reboot-linux-system-via-php-script-713379/

+0

是不是在/ sbin目录重新正常启动? – Flexo 2010-10-29 11:54:41

+0

@awoodland你是对的,已更改 – infinity 2010-10-29 11:57:22

+0

在我的测试系统上至少是/ sbin/reboot,而不是/ usr/sbin/reboot。 FHS(http://www.pathname.com/fhs/pub/fhs-2.3.html#SBINSYSTEMBINARIES)意味着这也是正确的地方。 – Flexo 2010-10-29 12:02:07

4

如果你想通过PHP的Apache和CGI版本要做到这一点 - 那么答案没有”。 PHP将以与apache相同的用户身份执行,并且允许此用户访问您的系统将是非常危险的。

1

也许你的PHP解释器没有运行具有合适的权限来做到这一点的用户。通常这些都需要以root身份完成,这对于PHP来说是一个坏主意,因为一个小的安全漏洞可能会让整个机器受到威胁。

如果你真的想要做到这一点,我会建议看看使用sudo授予有限的额外访问权限的网络服务器运行的用户。

另一替代须藤在某些系统是DBUS。使用正确的dbus权限,您可以发送指令以重新启动例如

dbus-send --system --print-reply --dest="org.freedesktop.Hal" /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown 

从命令行工作,我相信有dbus绑定可用于PHP。

2

为everyboy说,这是相当危险的。最好使用一些ssh会话来重启/重启你的服务器/服务。

在这种情况下你还是想这样做,给你运行apache用户(www)的sudo的权利。

0

在RHEL我不得不评论这需要在sudoers的配置文件中的tty行:

#Defaults requiretty