2010-10-29 3 views

ответ

3

Вам нужно добавить пользователя apache в sudoers с помощью NOPASSWD и предоставить только доступ к перезагрузке i.e, а затем запустить систему («sudo reboot»);

Для sudoersfile:

www-data reboot = NOPASSWD: /sbin/reboot 

Это даст апачский доступ к перезагрузке сервера, но rememer, что все пользователи системы, то будет иметь возможность перезагрузиться.

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

+0

@awoodland вы правы, изменено – infinity

+0

На моей тестовой системе, по крайней мере, это/sbin/reboot, а не/usr/sbin/reboot. FHS (http://www.pathname.com/fhs/pub/fhs-2.3.html#SBINSYSTEMBINARIES) подразумевает, что это тоже место. – Flexo

4

Если вы пытаетесь сделать это через апача и CGI версии PHP - то ответы нет". PHP будет выполняться как тот же пользователь, что и apache, и предоставление этому пользователю доступа к вашей системе будет чрезвычайно опасным.

1

Возможно, ваш PHP-интерпретатор не работает как пользователь с соответствующими разрешениями для этого. Обычно они должны выполняться как root, что является плохой идеей для PHP в целом, поскольку одна маленькая дыра в безопасности может видеть, что вся машина подвергается риску.

Если вы действительно хотите сделать это, я бы предложил посмотреть на использование sudo, чтобы предоставить ограниченный дополнительный доступ для пользователя, которым работает веб-сервер.

Другой альтернативой 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

как все указано, довольно опасно. Лучше использовать некоторый сеанс ssh для перезагрузки/перезагрузки сервера/служб.

В случае, если вы все еще хотите это сделать, дайте apache запускающему пользователю (www) sudo right.

0

на RHEL я должен был прокомментировать линию, которая требует TTY на sudoers конфигурационный файл:

#Defaults requiretty 
Смежные вопросы