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