У меня есть файл, который является сценарием удара, который требует, чтобы 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
для этого конкретного сценария без запрашивается пароль.