it-swarm.com.de

Ansible non-root Sudo user und "become" erweiterte Rechte

Ich habe eine Box mit einem Benutzer david eingerichtet, der über Sudo-Berechtigungen verfügt. Ich kann in die Box ssh und Sudo-Operationen wie apt-get install Ausführen. Wenn ich das Gleiche mit Ansibles "Eskalation von Rechten werden" versuche, erhalte ich die Fehlermeldung permission denied. Ein einfaches Spielbuch könnte also so 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 starte dieses Playbook mit folgendem Befehl:

ansible-playbook -i inventory simple_playbook.yml --ask-become-pass

Dies gibt mir eine Eingabeaufforderung für ein Passwort, das ich gebe, und ich erhalte den folgenden Fehler (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 bekomme ich keine Erlaubnis?

Zusätzliche Informationen

Ich verwende Ansible 2.1.1.0 und ziele auf eine Ubuntu 16.04-Box. Wenn ich die Optionen remote_user Und Sudo gemäß Ansible <v1.9 verwende, funktioniert dies wie folgt: remote_user: david Sudo: yes

pdate

Die lokalen und entfernten Benutzernamen sind gleich. Damit dies funktioniert, musste ich nur become: yes Angeben (siehe @ techrafs Antwort):

15
DavB

Warum bekomme ich keine Erlaubnis?

Weil APT erfordert root-Berechtigungen (siehe den Fehler: are you root?) und Sie führen die Aufgaben als david aus.

Nach diesen Einstellungen:

become: true
become_user: david
become_method: Sudo

Ansible wird mit der Methode david zu Sudo. Es führt im Grunde sein Python Skript mit Sudo david vor.


der Benutzer 'david' auf der Remote-Box verfügt über Sudo-Berechtigungen.

Dies bedeutet, dass david (einige oder alle) Befehle mit Sudo- executable ausführen kann, um den effektiven Benutzer für den untergeordneten Prozess (den Befehl) zu ändern. Wenn kein Benutzername angegeben wird, wird dieser Prozess als Konto root ausgeführt.

Vergleichen Sie die Ergebnisse dieser beiden Befehle:

$ Sudo whoami
root
$ Sudo david whoami
david

Zurück zum APT Problem, müssen Sie (von CLI) sowie Ansible (Verbindung mit SSH über Ihr Konto) ausführen:

Sudo apt-get install sqlite3

nicht:

Sudo david apt-get install sqlite3

was mit der sehr genauen Meldung Ansible nicht klappen wird angezeigt.


Das folgende Playbook wird standardmäßig an den Root-Benutzer weitergeleitet:

---
- name: Testing...   
  hosts: all
  become: true

  tasks:
    - name: Just want to install sqlite3 for example...
      apt: name=sqlite3 state=present
26
techraf

remote_user Ist david. Rufen Sie das Skript mit --ask-pass Auf und geben Sie das Passwort für david ein. Wenn david kein passwortloses Sudo hat, sollten Sie es auch mit --ask-become-pass Aufrufen.

- name: Testing...
  hosts: all
  remote_user: david
  become: true
  become_method: Sudo

  tasks:
    - name: Just want to install sqlite3 for example...
      apt: name=sqlite3 state=present
4
helloV