Как вызвать скрипт оболочки из php, который требует SUDO?

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