У меня есть файл, который является скриптом bash, который требует SUDO для работы.
Я могу запустить его из командной строки с помощью SUDO, но мне будет предложено ввести пароль SUDO.
Я хочу запустить этот скрипт из php через shell_exec
но я, если я вызову SUDO, не похож на командную строку, где мне может быть предложено ввести пароль. Есть ли способ передать пароль для sudo при вызове sudo?
Как я могу это сделать?
Отредактируйте файл sudoers (с visudo
) и добавьте правило, которое позволяет пользователю веб-сервера запускать команду без пароля. Например:
www-data ALL=NOPASSWD: /path/to/script
Существуют различные решения этой проблемы.
Прежде всего, рассмотрите возможность изменения разрешений на сценарий, если причина, по которой вы хотите, чтобы sudo была просто проблемой разрешения (см. Комментарий, который я добавил к вопросу выше).
Другим подходом будет использование бит setuid . [Edit: Похоже, что setuid не работает со сценариями. Для пояснений см. Эту ссылку .]
Третий, но очень небезопасный метод – это прочитать пароль из файла паролей. Предупреждение: Это очень неуверенно, если есть какая-то другая возможность, не делайте этого. И если вы это сделаете, попробуйте скрыть файл паролей где-нибудь в иерархии папок.
<?php shell_exec('sudo -u root -S bash script.sh < /home/[user]/passwordfile'); ?>
И четвертая возможность – использовать тег NOPASSWD в файле sudoers. Вы должны ограничить эту мощность конкретными командами, которые вам нужны.
Вы можете добавить что-то вроде этого в файл sudoers
:
username ALL=NOPASSWD: /path/to/script
Это позволит конкретному пользователю называть sudo
на этом конкретном скрипте, не запрашивая пароль.