Benutzerwechsel im Ansible Playbook

  • Wie kann ich einen Benutzerwechsel in einem Ansible Playbook vornehmen? Beispielsweise wenn ich einen CronJob für einen anderen Benutzer anlegen möchte oder ich mich nicht mit dem Ansible Skript als sudofähigen Benutzer anmelde. Wo müsste dann das Passwort vom sudofähigen Benutzer stehen, auch in der hosts-Datei beispielsweise?

  • Also für einen Cronjob würde ich dir den Parameter user empfehlen.

    Quelle: https://docs.ansible.com/ansib…odule.html#parameter-user

    Und die zweite Frage verstehe ich nicht ganz.

    Geht mir darum wenn ich mich mit einem 'normalen' Benutzer mittels Ansible per SSH-Key authentifiziere, wie ich mich dann als root Benutzer hochstufen kann.

    Das Ansible Skript authentifiziert sich mit HansFranz als Standardbenutzer, ohne su-Rechte, und soll sich aber nach dem Login als su-berechtigten Benutzer hochstufen. Manuell würde man dies ja mit su [Benutzer] bzw. nur su beim root-Benutzer machen.

  • Oder man macht das mittels sudo -s bzw. sudo -i. Benutzer in die sudoers eintragen und Zugriff nur mittels ssh Key erlauben.

    Genau so würde ich es nicht machen wollen. Direkten root-Zugriff fände ich eher suboptimal und es sollen Aktionen auf dem Server nicht manuell, sondern über Ansible erfolgen.

  • Erst mal ohne Inventory / ansible.cfg Variablen:


    Code
    ansible-playbook play-awesome.yml --user klausdieter --ask-pass \
        --become --become-method su \
        --become-user root --ask-become-pass 


    Wenn ein Key konfiguriert ist (so mit ssh agent), kann man --ask-pass weglassen.


    Alle Variablen kann man jeweils im Inventory oder in der ansible.cfg konfigurieren.


    Code
    all:
      hosts:
        meet.example.com:
          ansible_ssh_user: klausdieter
          ansible_become_method: su
          ansible_become_user: root


    Die Variablen für die ansible.cfg müssten in der mitgelieferten schon drin stehen.


    Wenn Du sowas debuggst und Dir nicht sicher bist ob die Settings richtig ziehen ruhig mal den Debug Mode von Ansible aktivieren bzw ins auth.log des Servers gucken. Ansonsten solltest Du wie beschrieben sudo benutzen. Erlaube dem Benutzer einfach passwordless sudo, ansonsten musst Du bei wirklich jedem Ansible Aufruf immer das sudo Passwort eingeben. Was auf Dauer nervig ist.


    Bei nem User der ordentlich via Key abgesichert ist, ists eh rille. Wenn es jemand schafft das zu hacken, hatte er eh vorher schon root Permissions oder das ist dein geringstes Problem weil irgendeiner der Services ne Lücke hatte und eh alles vorbei ist.

  • Genau so würde ich es nicht machen wollen. Direkten root-Zugriff fände ich eher suboptimal und es sollen Aktionen auf dem Server nicht manuell, sondern über Ansible erfolgen.

    Und genau das meine ich ja. Ich rede hier nicht vom normalen User. Der Ansible User braucht die Möglichkeit. Man könnte ja auch mittels ask-become-pass. Der Zugriff auf den Zielsystemen müsste natürlich auch generell geregelt werden. Dazu dann vielleicht noch ein sinnvolles Logging wo auch privelege escalation usw. mit protokoliert werden.

  • Ich sollte dem ganz normalen Benutzer sudo-Rechte geben? Bei mir sind die Kennwörter auf jedem Server sowieso unterschiedlich, kommt es da nicht auf das Gleiche hinaus, dass ich jedes Mal die Kennwörter eingeben muss? Ich könnte die Kennwörter auch in die hosts-Datei speichern mit dem Parameter 'ansible_sudo_pass='. Bietet Ansible nicht auch so einen Passwortspeicher an?