Я хотел бы создать php-скрипт для выполнения команды оболочки и возврата ее вывода. Серверу нужен секретный ключ. Когда я впервые решил проверить это, я создал это:
<?php $command = "ls"; $output = shell_exec($command); echo "<pre>$output</pre>"; ?>
Все прошло отлично. Но когда я изменил $command
на команду, которую я действительно хотел запустить:
$command = "/etc/init.d/mycontrollerd status /etc/mycontrollerconfig";
он дал мне этот результат:
You need root privileges to run this script
Я предполагаю, что мне нужно использовать sudo
. Конечно, это потребует размещения файла pem где-то на сервере. Предполагая, что я это делаю, что именно должно $command
? Должен ли я использовать shell_exec()
, exec()
, system()
или что-то еще?
Не имеет значения, какую функцию php вы используете для запуска скрипта – в чем недостает авторизация вашей учетной записи пользователя.
Используйте sudo (предварительно настройте пользователя веб-сервера для выполнения точной команды без пароля с помощью visudo
и префикс команды sudo
) или настройте скрипт setuid, который выполняет эту команду сам по себе.
Вам действительно нужно сделать, чтобы ваш веб-сервер работал как конкретный пользователь (кроме, например, «никто»), или предоставлял эти права пользователю тому, что вы хотите выполнить.
См. Также: PHP shell_exec () и sudo: должен быть установленным root