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.

Achetez-moi un café

Statut du test Molecule Statut du test YamlLint Statut du test PyLint Statut du test Ansible-Lint Ansible Galaxy

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
À propos du projet

Role to configure users and groups on a linux machine

Installer
ansible-galaxy install ansibleguy.linux_users
Licence
other
Téléchargements
2.6k
Propriétaire
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg