Я хотел бы выполнить php-скрипт в браузере, который, в свою очередь, выполнит одну команду linux и вернет ее результат. Когда я впервые решил проверить это, я создал это:
<?php
$command = "ls";
exec($command, $output);
print_r($output);
?>
Это сработало просто отлично. Но когда я изменил $ command на команду, я действительно хотел запустить:
$command = "/etc/init.d/mycontrollerd status /etc/mycontrollerconfig";
он дал мне такой результат:
Array ( [0] => You need root privileges to run this script )
Мне посоветовали использовать suexec. Однако после изучения страницы руководства я даже не могу сказать, с чего начать. Конечно, я не хочу создавать угрозу безопасности. Так может ли кто-нибудь дать мне рецепт, как заставить мою команду работать и возвращать результат?
Кстати, это базовая система LAMP под управлением Ubuntu.
РЕДАКТИРОВАТЬ: @womlbe ниже рекомендует sudo вместо suexec. Когда безопасность по-прежнему превыше всего, как я мог это сделать?
Насколько мне известно, suexec не предоставляет привилегии root (или привилегии пользователя apache).
Чтобы использовать suexec в его простейшей форме, я считаю, что вам нужно:
Если вы используете FastCGI, вы определите путь к suexec (я не верю, что suexec работает для mod_php) (в httpd.conf):
например FastCgiSuexec /usr/sbin/suexec
(что может потребовать изменения разрешений на suexec). Это краткий, но несколько устаревший обзор. Вот.
Добавьте строку в свой VirtualHost, чтобы указать пользователя, от имени которого вы хотите работать:
SuexecUserGroup "#UID" "#GID"
(заменить на действительные числа - оставить знак числа)
Другие варианты позволят вам использовать suPHP или suexec, настроив их как обработчик для всех скриптов. Вы должны иметь скомпилированные компоненты и использовать CGI / FastCGI для ваших PHP-скриптов.
Поскольку в настоящее время вам требуются права root для запуска этого сценария, вы не можете использовать только suexec. Вот некоторые из ваших вариантов:
sudo
с помощью команды из вашего php-скрипта (добавьте пользователя в sudoers и т. д.) setuid
Безопасность всего вышеперечисленного в лучшем случае сомнительна.