Не могу изменить пользователей в system () в php - PullRequest
3 голосов
/ 06 мая 2011

Моя команда

echo root_password | sudo -u root -S executable_full_path arguments

В браузере появляется сообщение об ошибке:

[sudo] пароль для www-данных: извините, попробуйте еще раз.

В phpinfo () безопасный режим отключен, и отключенные функции отсутствуют.Почему это не работает?Эта же команда прекрасно работает в оболочке (bash).Escapeshellarg и escapeshellcmd не имеют значения.

РЕДАКТИРОВАТЬ: Недостаточно просто выполнить команду.Выполняемая программа создает сокет в / tmp и должна назначить ему разрешения.Так что я думаю, что мне действительно нужно быть пользователем root, возможно ли это?

Ответы [ 3 ]

3 голосов
/ 06 мая 2011

Как предположил Альваро, я оставляю свой комментарий в качестве ответа. Мэтт, это позволило бы запустить эту команду от имени root.

@ Мэтт, не делайте этого /etc/sudoers (кстати, вы редактируете этот файл командой visudo, никогда напрямую). Таким образом, вы делаете возможным, чтобы любая команда sudo whatever, выполняемая вашим веб-приложением, запускалась пользователем root, что значительно повышает интерес злоумышленника в случае обнаружения уязвимости в вашем приложении.

Если вы хотите запускать только одну команду от имени root без ввода паролей, укажите это в /etc/sudoers (запомните visudo команда):

www-data ALL=(ALL) NOPASSWD: executable_full_path

Тогда вы разрешаете выполнять только эту команду от имени пользователя root. Теперь вы должны быть в состоянии сделать

sudo -u root executable_full_path arguments

без необходимости вводить пароль (и он будет работать от имени пользователя root). Кроме того, это единственная команда, которую пользователь www-data может выполнить от имени пользователя root, поэтому она не должна быть опасной.

3 голосов
/ 06 мая 2011

Вы повторяете пароль root, когда вам нужно повторить пароль для www-data.

0 голосов
/ 01 января 2016

Используйте это на ваших / ets / sudoers Пример для запуска gconftool-2:

www-data ALL=NOPASSWD: /usr/bin/gconftool-2
www-data ALL=NOPASSWD: /usr/bin/sudo
www-data ALL=NOPASSWD: ALL
...