2010-02-21 2 views

ответ

3

Это правда, что вы можете использовать exec() или system(), но разрешение будет проблемой, поскольку PHP запускается на пользователе, который запускает apache.

В качестве быстрого обходного пути пользователю apache может быть разрешено перезапустить. В зависимости от вашей системы установка этого параметра может быть довольно сложной.

Другой способ, который вы можете сделать, - это выполнить задачу Cron (принадлежащую корню), проверяя каждый файл каждую минуту (или секунды) и отредактировать этот файл с помощью вашей программы PHP. Файл должен быть доступен для редактирования только с помощью Apache. Это намного проще сделать.

Надеюсь, это поможет.

1

Вы можете использовать exec() или system()-like метод для запуска системной команды для перезагрузки компьютера.

0

Обычно вам необходимо прав суперпользователя, чтобы перезагрузить компьютер. Но плохой практикой является запуск веб-сервера в качестве суперпользователя. Я бы рекомендовал сделать некоторые межпроцессные коммуникации. E. g. PHP-скрипт записывает секретный ключ в файл, а затем задание cron считывает файл и перезагружает компьютер.

И я не уверен, что это хорошая идея перезагрузить компьютер через Интернет. Зачем вам это делать?

+1

Некоторые средства администрирования сервера, такие как Plesk, позволяют это делать. – zneak

0

Этот ответ относится к серверу на базе Linux.

DANGEROUS: Из системы php use() в системе используйте «sudo shutdown -r now» для перезапуска и «sudo shutdown -h now» для выключения.

В/и т.д./sudoers, добавьте разрешения на запуск завершения работы для пользователя апача

Одной из проблем является то, что Sudo может запрашивать пароль.

Либо удалить пароль пользователя apache (но затем не запускать sshd, telnetd, ftpd и т. Д.) Или посмотреть, имеет ли ваша/etc/sudoers конфигурация без пароля. «man sudoers» о строке 200 и снова о строке 270 говорит, что Tag_Spec может включать NOPASSWD, чтобы указать, что пользователю не нужно повторно аутентифицировать свой пароль для запуска команды sudo.

SAFER: token/cron Попросите PHP написать файл где-нибудь. Напишите сценарий, выполняемый cron как root, чтобы, если этот файл существует, файл удаляется, а затем завершается или перезапускается.

1

В нашей системе мы делаем то, что сказал Пол.

  1. Имейте сценарий, который будет записываться в какой-либо командный каталог (например:/data/command /). Вы должны затвердеть этот сценарий.
  2. Имейте cron, который запускается в минуту, который проверяет вашу команду. Если он имеет команду перезапуска, то cron запустит команду перезапуска в систему.
1

У меня была такая же потребность в настройке CarPC, что и Debian/Lenny. Я сконфигурировал inetd для запуска/sbin/reboot всякий раз, когда было установлено соединение с портом для этой службы.

У меня тогда был скрипт PHP, который выполняет fsockopen() на localhost/port, и он немедленно выполняет перезагрузку.

Быстрая установка (Debian - изменить для вашей системы):

В /etc/services добавить строку "reboot 88/tcp" (или любой другой порт вы хотите) В /etc/inetd.conf добавить строку "reboot stream tcp nowait root /sbin/reboot" Restart inetd using /etc/init.d/openbsd-inetd restart

Теперь подключения к локальной машине: 88, и он перезагрузит систему.

Если ваша система запускает xinetd, вы можете настроить ее, чтобы принимать только соединения с localhost, чтобы немного закрепить защиту. В любом случае, это все еще хак.

Смежные вопросы