ansibleguy.linux_users
Rôle Ansible - Utilisateurs et Groupes Systèmes
Rôle Ansible pour déployer des utilisateurs et des groupes sur des serveurs Linux.
Testé sur :
- Debian 11
Installation
# dernière version
ansible-galaxy role install git+https://github.com/ansibleguy/linux_users
# depuis Galaxy
ansible-galaxy install ansibleguy.linux_users
# ou vers un chemin de rôle personnalisé
ansible-galaxy install ansibleguy.linux_users --roles-path ./roles
# installer les dépendances
ansible-galaxy install -r requirements.yml
python3 -m pip install -r requirements.txt
Utilisation
Vous voulez une interface graphique simple pour Ansible ? Découvrez ma WebUI Ansible
Configuration
Définissez la configuration system_auth selon vos besoins :
system_auth:
users:
guy:
comment: 'AnsibleGuy'
password: !vault |
$ANSIBLE_VAULT;1.1;AES256
64373031333937633163366236663237623464336461613334343739323763373330393930666331
3333663262346337636536383539303834373733326631310a393865653831663238383937626238
35396531316338373030353530663465343838373635363633613035356338353366373231343264
3437356663383466630a666161363163346533333139656566386466383733646134616166376638
35313765356134396130333439663461353336313230366338646165376666313232
ssh_pub:
- 'ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKkIlii1iJM240yPSPS5WhrdQwGFa7BTJZ59ia40wgVWjjg1JlTtr9K2W66fNb2zNO7tLkaNzPddMEsov2bJAno= [email protected]'
privileges:
- '/usr/bin/rsync'
- '/bin/systemctl restart apache2.service'
bash_aliases:
ll: 'ls -l'
other_guy:
comment: 'Utilisateur inhabituel'
shell: '/bin/fancyshell'
always_update_password: true # sinon, il ne sera défini que lors de la création
password: !vault |
$ANSIBLE_VAULT;1.1;AES256
61303431646338396364383939626630336436316661623830643636376130636163356234333464
3430643134366635356130373139636664363139313831630a376436396134646665306361366464
66386166663739316162346638323537346630333761366161386364646532633434613964396264
3063306334636331320a653837663432643164626665353638643032336534653239666534373562
62323631363638633239383839666337356538366133326136363033373338643138
ssh_pub:
- 'ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBxS1MoeqDyN6+ZKsnLJHIA0/5nVQ6+a1Bgwknx3U7lGlqFIki/HgUX089YUzhbEKcxzTlR3Ji+gLnxhBZhe700= [email protected]'
scope: 'dc_europe_west' # créera l'utilisateur uniquement sur les serveurs membres du groupe d'inventaire 'dc_europe_west'
privileges:
- '/bin/systemctl restart some_service.service'
sudoers_prompt: true # l'utilisateur doit confirmer son mot de passe pour exécuter les commandes listées via 'sudo'
root:
dont_touch: true # le compte utilisateur ne sera pas modifié
bash_aliases:
ll: 'ls -l'
la: 'ls -la'
tc: 'tar -cJvf'
tx: 'tar -xJvf'
groups:
ag_guest:
members: ['joe', 'who?']
ag_tester:
members: ['hans']
ag_users:
members: ['lisa']
nested_groups: ['ag_tester']
ag_superguys:
members: ['seppal']
parents: ['ag_users']
ag_devops:
members: ['luis']
ag_admins:
members: ['reymond']
member_of: ['ag_superguys']
Vous voudrez peut-être utiliser 'ansible-vault' pour chiffrer vos mots de passe :
ansible-vault encrypt_string
Exécution
Exécutez le playbook :
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml --ask-vault-pass
Groupes Imbriqués
Vous pouvez lier deux groupes entre eux et leur permettre d'hériter des membres de l'autre.
Si un autre groupe doit hériter de tous les membres du groupe actuel :
- member_of
- parents
Si le groupe actuel doit hériter de tous les membres d'un autre groupe :
- nested_groups
- children
Fonctionnalités
Utilisateurs
- Portée utilisateur => limiter les serveurs sur lesquels un utilisateur doit être créé
- Privilèges sudo pour des commandes spécifiques
- Clés SSH autorisées
- Définir des alias Bash
Groupes
- Groupes imbriqués (héritage des membres)
Informations
Note : ce rôle ne prend actuellement en charge que les systèmes basés sur Debian
Note : La plupart des fonctionnalités de ce rôle peuvent être choisies pour être incluses ou exclues.
Pour toutes les options disponibles, consultez la configuration par défaut située dans le fichier de valeurs par défaut principal!
Avertissement : Toutes les options/variables que vous fournissez ne seront pas vérifiées pour leur validité. Une mauvaise configuration pourrait casser le rôle !
Exemple
Configuration
system_auth:
users:
guy:
comment: 'AnsibleGuy'
password: !vault |
$ANSIBLE_VAULT;1.1;AES256
64373031333937633163366236663237623464336461613334343739323763373330393930666331
3333663262346337636536383539303834373733326631310a393865653831663238383937626238
35396531316338373030353530663465343838373635363633613035356338353366373231343264
3437356663383466630a666161363163346533333139656566386466383733646134616166376638
35313765356134396130333439663461353336313230366338646165376666313232
ssh_pub:
- 'ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKkIlii1iJM240yPSPS5WhrdQwGFa7BTJZ59ia40wgVWjjg1JlTtr9K2W66fNb2zNO7tLkaNzPddMEsov2bJAno= [email protected]'
privileges:
- '/usr/bin/rsync'
- '/bin/systemctl restart apache2.service'
other_guy:
comment: 'Utilisateur inhabituel'
scope: 'dc_europe_west'
remove: true # si les fichiers associés à l'utilisateur doivent être supprimés une fois qu'il/elle/iel est supprimé
force_remove: true # forcer la suppression ci-dessus
another_guy:
comment: 'Sympathique gars'
password: !vault |
$ANSIBLE_VAULT;1.1;AES256
61303431646338396364383939626630336436316661623830643636376130636163356234333464
3430643134366635356130373139636664363139313831630a376436396134646665306361366464
66386166663739316162346638323537346630333761366161386364646532633434613964396264
3063306334636331320a653837663432643164626665353638643032336534653239666534373562
62323631363638633239383839666337356538366133326136363033373338643138
ssh_pub:
- 'ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBcfYHDR8O4A9uIHnw3v25rDPtqDlRmFIyJc1fxZx90K6BUNXV+TTkFH836EftHVAaMdlMZSfNm9O+o0UbrvbaI= [email protected]'
force_password_change: true
groups:
ag_guest:
members: []
ag_tester:
members: ['other_guy', 'another_guy']
state: 'absent'
ag_users:
members: []
nested_group: ['ag_tester']
ag_superguys:
members: []
parents: ['ag_users']
ag_devops:
members: []
ag_admins:
members: ['guy']
member_of: ['ag_superguys']
Résultat :
guy@ansible:~# cat /etc/group
> ...
> ag_guest:x:1000:
> ag_users:x:1002:guy,another_guy
> ag_superguys:x:1003:guy
> ag_devops:x:1004:
> ag_admins:x:1005:guy
> guy:x:1006:
> another_guy:x:1007:
guy@ansible:~# cat /etc/passwd
> ...
> guy:x:1000:1006:Gestionné par Ansible - AnsibleGuy:/home/guy:/bin/bash
> another_guy:x:1001:1007:Gestionné par Ansible - Sympathique gars:/home/another_guy:/bin/bash
guy@ansible:~# cat /etc/sudoers.d/user_priv_guy
> # Gestionné par Ansible
>
> Cmnd_Alias USER_PRIV_GUY = \
> /usr/bin/rsync, \
> /bin/systemctl restart apache2.service
>
> guy ALL=(ALL) NOPASSWD: USER_PRIV_GUY
guy@ansible:~# cat /etc/sudoers.d/user_priv_another_guy
> # Gestionné par Ansible
>
> Cmnd_Alias USER_PRIV_ANOTHERGUY = \
> /bin/systemctl restart myNiceStuff.service
>
> another_guy ALL=(ALL) USER_PRIV_ANOTHERGUY
Role to configure users and groups on a linux machine
ansible-galaxy install ansibleguy.linux_users