Tengo nginx con la aplicación php. También instalé ansible y copié libros de jugadas en este servidor. Lo que quiero hacer es ejecutar libros de jugadas de Ansible a través de la aplicación web. Quiero saber cómo hacer esto de manera segura.
Nginx se ejecuta con el usuario nginx, php-fpm se ejecuta con Apache y ansible tiene su propio usuario. La aplicación PHP está en /var/www/html/ y los libros de jugadas ansibles están en /var/www/html/ansible, pero estos directorios son legibles para todos.
Entonces el flujo debería verse así:
- El usuario selecciona una acción en la página web.
- ajax lo envía a php
- php prepara el comando ansible y ejecuta el libro de jugadas ansible
- carreras ansibles
- php captura stdout y stderr y lo envía de regreso a la página web como json
- ajax mostrará stdout y stderr en la página web.
Ahora, en el script php, planeo ejecutar ('ansible-playbook site.yml -t ...'). Esto se ejecutará como usuario de Apache. ¿O debería iniciarlo bajo el usuario de ansible con sudo? ¿O mejor es iniciar nginx, php-fpm y ansible bajo nadie?
No estoy seguro de qué es lo mejor para esto.
Gracias por vuestras opiniones.
Respuesta1
Las interfaces web existentes para Ansible incluyen:
- Semáforo
- Torre o AWX
Si desea construir el suyo propio, utilicecorredor-ansiblecomo script/biblioteca de Python/contenedor para ejecutar Ansible. ansible-playbook es para uso interactivo y no tiene una API estable.
Antes de escribir algo propio, comprenda que se trata de una aplicación privilegiada que podría hacer muchas cosas en su infraestructura. No está limitado por el modelo de seguridad predeterminado para sus servidores web instalados.
Por ejemplo, podría tener un demonio de ejecución de trabajos que se ejecute como su propio usuario dedicado, independiente del usuario con el que se ejecuta el servidor web. De esta manera, comprometer al usuario nginx no hace que sudo se convierta automáticamente en root, también necesitarás pasar por alguna API.
Aprecie también las posibilidades de aislar los libros de jugadas en ejecución. AWX decidió implementaraislamiento de trabajo estilo chroot.
El desarrollo de una aplicación web segura y utilizable en general es un tema demasiado amplio para una sola respuesta, y existen mejores sitios de Stack Exchange para temas de desarrollo. Estudia lo que ya existe.