Использовать 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 со своим ключом.
Возможно, вы захотите изучить ваши точные потребности и убедиться, что это не представляет угрозы для безопасности и соответствует вашей ситуации, но это первое, что пришло мне в голову.
Надеюсь, поможет!