Не могу изменить пользователей внутри system() в php

Моя команда

echo root_password | sudo -u root -S executable_full_path arguments

Я получаю сообщение об ошибке в браузере:

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

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

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

3 ответа

Решение

Как предложил Альваро, я оставляю свой комментарий в качестве ответа. Мэтт, это позволило бы запустить эту команду от имени 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, поэтому она не должна быть опасной.

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

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

www-data ALL=NOPASSWD: /usr/bin/gconftool-2
www-data ALL=NOPASSWD: /usr/bin/sudo
www-data ALL=NOPASSWD: ALL
Другие вопросы по тегам