2010-10-29 104 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