Ansible führt Aufgaben auf Zielsystemen unter bestimmten Benutzerkonten aus. Die korrekte Konfiguration von Ausführungskontext und Berechtigungen ist entscheidend für eine erfolgreiche und sichere Automatisierung. Dieses Kapitel behandelt die technischen Mechanismen zur Steuerung von Benutzerrechten bei der Playbook-Ausführung.
Ansible unterscheidet zwischen verschiedenen Ausführungsebenen:
remote_user
ParameterDer remote_user definiert, unter welchem Benutzerkonto
sich Ansible auf den Zielsystemen anmeldet und Aufgaben ausführt.
---
- name: Playbook mit definiertem Remote-User
hosts: webservers
remote_user: ansible_user
tasks:
- name: Prüfe Systemstatus
command: uptimeAnwendungsebenen:
ansible.cfg:
remote_user = ansible_userremote_user: ansible_userbecome_userbecomeDer become-Mechanismus ermöglicht die temporäre Erhöhung
von Berechtigungen während der Aufgabenausführung.
become-Konfiguration---
- name: Systemkonfiguration mit erhöhten Rechten
hosts: all
become: yes
become_method: sudo
become_user: root
tasks:
- name: Installiere System-Paket
package:
name: htop
state: present---
- name: Gemischte Berechtigungen
hosts: all
tasks:
- name: Aufgabe als normaler Benutzer
debug:
msg: "Läuft als: {{ ansible_user_id }}"
- name: Aufgabe mit Root-Rechten
systemd:
name: nginx
state: started
enabled: yes
become: yes
become_user: root
- name: Aufgabe als spezifischer Service-User
file:
path: /opt/application/config
state: directory
owner: appuser
group: appgroup
become: yes
become_user: appuserbecome-MethodenAnsible unterstützt verschiedene Privilegien-Eskalationsmethoden:
| Methode | Beschreibung | Anwendungsfall |
|---|---|---|
sudo |
Standard Unix-Privilegien-Eskalation | Linux/Unix-Systeme |
su |
Wechsel zu anderem Benutzer | Systeme ohne sudo |
pbrun |
PowerBroker | Enterprise-Umgebungen |
pfexec |
Solaris-Privilegien | Solaris-Systeme |
doas |
OpenBSD-Alternative zu sudo | OpenBSD-Systeme |
dzdo |
Centrify DirectAuthorize | Enterprise Active Directory |
# Beispiel für verschiedene become-Methoden
- name: Linux mit sudo
hosts: linux_servers
become: yes
become_method: sudo
become_user: root
- name: Solaris mit pfexec
hosts: solaris_servers
become: yes
become_method: pfexec
become_user: root---
- name: Demonstration minimaler Berechtigungen
hosts: webservers
tasks:
# Keine erhöhten Rechte nötig
- name: Lese Konfigurationsdatei
slurp:
src: /etc/hostname
register: hostname_content
# Nur für diese spezifische Aufgabe
- name: Starte Webserver-Service
systemd:
name: apache2
state: started
become: yes
become_user: root
# Wieder als normaler User
- name: Prüfe Service-Status
uri:
url: "http://{{ inventory_hostname }}"
method: GET
delegate_to: localhost# ansible.cfg
[defaults]
private_key_file = ~/.ssh/ansible_rsa
host_key_checking = False
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = FalseBeispiel für /etc/sudoers.d/ansible:
# Ansible-User mit NOPASSWD für spezifische Befehle
ansible_user ALL=(ALL) NOPASSWD: /usr/bin/systemctl, /usr/bin/apt, /usr/bin/yum
# Für vollständige Automatisierung (weniger sicher)
ansible_user ALL=(ALL) NOPASSWD: ALL---
- name: Sichere Verwendung von Credentials
hosts: databases
vars:
db_admin_password: "{{ vault_db_admin_password }}"
tasks:
- name: Konfiguriere Datenbank-User
mysql_user:
name: appuser
password: "{{ vault_app_db_password }}"
state: present
become: yes
become_user: mysql---
- name: Debug Benutzerkontext
hosts: all
gather_facts: yes
tasks:
- name: Zeige aktuellen Benutzer
debug:
var: ansible_user_id
- name: Zeige effektive Benutzer-ID
debug:
var: ansible_effective_user_id
- name: Zeige Gruppenmitgliedschaften
debug:
var: ansible_user_gid
- name: Teste sudo-Berechtigung
command: sudo -l
register: sudo_rights
ignore_errors: yes
- name: Zeige sudo-Rechte
debug:
var: sudo_rights.stdout_lines# Problem: Unzureichende Berechtigung
- name: Fehlgeschlagene Aufgabe ohne become
systemd:
name: nginx
state: restarted
# ERROR: Failed to restart nginx.service: Access denied
# Lösung: become verwenden
- name: Korrekte Aufgabe mit become
systemd:
name: nginx
state: restarted
become: yesHinweis: Die folgenden Konzepte gelten nur für AWX/Ansible Automation Platform, nicht für Ansible Core.
{
"name": "SSH Machine Credential",
"description": "SSH-basierte Anmeldung für Managed Nodes",
"fields": [
{"id": "username", "label": "Username"},
{"id": "ssh_key_data", "label": "SSH Private Key", "secret": true},
{"id": "become_method", "label": "Privilege Escalation Method"},
{"id": "become_username", "label": "Privilege Escalation Username"},
{"id": "become_password", "label": "Privilege Escalation Password", "secret": true}
]
}AWX implementiert rollenbasierte Zugriffskontrolle (RBAC) mit definierten Rollen: