Formation Ansible : créer un utilisateur avec le module user

Print Friendly, PDF & Email

Petit à petit, nous allons rentrer dans l’utilisation de ansible. En effet, il me semble logique de ne pas brûler les étapes pour apprendre mais surtout comprendre l’outil et ses principes.

Ansible est de plus en plus au coeur des orchestrations dans un esprit de devops. Il permet à partir de choses simples et descriptives de configurer et déployer des infrastructures mais aussi des applicatifs.

Dans cet article dédié à la formation à ansible, je vous propose de découvrir le module user. C’est un peu une base car il permet comme son nom l’indique de créer des users… et l’installation de serveurs ne se fait pas sans créer d’utilisateurs.

Ce module se base principalement sur les commandes : useradd, userdel, usermod…

Comme je le rappelle dans cette page, il prend de nombreux paramètres. Vous povuez aussi vous rapprocher de la documentation en anglais et plus complète du site de ansible.

Débutons par la mise en place et le premier run du module user

Le cas le plus simple pour commencer est de se créer un utiliseurs de démo. Pour cela il vous faut quelques serveurs (je vous invite à regarder mon article précédent pour vous créer des conteneurs docker similaires à des VM).

Ensuite bien sûr vous devez disposer aussi d’un inventaire et d’un playbook mais maintenant vous commencez à connaître.

Pour créer un user sans droits ni contraintes particulières, nous pouvons commencer par cette tâche.

- name: création de xavki
  user:
    name: xavki
    state: present
    password: "{{ 'password' | password_hash('sha512') }}"  

Nous utilisons bien « user » et lui passons 3 paramètres :

  • le nom : celui de l’utilisateur que nous voulons créer
  • le statut : est-ce que l’on souhaite qu’il soit créé ou supprimé (present/absent en anglais pour ansible)
  • le password : petite particularité c’est que celui-ci ne peut pas être complètement en clair (en théorie il ne doit pas l’être du tout mais nous n’avons pas encore vu dans cette formation ansible-vault). Donc nous utilisons le filtre jinja password_hash et lui précisons que nous voulons un hash de type sha512.
Découvrez  [Ansible] : commençons simplement : copie de fichiers, modification/écriture avec copy et lineinfile

Et bien sûr nous lançons notre playbook :

ansible-playbook -i 00_inventory.yml playbook.yml

Ajoutons quelques paramètres pour mieux configurer notre utilisateur

Bien c’est un premier pas et vous pouvez vérifier cela en vous connectant sur une machine distante avec une simple commande comme :

id xavki

Mais admettons que nous souhaitions ajouter ce user à un groupe existant. On parle bien ici de l’ajouter et non pas d’écraser son groupe. Dans notre exemple, ajoutons-le au groupe sudo pour plus de liberté ;).

- name: création de xavki
  user:
    name: xavki
    state: present
    groups: sudo
    append: yes
    password: "{{ 'password' | password_hash('sha512') }}"  

On ajoute donc le paramètre group et le paramètre append à yes. Ce dernier assure que nous ajoutions bien le groupe au user et pas l’écrasement de son appartenance aux autres groupes.

Cependant, nous aimons associer une clef ssh à un utilisteur. Pour cela ansible permet différentes situations. Ici nous allons l’ajouter et voir le retour de la tâche de création user grâce à un debug.

  - name: création du user xavki
    user:
      name: xavki
      state: present
      generate_ssh_key: yes
      uid: 1200
      groups: sudo
      append: yes
      password: "{{ 'password' | password_hash('sha512') }}"
    register: mavar
  - name: debug
    debug:
      msg: "{{ mavar }}"

Et vous pouvez constater dans la sortie que l’on peut récupérer les éléments relatifs à la clef SSH.

Et nous pouvons bien lui ajouter un shell on retrouve les options de useradd en ligne de commande.

  - name: création du user xavki
    user:
      name: xavki
      state: present
      shell: /sbin/nologin
      generate_ssh_key: yes
      uid: 1200
      groups: sudo
      append: yes
      password: "{{ 'password' | password_hash('sha512') }}"
      password_lock: yes

Remarquez que là nous ajoutons un password_lock. Cela permet de conserver l’utilisateur tout en l’empêchant de se connecter.

Découvrez  Ansible, son inventaire... et son organisation

Et enfin, vous l’avez deviné, nous allons supprimer cet utilisateur en passant simplement le nom et le status « absent ».

  - name: création du user xavki
    user:
      name: xavki
      state: absent

Et voilà nous venons de nous former à l’utilisation du module user de ansible.