Я хотел бы создать 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