Ansible nicht-root-sudo und "werden" privilege escalation
Ich habe eine box mit einem Benutzer david
wer hat sudo-Rechte. Kann ich ssh in die box und führen Sie sudo-Operationen wie apt-get install
. Wenn ich versuche, das gleiche zu tun, mit Ansible ist "privilege escalation", bekomme ich eine permission denied
Fehler. Also ein einfaches playbook könnte wie folgt Aussehen:
simple_playbook.yml:
---
- name: Testing...
hosts: all
become: true
become_user: david
become_method: sudo
tasks:
- name: Just want to install sqlite3 for example...
apt: name=sqlite3 state=present
Ich dieses playbook mit dem folgenden Befehl:
ansible-playbook -i inventory simple_playbook.yml --ask-become-pass
Dieser gibt mir eine Eingabeaufforderung für ein Passwort, das gebe ich und bekomme ich die folgende Fehlermeldung (abgekürzt):
fatal: [123.45.67.89]: FAILED! => {...
failed: E: Could not open lock file /var/lib/dpkg/lock - open (13:
Permission denied)\nE: Unable to lock the administration directory
(/var/lib/dpkg/), are you root?\n", ...}
Warum bin ich immer permission denied?
Zusätzliche Informationen
Ich bin mit Ansible 2.1.1.0 und bin der Ausrichtung auf ein Ubuntu 16.04 box. Wenn ich remote_user
und sudo
Optionen wie pro Ansible < v1.9, es funktioniert gut, wie diese:
remote_user: david
sudo: yes
Update
Dem lokalen und remote-Benutzernamen sind die gleichen. Damit dies funktioniert, ich musste nur angeben become: yes
(siehe @techraf Antwort):
Ich denke, die werden, Benutzer ist root, root ändern, anstatt david, und es funktioniert.
Ich habe auch versucht das hinzufügen von 'wahr' auf die Aufgabe und das Ergebnis ist das gleiche.
Hugo - der Benutzername ist "david" auf dem remote-und dem lokalen Rechner. Wenn ich entfernen 'become_user' es funktioniert und das ist, weil es standardmäßig zu root werden (gemäß der Dokumentation). Allerdings möchte ich es als "david", nicht als'root'.
siehe meine aktualisierte Antwort.
InformationsquelleAutor DavB | 2016-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil APT erfordert root-Rechte (siehe die Fehler:
are you root?
), und Sie die Aufgaben alsdavid
.Pro diese Einstellungen:
Ansible wird
david
mitsudo
Methode. Im Grunde läuft seine Python-Skript mitsudo david
vor.Bedeutet es
david
Befehle ausführen können (einige oder alle) mitsudo
-executable änderung der effektiven Benutzer-für das Kind-Prozess (der Befehl). Wenn kein Benutzername angegeben ist, wird dieser Prozess läuft wie dieroot
Konto.Vergleichen Sie die Ergebnisse dieser beiden Befehle:
Zurück auf die APT-problem, Sie (aus CLI) sowie Ansible (in Verbindung mit SSH mit Ihrem account) ausgeführt werden müssen:
nicht:
was fehlschlägt mit der sehr genauen Meldung Ansible angezeigt.
Den folgenden playbook eskalieren werden standardmäßig dem root-Benutzer aus:
remote_user: david
mitbecome: true
es scheint, funktioniert einwandfrei. Sind diese Einstellungen korrekt in dieser situation?hat keinen direkten Bezug auf die Parameter, beginnend mit
become
. Es ist die<user>
verwenden Sie im Befehl diessh <user>@<server>
. In einem Ihrer Kommentare, die Sie, sagte Sie mit dem gleichen userdavid
sowohl auf dem client und dem server, damit Sie eine Verbindung mitssh <server>
. In dieser situationremote_user: david
hat keine Wirkung. Sie können es, können Sie es entfernen. Nichts wird sich ändern. Das problem wurde mitbecome_user: david
. Nur.Sie müssten
remote_user: david
wenn Sie waren läuft Ansible auf deinem (client -) Rechner über ein Konto namensdavb
(oder anderen alsdavid
).Ich will den Befehl ausführen als
david
, nicht alsroot
.Ich bereits beantwortet diese im ersten Satz und in Fettdruck. Wenn Sie APT-Paket-manager die Verwendung unterschiedlicher Benutzer nicht als root angemeldet sind, erhalten Sie eine Fehlermeldung. Dies ist, wie APT geschrieben wurde. Verwenden Sie nicht, wenn Sie es nicht mögen. Man kann software installieren, ohne APT, wenn Sie haben zu handhaben, alles manuell.
InformationsquelleAutor techraf
remote_user
istdavid
. Rufen Sie das Skript mit--ask-pass
und geben Sie das Kennwort fürdavid
. Wenndavid
nicht über sudo ohne Passwort, dann sollten Sie es auch aufrufen, mit--ask-become-pass
.become: true
angegeben (undbecome_method: sudo
). Könnten Sie das klären?Ich habe auch ähnliche Fragen auf ansible here wobei ich nicht sicher bin, was ich falsch mache, entweder
become
oderbecome_user
. Wollte sehen, ob Sie helfen können?InformationsquelleAutor helloV