ryandaniels.create_users
ansible-role-create-users
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 Ansiblewebserver
webserver1
,webserver2
, etwebserver3
.
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
ansible-galaxy install ryandaniels.create_users