ryandaniels.create_users
ansible-role-create-users
Rolle zur Verwaltung von Benutzern auf Linux.
Verwalten Sie Benutzer in der Benutzerliste Konfigurationsdatei (Liste befindet sich in der Datei vars/secret).
Fügen Sie Benutzer hinzu (mit spezifischer UID), ändern Sie Passwörter, sperren/entsperren Sie Benutzerkonten, verwalten Sie sudo-Zugriff (pro Benutzer), fügen Sie SSH-Schlüssel für die SSH-Schlüssel-basierte Authentifizierung hinzu, legen Sie die primäre Gruppe und GID des Benutzers fest, fügen Sie Benutzer (anhängen) zu Gruppen hinzu und die Gruppe wird erstellt, wenn sie nicht existiert.
Dies geschieht auf einer "Gruppen"-Basis (Ansible-Gruppenvariablen), wie im Konfigurationsdatei festgelegt. Die Gruppe stammt von der Ansible-Gruppe, die für einen Server in der Inventardatei festgelegt ist. all
wird ebenfalls unterstützt, um auf jeden Host in einer Inventardatei zuzugreifen.
Ein detaillierteres Beispiel finden Sie im Blogbeitrag: Benutzermanagement mit Ansible
Hinweis: Das Löschen von Benutzern erfolgt absichtlich nicht.
Getestete Distributionen
- Ubuntu 22.04, 20.04, 18.04, 16.04
- CentOS / RHEL: 9.1, 8.x, 7.x, 6.5, 5.9
Abhängigkeiten
Benötigt Ansible 2.6 (aufgrund eines früheren Bugs 20096 mit nicht ablaufenden Benutzern)
ansible-vault
Verwenden Sie ansible-vault, um sensible Informationen aus Git zu verschlüsseln.
cat vars/secret
#verschlüsseln, wenn im Klartext (vor git commit/push)
ansible-vault encrypt vars/secret
#Verschlüsseltes Datei bearbeiten:
ansible-vault edit vars/secret
vi .vaultpass
- Geben Sie das Passwort für Ansible Vault aus dem Passwortsafe ein
chmod 600 .vaultpass
vi ansible.cfg
#Fügen Sie die folgenden Zeilen ein
[defaults]
vault_password_file = ./.vaultpass
.gitignore
vi .gitignore
#Fügen Sie die folgenden Zeilen ein
.vaultpass
.retry
secret
*.secret
Wie man ein Passwort generiert
- auf Ubuntu - Installieren Sie das Paket "whois"
mkpasswd --method=SHA-512
- auf RedHat - Verwenden Sie Python
python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'
Standardeinstellungen
---
# Hinweis: 'debug_enabled_default: true' wird gehashte Passwörter in die Ausgabe zeigen.
debug_enabled_default: false
default_update_password: on_create
default_shell: /bin/bash
default_generate_ssh_key_comment: "{{ item.username }}@{{ ansible_hostname }}"
Benutzereinstellungen
Dateispeicherort: vars/secret
- username: Benutzername - keine Leerzeichen (erforderlich)
- uid: Der numerische Wert der Benutzer-ID (optional)
- user_state: present|lock (erforderlich)
- password: sha512 verschlüsseltes Passwort (optional). Wenn nicht festgelegt, wird das Passwort auf "!" gesetzt.
- update_password: always|on_create (optional, Standard ist on_create zur Sicherheit).
WARNUNG: wenn 'always', wird das Passwort auf den Passwortwert geändert.
Wenn Sie 'always' bei bestehenden Benutzern verwenden, stellen Sie sicher, dass das Passwort festgelegt ist. - comment: Vollständiger Name und Abteilung oder Beschreibung der Anwendung (optional) (Aber Sie sollten dies festlegen!)
- primarygroup: Primärer Gruppenname (optional).
- primarygid: Primäre Gruppen-ID (optional). Wenn dieselbe GID auf dem Server wiederverwendet wird, schlägt das Playbook fehl. Wenn dieselbe doppelte Gruppe mit unterschiedlicher GID angegeben wird, wird die zuletzt konfigurierte verwendet. WARNUNG: Das Ändern der primarygroup und/oder primarygid von bestehenden Benutzern ändert nicht die Berechtigungen vorhandener Dateien, die diesem Benutzer gehören. Auch alte Einträge verbleiben in /etc/group. Vorsicht walten lassen.
- groups: Kommagetrennte Liste von Gruppen, zu denen der Benutzer hinzugefügt wird (angehängt). Wenn die Gruppe nicht existiert, wird sie auf dem spezifischen Server erstellt. Dies ist nicht die primäre Gruppe (die primäre Gruppe wird nicht geändert)
- shell: Pfad zur Shell (optional, Standard ist /bin/bash)
- ssh_key: Fügen Sie den autorisierten SSH-Schlüssel für die SSH-Schlüssel-basierte Authentifizierung hinzu (optional)
HINWEIS: 1 Schlüssel kann in einer einzigen Zeile stehen, aber wenn mehrere Schlüssel vorhanden sind, verwenden Sie die Formatierung unten aus dem ersten Beispiel. - exclusive_ssh_key: yes|no (optional, Standard: no)
WARNUNG: exclusive_ssh_key: yes - entfernt alle SSH-Schlüssel, die hier nicht definiert sind! no - fügt jeden angegebenen Schlüssel hinzu. - generate_ssh_key: Bei Bedarf einen SSH-Schlüssel für den betreffenden Benutzer generieren. (optional, Standard ist 'no')
HINWEIS: Dies überschreibt keinen vorhandenen SSH-Schlüssel - ssh_key_bits: Optional die Anzahl der Bits im SSH-Schlüssel, der erstellt werden soll, angeben. (optional, Standard von ssh-keygen festgelegt)
- ssh_key_passphrase: Legen Sie eine Passphrase für den SSH-Schlüssel fest. Wenn keine Passphrase angegeben ist, hat der SSH-Schlüssel standardmäßig keine Passphrase.
- generate_ssh_key_comment: Geben Sie den Kommentar für den generierten SSH-Schlüssel an (optional). Wenn nicht angegeben, wird der Wert von default_generate_ssh_key_comment aus der Standard-YAML verwendet.
- use_sudo: yes|no (optional, Standard: no)
- use_sudo_nopass: yes|no (optional, Standard: no). yes = passwortloses sudo.
- system: yes|no (optional, Standard: no). yes = erstellt Systemkonto (uid < 1000). Funktioniert nicht bei bestehenden Benutzern.
- servers: Unterelementliste von Servern, auf denen Änderungen vorgenommen werden. (erforderlich)
Dies sind die Ansible-Gruppen aus Ihrer Ansible-Inventardatei. In den untenstehenden Beispielen wärewebserver
die 3 Server in derwebserver
Ansible Inventarwebserver1
,webserver2
undwebserver3
.
Hinweis:
Sie können doppelte Benutzernamen auf verschiedenen Servern haben, wenn Sie unterschiedliche Einstellungen haben möchten. Siehe untenstehendes Beispiel von testuser102 hat Sudo auf Servern, die als Gruppe webserver
im Inventar definiert sind, aber kein Sudo in der Gruppe database
.
Beispiel Ansible Inventardatei
[webserver]
webserver1
webserver2
webserver3
[database]
db1
db2
db3
[monitoring]
monitor1
Beispiel Konfigurationsdatei (vars/secret)
---
users:
- username: testuser101
password: $6$/y5RGZnFaD3f$96xVdOAnldEtSxivDY02h.DwPTrJgGQl8/MTRRrFAwKTYbFymeKH/1Rxd3k.RQfpgebM6amLK3xAaycybdc.60
update_password: on_create
comment: Testbenutzer 100
shell: /bin/bash
ssh_key: |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8crAHG/a9QBD4zO0ZHIjdRXy+ySKviXVCMIJ3/NMIAAzDyIsPKToUJmIApHHHF1/hBllqzBSkPEMwgFbXjyqTeVPHF8V0iq41n0kgbulJG testuser101@server1
ssh-rsa AAAA.... testuser101@server2
exclusive_ssh_key: yes
use_sudo: no
use_sudo_nopass: no
user_state: present
servers:
- webserver
- database
- monitoring
- username: testuser102
password: $6$F/KXFzMa$ZIDqtYtM6sOC3UmRntVsTcy1rnsvw.6tBquOhX7Sb26jxskXpve8l6DYsQyI1FT8N5I5cL0YkzW7bLbSCMtUw1
update_password: always
comment: Testbenutzer 101
groups: testcommon, testgroup102web
shell: /bin/sh
use_sudo: yes
user_state: present
servers:
- webserver
- all
- username: testuser102
password: $6$F/KXFzMa$ZIDqtYtM6sOC3UmRntVsTcy1rnsvw.6tBquOhX7Sb26jxskXpve8l6DYsQyI1FT8N5I5cL0YkzW7bLbSCMtUw1
update_password: always
comment: Testbenutzer 101
groups: testcommon, testgroup102db
shell: /bin/sh
user_state: present
servers:
- database
- username: testuser103
password: $6$wBxBAqRmG6O$gPbg9hYShkuIe3YKMFujwiKsPKZHNFwoK4yCyTOlploljz53YSoPdCn9P5k8Qm0z062Q.8hvJ6DnnQQjwtrnS0
user_state: present
servers:
- webserver
- username: testuser104
primarygroup: testgroup104primary
ssh_key: ssh-rsa AAAB.... test103@server
exclusive_ssh_key: no
generate_ssh_key: yes
generate_ssh_key_comment: benutzerdefinierter Kommentar für generierten SSH-Schlüssel
use_sudo: no
user_state: present
servers:
- webserver
- monitoring
- username: testuser105
uid: 1099
password: $6$XEnyI5UYSw$Rlc6tXtECtqdJ3uFitrbBlec1/8Fx2obfgFST419ntJqaX8sfPQ9xR7vj7dGhQsfX8zcSX3tumzR7/vwlIH6p/
primarygroup: testgroup105primary
primarygid: 2222
ssh_key: ssh-rsa AAAB.... test107@server
generate_ssh_key: yes
ssh_key_bits: 4096
use_sudo: no
user_state: lock
servers:
- webserver
- database
Beispiel Playbook create-users.yml
---
- hosts: '{{inventory}}'
vars_files:
- vars/secret
become: yes
roles:
- create-users
Vorbereitung
- Installieren Sie Ansible
- Schlüsselpaar erstellen
- SSH zum Client, um den Eintrag in die known_hosts-Datei hinzuzufügen
- Konfigurieren Sie den Client-Server autorisierte_keys
- Führen Sie Ansible-Befehle aus
Verwendung
Erstellen Sie alle Benutzer
ansible-playbook create-users.yml --ask-vault-pass --extra-vars "inventory=all-dev" -i hosts
ansible-galaxy install ryandaniels.create_users