Использовать shell_exec() для перезапуска сервера?

У меня 128 МБ VPS, и время от времени он захламляется. Перезагрузка решит проблему, но что если я захочу перезагрузиться из браузера (страница, защищенная паролем). Как "www-data" перезапустить мою машину (Natty Narwhal) с помощью PHP shell_exec() функционировать?

Я запутался, потому что это требует sudo. Дело в том, что я никогда не захожу как www-data, это будет мой пароль sudo? Также, как бы я включил пароль для выполнения этого?

Будет ли работать рут? Если так, то как бы я сделал su из www-data?

3 ответа

Решение

Вы правы в том, что shutdown Для выполнения скрипта требуются привилегии root или sudo. Если вам действительно нужно перезагрузить сервер через веб-страницу, один из способов сделать это - добавить www-data в список sudoers, но только для доступа к shutdown команда.

редактировать /etc/sudoers и добавьте следующую строку:

%www-data ALL=NOPASSWD: /sbin/shutdown

Линия позволит www-data группа, чтобы иметь доступ к sudo /sbin/shutdown без пароля - так что убедитесь, что ваш веб-скрипт не доступен.

После редактирования файла sudoers для перезагрузки вы можете использовать следующее из своего скрипта:

shell_exec('sudo /sbin/shutdown -r now');

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

Как насчет использования ключей RSA с туннелем SSH?

Вы можете сгенерировать для пользователя www-data ключ RSA и SSH -i для другого пользователя (root) с ним при условии, что вы добавите открытый ключ в файл авторизованного хоста другого пользователя. Тогда вам не понадобятся пароли, если вы используете интерактивный SSH со своим ключом.

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

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

Другие вопросы по тегам