ryandaniels.create_users

ansible-role-create-users

CI

Rôle pour gérer les utilisateurs sous Linux.
Gère les utilisateurs dans le fichier de configuration de la liste des utilisateurs (la liste est dans le fichier vars/secret).
Ajoute des utilisateurs (avec un UID spécifique), change les mots de passe, verrouille/déverrouille les comptes utilisateurs, gère l'accès sudo (par utilisateur), ajoute des clés SSH pour l'authentification par clé SSH, définit le groupe principal et l'ID de groupe de l'utilisateur, ajoute l'utilisateur (ajout) aux groupes et le groupe sera créé s'il n'existe pas.
Cela se fait par "groupe" (variables de groupe Ansible), comme défini dans le fichier de configuration. Le groupe provient du groupe Ansible défini pour un serveur dans le fichier d'inventaire. all est également pris en charge pour s'appliquer à chaque hôte dans un fichier d'inventaire.

Un exemple plus détaillé peut être trouvé dans le blog : Gestion des utilisateurs avec Ansible

Remarque : La suppression des utilisateurs n'est pas réalisée par choix.

Distributions testées

  • Ubuntu 22.04, 20.04, 18.04, 16.04
  • CentOS / RHEL : 9.1, 8.x, 7.x, 6.5, 5.9

Dépendances

Nécessite Ansible 2.6 (en raison d'un précédent bug 20096 avec des utilisateurs sans expiration)

ansible-vault

Utilisez ansible-vault pour chiffrer les informations sensibles dans git.

cat vars/secret
# chiffrer si en clair (avant de faire un commit/push git)
ansible-vault encrypt vars/secret

# Éditez le fichier chiffré :
ansible-vault edit vars/secret

vi .vaultpass
- Entrez le mot de passe pour Ansible Vault depuis Password Safe
chmod 600 .vaultpass
vi ansible.cfg
# Insérez les lignes suivantes
[defaults]
vault_password_file = ./.vaultpass

.gitignore

vi .gitignore
# Insérez les lignes suivantes
.vaultpass
.retry
secret
*.secret

Comment générer un mot de passe

  • sur Ubuntu - Installer le paquet "whois"
mkpasswd --method=SHA-512
  • sur RedHat - Utiliser Python
python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'

Paramètres par défaut

---
# Remarque : 'debug_enabled_default: true' affichera les mots de passe hachés dans la sortie.
debug_enabled_default: false
default_update_password: on_create
default_shell: /bin/bash
default_generate_ssh_key_comment: "{{ item.username }}@{{ ansible_hostname }}"

Paramètres de l'utilisateur

Emplacement du fichier : vars/secret

  • username : nom d'utilisateur - pas d'espaces (obligatoire)
  • uid : Valeur numérique de l'ID de l'utilisateur (facultatif)
  • user_state : present|lock (obligatoire)
  • password : mot de passe chiffré en sha512 (facultatif). Si non défini, le mot de passe est défini sur "!"
  • update_password : always|on_create (facultatif, par défaut on_create pour plus de sécurité).
    AVERTISSEMENT : si 'always', le mot de passe sera changé pour la valeur du mot de passe.
    Si vous utilisez 'always' pour des utilisateurs existants, assurez-vous d'avoir le mot de passe défini.
  • comment : Nom complet et Département ou description de l'application (facultatif) (Mais vous devriez le définir !)
  • primarygroup : Nom du groupe principal (facultatif).
  • primarygid : ID du groupe principal (facultatif). Si le même gid est réutilisé sur le serveur, le playbook échouera. Si le même groupe duplique est spécifié avec un gid différent, le dernier configuré sera utilisé. AVERTISSEMENT : changer le primarygroup et/ou le primarygid des utilisateurs existants ne changera pas les permissions des fichiers existants appartenant à cet utilisateur. De plus, les anciennes entrées resteront dans /etc/group. Utilisez avec précaution.
  • groups : Liste séparée par des virgules des groupes auxquels l'utilisateur sera ajouté (ajouté). Si le groupe n'existe pas, il sera créé sur le serveur spécifique. Ce n'est pas le groupe principal (le groupe principal n'est pas modifié)
  • shell : chemin vers le shell (facultatif, par défaut /bin/bash)
  • ssh_key : Ajouter une clé SSH autorisée pour l'authentification par clé SSH (facultatif)
    REMARQUE : 1 clé peut être sur une seule ligne, mais si plusieurs clés, utilisez le formatage ci-dessous du premier exemple.
  • exclusive_ssh_key : yes|no (facultatif, par défaut : non)
    AVERTISSEMENT : exclusive_ssh_key: yes - supprimera toutes les clés SSH qui ne sont pas définies ici ! non - ajoutera toute clé spécifiée.
  • generate_ssh_key : Indique s'il faut générer une clé SSH pour l'utilisateur concerné. (facultatif, par défaut 'non')
    REMARQUE : Cela n'écrasera pas une clé SSH existante.
  • ssh_key_bits : Spécifiez éventuellement le nombre de bits dans la clé SSH à créer. (facultatif, valeur par défaut définie par ssh-keygen)
  • ssh_key_passphrase : Définir une phrase de passe pour la clé SSH. Si aucune phrase de passe n'est fournie, la clé SSH sera sans phrase de passe par défaut.
  • generate_ssh_key_comment : Spécifiez le commentaire pour la clé SSH générée (facultatif). Si non spécifié, utilisera le default_generate_ssh_key_comment provenant du fichier yaml par défaut.
  • use_sudo : yes|no (facultatif, par défaut non)
  • use_sudo_nopass : yes|no (facultatif, par défaut non). yes = sudo sans mot de passe.
  • system : yes|no (facultatif, par défaut non). yes = créer un compte système (uid < 1000). Ne fonctionne pas sur les utilisateurs existants.
  • servers : liste d'éléments secondaires des serveurs où les changements sont effectués. (obligatoire)
    Ce sont les groupes Ansible provenant de votre fichier d'inventaire Ansible. Dans les exemples ci-dessous, webserver serait les 3 serveurs dans le groupe d'inventaire Ansible webserver webserver1, webserver2, et webserver3.

Remarque :
Vous pouvez avoir des noms d'utilisateurs en double sur différents serveurs, si vous souhaitez avoir des paramètres différents. Voir l'exemple ci-dessous où testuser102 a sudo sur les serveurs définis dans le groupe webserver dans l'inventaire, mais pas de sudo sur le groupe database.

Exemple de fichier d'inventaire Ansible

[webserver]
webserver1
webserver2
webserver3

[database]
db1
db2
db3

[monitoring]
monitor1

Exemple de fichier de configuration (vars/secret)

---
users:
  - username: testuser101
    password: $6$/y5RGZnFaD3f$96xVdOAnldEtSxivDY02h.DwPTrJgGQl8/MTRRrFAwKTYbFymeKH/1Rxd3k.RQfpgebM6amLK3xAaycybdc.60
    update_password: on_create
    comment: Utilisateur Test 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: Utilisateur Test 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: Utilisateur Test 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: commentaire personnalisé pour la clé SSH générée
    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

Exemple de Playbook create-users.yml

---
- hosts: '{{inventory}}'
  vars_files:
    - vars/secret
  become: yes
  roles:
  - create-users

Préparation

  • installer ansible
  • créer des clés
  • ssh au client pour ajouter l'entrée au fichier known_hosts
  • configurer les clés autorisées sur le serveur client
  • exécuter les commandes ansible

Utilisation

Créer tous les utilisateurs

ansible-playbook create-users.yml --ask-vault-pass --extra-vars "inventory=all-dev" -i hosts
À propos du projet

Role to manage users on linux

Installer
ansible-galaxy install ryandaniels.create_users
Licence
mit
Téléchargements
187.6k
Propriétaire
Ansible all the things