In diesem Fall mit ansible 2.1.0 erhalte ich eine Fehlermeldung:
fatal: [default]: FAILED! => {"failed": true, "msg": "Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user. For information on working around this, see https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user"}
Es ist ansible 2.0.1.0, das ich auf meinem PC verwende, ist alles normal – Ordner /var/www/ hat Ordner main mit Besitzer und Gruppe www-data
Wenn ich nur were_user: www-data verwende und willed_method: sudo mit were_user: www-data verwende, habe ich denselben Fehler
Was ist zu tun, um dies zu beheben?
Unter Debian/Ubuntu können Sie dies beheben, indem Sie zuerst die acl Paket auf dem Remote-Host, wie bei dieser ansiblen Aufgabe:
- name: install setfacl support
become: yes
apt: pkg=acl
Dasselbe gilt für Redhat/Centos – installieren Sie die acl Paket auf dem Remote-Host:
- name: install setfacl support
become: yes
yum: name=acl
Erfordert dies Änderungen an der fstab oder ein Neustart?
– maschig
15. Juni 2016 um 9:07 Uhr
In meinem Fall war kein Neustart erforderlich.
– Cédric Meury
10. August 2016 um 20:07 Uhr
Auf RHEL6 ist acl standardmäßig nicht aktiviert. Nach der Installation der acl Paket können wir die Option “acl” hinzufügen /etc/fstabund/oder laufen zB sudo mount -o remount,acl / um es sofort zu aktivieren.
– Sam Hartsfield
30. März 2020 um 15:55 Uhr
Das Problem ist, dass www-data kann nicht auf dieselben Dateien zugreifen, die Ihr standardmäßiger ansibler Nicht-Root-Benutzer erstellt hat, den Sie zum Herstellen einer Verbindung mit dem Computer verwenden. Darauf deutet auch die Fehlermeldung eindeutig hin ansibles Dokumentation die beschreibt, welche Optionen Sie haben, um dieses Problem zu beheben, wenn Sie ein Upgrade von Ansible 2.0 oder niedriger durchführen.
Sie schlagen drei Möglichkeiten vor, um das Problem richtig zu beheben:
Verwenden Sie Pipelining. Wenn das Pipelining aktiviert ist, speichert Ansible das Modul nicht in einer temporären Datei auf dem Client. Stattdessen leitet es das Modul an die Standardeinstellung des Python-Interpreters weiter. Pipelining funktioniert nicht für Nicht-Python-Module.
Installieren Sie die Dateisystem-ACL-Unterstützung auf dem verwalteten Host. Wenn das temporäre Verzeichnis auf dem Remote-Host mit aktivierten Dateisystem-ACLs gemountet wird und sich das Setfacl-Tool im Remote-PATH befindet, verwendet Ansible Dateisystem-ACLs, um die Moduldatei mit dem zweiten unprivilegierten zu teilen, anstatt die Datei für alle lesbar machen zu müssen.
Führen Sie keine Aktion auf dem Remote-Computer aus, indem Sie ein nicht privilegierter Benutzer werden. Temporäre Dateien werden durch UNIX-Dateiberechtigungen geschützt, wenn Sie Root werden oder nicht verwenden. In Ansible 2.1 und höher sind UNIX-Dateiberechtigungen auch dann sicher, wenn Sie die Verbindung zur verwalteten Maschine als Root herstellen und dann ein unprivilegiertes Konto verwenden.
Oder wenn Sie keine dieser Korrekturen durchführen können, können Sie Ansible dazu zwingen, auf eine etwas unsicherere Weise zu laufen (was in Ansible 2 und darunter der Standard zu sein schien), was auch Ihr Problem beheben sollte, aber nicht das zugrunde liegende Problem beheben würde Sicherheitsrisiko:
Wenn Sie keine der oben genannten Änderungen vornehmen können, um das Problem zu lösen, und Sie entscheiden, dass der Computer, auf dem Sie arbeiten, sicher genug ist, damit die Module, die Sie dort ausführen möchten, weltweit lesbar sind, können Sie ihn einschalten allow_world_readable_tmpfiles in dem ansible.cfg Datei. Einstellung allow_world_readable_tmpfiles wandelt dies von einem Fehler in eine Warnung um und lässt die Aufgabe so laufen, wie sie es vor 2.1 getan hat.
Vielen Dank für die Wiederholung. Für mich Hilfe zweite Antwort. Ich habe acl-tools installiert und das löst das Problem. In Playbook verwende ich become: true become_user: www-data und alles läuft gut
– DämonMV
19. April 2016 um 7:42 Uhr
Installation der acl Modul auf Debian-Servern (Option 2) war bei weitem die einfachste Option für mich, und dies funktioniert auch, wenn Sie “Temporäre Dateien auf dem Server belassen” zum Debuggen aktiviert haben. Ich habe es aufgegeben, Ansible Pipelining zum Laufen zu bringen (OS X 10.11-Client, Debian 7-Server, habe verschiedene Änderungen an der Konfigurationsdatei ausprobiert, aber nichts hat funktioniert). Ich fand auch heraus, dass die Verwendung der Option „Als Root verbinden“ zu einem unabhängigen Fehler führte, bei dem der größte Teil des Playbooks stillschweigend übersprungen wurde.
– RichVel
4. September 2016 um 6:47 Uhr
Wenn Sie diese schwer zu googlenden Symptome erhalten, wenn Sie die Technik “als Root verbinden” mit verwenden --ask-become-password (Option 3), die Hauptursache ist dieses Problem – installieren Sie einfach die acl Modul, um sie zu beheben: “Playbook fragt nach dem sudo-Passwort und verwendet es für sudo (Sie erhalten einen Passwortfehler, wenn Sie sich vertippt haben), wird aber danach ohne Fehler beendet [setup] implizite Aufgabe (die erfolgreich zu sein scheint)”. Scheint ein Fehler in Ansible 2.1.0 zu sein.
– RichVel
4. September 2016 um 6:58 Uhr
12281700cookie-checkAnsible 2.1.0 mit Become/become_user kann keine Berechtigungen für temporäre Dateien festlegenyes