Jochen Arndt
Цитата:
но я думаю, зачем использовать это, пока у меня есть корневое имя пользователя и пропуск?
У вас есть пароль, но он должен быть введен при необходимости. Как вы хотите это сделать, когда веб-сервер выполняет скрипт?
Цитата:
И я не нашел каталог /etc/sudoer
Это не каталог, а файл. И вы должны использовать
visudo
чтобы отредактировать этот файл вместо использования редактора.
Веб-сервер не будет запускать скрипт как
корень В большинстве случаев PHP-скрипт запускается от имени пользователя, который запускает сервер (например,
wwwrun или
апаш).
При использовании
shell_exec
чтобы выполнить команды, которые не разрешены пользователю, выполняющему сценарий, вы должны выполнить эту команду от имени другого пользователя (
корень в вашем случае).
Это можно сделать с помощью
sudo
(
43.1.4.3.2. команда sudo[
^]).
Но
sudo
запросит пароль, который не будет работать при вызове из скрипта, запущенного веб-сервером. Решение состоит в том, чтобы позволить конкретным пользователям выполнять команды spefic с помощью
файл /etc/пользователям использовать sudo? файл (использовать
visudo
чтобы отредактировать этот файл).
Пример записи может выглядеть следующим образом
wwwrun ALL=(root) NOPASSWD: /sbin/shutdown
Но лучшим решением было бы создание специального сценария. Это гарантирует, что только этот скрипт может быть выполнен как root, потому что давать учетной записи веб-сервера привилегии root для различных команд-плохая идея.
Переместитесь в папку, в которой вы хотите сохранить сценарий (например,
/usr / local/bin) и создать скрипт (с именем
reboot.sh здесь), используя ваш любимый редактор в корневой:
#!/bin/bash
/sbin/shutdown -r now
Сделайте скрипт исполняемым:
sudo chmod u+x reboot.sh
Теперь редактирование файлами sudoers и разрешить скрипт должен быть выполнен:
sudo visudo
Добавьте эту строку внизу (при условии, что PHP-скрипт выполняется от имени пользователя
wwwrun)
wwwrun ALL=(root) NOPASSWD: /usr/local/bin/reboot.sh
Затем вызовите этот скрипт с помощью sudo
shell_exec('sudo /usr/local/bin/reboot.sh');