ryandaniels.create_users

ansible-role-create-users

CI

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äre webserver die 3 Server in der webserver Ansible Inventar webserver1, webserver2 und webserver3.

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
Über das Projekt

Role to manage users on linux

Installieren
ansible-galaxy install ryandaniels.create_users
Lizenz
mit
Downloads
187.6k
Besitzer
Ansible all the things