Назад | Перейти на главную страницу

Самый безопасный способ запустить сценарий bash с помощью PHP-FPM

В настоящее время я запускаю веб-сервер с Nginx + PHP-Fpm и каждый сайт под своим именем пользователя / GID. Затем у меня есть сценарий bash, который я использую для создания нового пользователя вместе с другими необходимыми вещами. Я знаю, что могу вызвать сценарий с помощью shell_exec / suexec, но мне интересно, какой самый безопасный способ вызвать сценарий bash, не ставя под угрозу безопасность сервера?

Сначала я думал установить задание cron для запуска скрипта, но учетная запись должна быть активирована немедленно. Так что cron работать не будет.

Также я провел некоторый поиск, и некоторые предлагают использовать демон php для мониторинга очереди, а затем запускать скрипт, когда есть задание. Не совсем уверен в этом (демон), так как у меня никогда не было опыта.

Как я могу безопасно запустить свой скрипт?

Обновить:
Просто чтобы обновить, что я решил пойти с комбинацией Beanstalkd + pheanstalk.

Сценарий PHP отправит задание в очередь, а затем он будет запущен демонизированным скриптом php, запущенным отдельным пользователем, у которого есть необходимые привилегии.

Что касается конкретной темы использования exec в php и того, как быть в безопасности, единственное, о чем вам нужно позаботиться, - это избегать аргументов.

т.е. не сделай это:

exec('myscript ' . $_POST['arg']);

если не очевидно - подумайте, что будет, если $_POST['arg'] содержит ; rm xyz - или того хуже, если вы отправляете вывод этой команды на экран, и он содержит ; more /etc/passwd; more db-config.php и т.п.

следовательно - избегайте своих аргументов:

$foo = escapeshellarg($whatever);
exec("myscript $foo");

Однако, если вашему сценарию bash требуется больше привилегий, чем вы обычно разрешаете иметь своему пользователю nginx - вам лучше прислушаться к найденному совету, который отделяет пользователя, запускающего ваш сценарий bash, от пользователя nginx.

Подобно вашему предложению демона php в вопросе, приложение php отправляет запрос для запуска сценария bash, синхронно или асинхронно, с использованием работа очередь система. Очередь заданий просто отправляет запрос вашему сценарию bash, при необходимости возвращая результат. Таким образом, вы можете запустить bash-скрипт «создать нового пользователя» как пользователь с соответствующими разрешениями, не давая вашему пользователю nginx никаких дополнительных привилегий и не рискуя использовать эти разрешения где-то еще, если ваш код приложения php. В частности, Gearman очень прост в настройке.