Назад | Перейти на главную страницу

Как использовать suexec, чтобы позволить скрипту php запускать команду linux?

Я хотел бы выполнить 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 в его простейшей форме, я считаю, что вам нужно:

  1. Если вы используете FastCGI, вы определите путь к suexec (я не верю, что suexec работает для mod_php) (в httpd.conf):

    например FastCgiSuexec /usr/sbin/suexec (что может потребовать изменения разрешений на suexec). Это краткий, но несколько устаревший обзор. Вот.

  2. Добавьте строку в свой VirtualHost, чтобы указать пользователя, от имени которого вы хотите работать:

    SuexecUserGroup "#UID" "#GID" (заменить на действительные числа - оставить знак числа)

Другие варианты позволят вам использовать suPHP или suexec, настроив их как обработчик для всех скриптов. Вы должны иметь скомпилированные компоненты и использовать CGI / FastCGI для ваших PHP-скриптов.

Поскольку в настоящее время вам требуются права root для запуска этого сценария, вы не можете использовать только suexec. Вот некоторые из ваших вариантов:

  1. Измените разрешения сценария - это может быть сложно / небезопасно в зависимости от того, что он делает (т.е. простого chmod не хватит, если задачи, которые он выполняет, требуют определенных привилегий)
  2. использовать sudoс помощью команды из вашего php-скрипта (добавьте пользователя в sudoers и т. д.)
  3. использовать внешний скрипт с setuid

Безопасность всего вышеперечисленного в лучшем случае сомнительна.