Ausführen von Ansible vom Webserver zur Verwaltung der Infrastruktur

Ausführen von Ansible vom Webserver zur Verwaltung der Infrastruktur

Ich habe Nginx mit PHP-App. Ich habe auch Ansible installiert und Playbooks auf diesen Server kopiert. Ich möchte Ansible-Playbooks über die Webanwendung ausführen. Ich möchte wissen, wie das auf sichere Weise geht.

Nginx läuft unter dem Benutzer nginx, php-fpm läuft unter Apache und Ansible hat seinen eigenen Benutzer. Die PHP-App befindet sich in /var/www/html/ und Ansible-Playbooks in /var/www/html/ansible, aber diese Verzeichnisse sind für jeden lesbar.

Der Ablauf sollte also folgendermaßen aussehen:

  1. Benutzer wählt Aktion auf Webseite aus
  2. Ajax sendet es an PHP
  3. php bereitet Ansible-Befehl vor und führt Ansible-Playbook aus
  4. Ansible läuft
  5. PHP fängt stdout&stderr ab und sendet es als JSON an die Webseite zurück
  6. Ajax zeigt stdout und stderr auf der Webseite an.

Jetzt plane ich, im PHP-Skript exec('ansible-playbook site.yml -t ...') auszuführen. Dies wird als Apache-Benutzer ausgeführt. Oder soll ich es mit sudo unter dem Ansible-Benutzer starten? Oder ist es besser, nginx, php-fpm und Ansible unter nobody zu starten?

Ich bin nicht sicher, was dafür am besten ist.

Vielen Dank für Ihre Meinungen.

Antwort1

Zu den vorhandenen Weboberflächen für Ansible gehören:

Wenn Sie Ihr eigenes erstellen möchten, verwenden SieAnsible-Runnerals Skript/Python-Bibliothek/Container zum Ausführen von Ansible. Ansible-Playbook ist für die interaktive Verwendung gedacht und verfügt nicht über eine stabile API.

Bevor Sie Ihr eigenes Ding schreiben, müssen Sie verstehen, dass es sich um eine privilegierte Anwendung handelt, die viele Dinge mit Ihrer Infrastruktur machen kann. Sie sind nicht durch das Standardsicherheitsmodell für Ihre installierten Webserver eingeschränkt.

Sie könnten beispielsweise einen Job-Runner-Daemon haben, der als eigener dedizierter Benutzer ausgeführt wird, getrennt von dem Benutzer, unter dem der Webserver ausgeführt wird. Auf diese Weise erhält der kompromittierende Benutzer nginx nicht automatisch sudo an root, Sie müssten auch über eine API gehen.

Ich schätze auch die Möglichkeiten, laufende Playbooks zu isolieren. AWX hat sich für die Implementierung entschiedenJobisolierung im Chroot-Stil.

Die Entwicklung einer sicheren, benutzerfreundlichen Web-App ist im Allgemeinen ein viel zu großes Thema für eine Antwort, und es gibt bessere Stack Exchange-Sites für Entwicklungsthemen. Studieren Sie, was es bereits gibt.

verwandte Informationen