У меня есть nginx с php app. Я также установил ansible и скопировал playbooks на этот сервер. Я хочу запустить ansible playbooks через webapp. Я хочу знать, как сделать это безопасным способом.
Nginx работает под пользователем nginx, php-fpm работает под apache, а ansible имеет своего пользователя. Приложение PHP находится в /var/www/html/, а плейбуки Ansible находятся в /var/www/html/ansible, но эти каталоги доступны для чтения всем.
Итак, поток должен выглядеть так:
- пользователь выбирает действие на веб-странице
- ajax отправляет его в php
- php подготавливает команду ansible и запускает ansible playbook
- ansible работает
- php перехватывает stdout&stderr и отправляет их обратно на веб-страницу как json
- ajax отобразит stdout&stderr на веб-странице.
Теперь в скрипте php я планирую выполнить exec('ansible-playbook site.yml -t ...'). Это будет выполнено от имени пользователя apache. Или мне следует запустить его от имени пользователя ansible с помощью sudo? Или лучше запустить nginx, php-fpm и ansible от имени nobody?
Не уверен, что лучше всего подойдет для этого.
Спасибо за ваше мнение.
решение1
Существующие веб-интерфейсы для Ansible включают:
- Семафор
- Башня или AWX
Если вы хотите построить свой собственный, используйтеansible-бегункак скрипт/библиотека Python/контейнер для запуска Ansible. ansible-playbook предназначен для интерактивного использования и не имеет стабильного API.
Прежде чем писать что-то свое, поймите, что это привилегированное приложение, которое может сделать много вещей с вашей инфраструктурой. Вы не ограничены моделью безопасности по умолчанию для ваших установленных веб-серверов.
Например, у вас может быть демон запуска заданий, который работает как отдельный выделенный пользователь, отдельный от пользователя, под которым работает веб-сервер. Таким образом, компрометация пользователя nginx не даст автоматически sudo для root, вам также придется пройти через API.
Также оцените возможности изоляции запущенных плейбуков. AWX выбрал для реализацииизоляция заданий в стиле chroot.
Разработка безопасного, удобного веб-приложения в целом — слишком большая тема для одного ответа, и есть лучшие сайты Stack Exchange для тем разработки. Изучите то, что уже существует.