Ansible est une solution d’automatisation de choix pour les administrateurs systĂšme qui souhaitent gĂ©rer efficacement les configurations et dĂ©ployer des tĂąches rĂ©pĂ©titives. 🚀 Cet article vous guide pas Ă  pas sur l’utilisation d’Ansible pour gĂ©rer les utilisateurs et l’authentification sur des serveurs distants. Nous allons travailler avec deux serveurs, servera et serverb, en automatisant le processus d’ajout d’utilisateurs et la gestion des clĂ©s SSH. 🔑

À la fin de ce guide, vous serez capable de :

  • CrĂ©er et gĂ©rer des utilisateurs localement sur vos hĂŽtes.
  • DĂ©ployer des clĂ©s SSH autorisĂ©es pour chaque utilisateur.
  • Configurer les droits sudo sans mot de passe pour un groupe spĂ©cifique.
  • DĂ©sactiver l’accĂšs SSH root (parce que la sĂ©curitĂ©, c’est important !).

Ça vous intrigue ? Parfait, c’est parti !

Scénario : Unifier les utilisateurs et les accÚs sur tous vos serveurs

Imaginez que votre organisation vous confie une mission cruciale : vous devez vous assurer que tous les hĂŽtes disposent des mĂȘmes utilisateurs locaux. Ces utilisateurs doivent :

  • Faire partie du groupe webadmin, capable d’utiliser la commande sudo sans mot de passe.
  • Avoir leurs clĂ©s publiques SSH dĂ©ployĂ©es pour une connexion sĂ©curisĂ©e.
  • EmpĂȘcher l’utilisateur root de se connecter directement via SSH (une bonne pratique de sĂ©curitĂ© !).

Et bien sĂ»r, tout cela doit ĂȘtre automatisĂ©. C’est lĂ  qu’Ansible entre en jeu avec son playbook magique.

⚙ Étape 1 : PrĂ©parer l’environnement

Avant de plonger dans Ansible, assurez-vous que votre environnement est bien préparé.

1.1. đŸ–„ïž Installer Ansible

Sur votre machine de contrÎle (ici appelée workstation), vous devez installer Ansible. Si vous utilisez un systÚme basé sur Debian/Ubuntu, exécutez les commandes suivantes :

$ sudo apt-get update
$ sudo apt-get install ansible

VĂ©rifiez que l’installation a rĂ©ussi en consultant la version installĂ©e d’Ansible :

$ ansible --version

1.2. 🔑 GĂ©nĂ©rer et copier les clĂ©s SSH

Pour permettre à Ansible de se connecter à vos serveurs sans avoir à saisir de mot de passe, vous devez configurer une authentification par clé SSH.

Générer une paire de clés SSH sur la workstation :

$ ssh-keygen -t rsa -b 4096

Vous pouvez simplement appuyer sur Entrée pour accepter les valeurs par défaut, sauf si vous souhaitez spécifier un chemin pour la clé.

Copier la clé publique sur les serveurs servera et serverb :

$ ssh-copy-id user@servera
$ ssh-copy-id user@serverb

Cette commande permet de copier la clĂ© publique dans le fichier ~/.ssh/authorized_keys sur chaque serveur distant. ✅

1.3. 🔗 Tester la connexion SSH

Avant de continuer, assurez-vous que la connexion SSH fonctionne correctement sans mot de passe en exécutant :

$ ssh user@servera
$ ssh user@serverb

Si vous pouvez vous connecter sans mot de passe, c’est que tout est en ordre. 👍

Pour la suite du tutoriel, vous pouvez rĂ©cupĂ©rer le projet complet sur mon dĂ©pĂŽt git. Cela vous permettra de suivre les Ă©tapes plus facilement et d’exĂ©cuter directement les playbooks et fichiers de configuration fournis. modifiez les fichiers afin de l’adapter a votre environnement https://github.com/DJTJ21/System-users.git

Étape 1 : CrĂ©er un groupe d’utilisateurs et gĂ©rer les utilisateurs

Ansible dispose d’un module spĂ©cialement conçu pour gĂ©rer les utilisateurs locaux : le module user. Mais avant de crĂ©er les utilisateurs, nous devons d’abord nous assurer que le groupe webadmin (vous pouvez le changer en fonction du groupe que vous souhaitez creer ) existe sur tous les serveurs cibles.

- name: Add webadmin group
  group:
    name: webadmin
    state: present

Ensuite, nous crĂ©ons plusieurs utilisateurs qui appartiennent Ă  ce groupe. Pour cela, nous allons lire un fichier de variables vars/users_vars.yml oĂč nous avons dĂ©fini nos utilisateurs comme suit :

users:
  - username: user1
    groups: webadmin
  - username: user2
    groups: webadmin
  - username: user3
    groups: webadmin

Voici la tĂąche Ansible correspondante :

- name: Create user accounts
  user:
    name: "{{ item.username }}"
    groups: "{{ item.groups }}"
  loop: "{{ users }}"

Simple, non ? Ansible parcourt la liste des utilisateurs dans le fichier et les crée automatiquement sur les serveurs cibles.

Étape 2 : DĂ©ployer les clĂ©s SSH

SĂ©curiser l’accĂšs SSH est une prioritĂ©. GrĂące au module authorized_key, nous allons distribuer les clĂ©s publiques SSH Ă  chaque utilisateur. Dans le rĂ©pertoire files, nous avons un fichier de clĂ© unique pour chaque utilisateur. Voici comment Ansible va s’assurer que chaque utilisateur a sa clĂ© SSH autorisĂ©e :

- name: Add authorized keys
  authorized_key:
    user: "{{ item.username }}"
    key: "{{ lookup('file', 'files/'+ item.username + '.key.pub') }}"
  loop: "{{ users }}"

Avec cette tùche, chaque utilisateur pourra se connecter en toute sécurité via SSH, sans avoir à entrer de mot de passe.

Étape 3 : Configurer les droits sudo

L’objectif est que les utilisateurs du groupe webadmin puissent exĂ©cuter des commandes avec sudo sans avoir Ă  saisir de mot de passe. Nous allons donc ajouter une rĂšgle dans le fichier sudoers :

- name: Modify sudo config to allow webadmin users sudo without a password
  copy:
    content: "%webadmin ALL=(ALL) NOPASSWD: ALL"
    dest: /etc/sudoers.d/webadmin
    mode: 0440

Et voilĂ , plus besoin de mot de passe pour ces utilisateurs lorsqu’ils utilisent sudo !

Étape 4 : DĂ©sactiver l’accĂšs root via SSH

L’accĂšs root direct via SSH est un risque pour la sĂ©curitĂ©. Nous allons modifier le fichier sshd_config pour interdire cette pratique. Ansible s’en charge via le module lineinfile :

- name: Disable root login via SSH
  lineinfile:
    dest: /etc/ssh/sshd_config
    regexp: "^PermitRootLogin"
    line: "PermitRootLogin no"
  notify: Restart sshd

Un gestionnaire est déclenché pour redémarrer le service SSH aprÚs cette modification :

handlers:
  - name: Restart sshd
    service:
      name: sshd
      state: restarted

Le playbook complet se prĂ©sente maintenant comme suit :

---
- name: Create multiple local users
  hosts: webservers
  vars_files:
    - vars/users_vars.yml
  handlers:
  - name: Restart sshd
    service:
      name: sshd
      state: restarted

  tasks:

  - name: Add webadmin group
    group:
      name: webadmin
      state: present

  - name: Create user accounts
    user:
      name: "{{ item.username }}"
      groups: "{{ item.groups }}"
    loop: "{{ users }}"

  - name: Add authorized keys
    authorized_key:
      user: "{{ item.username }}"
      key: "{{ lookup('file', 'files/'+ item.username + '.key.pub') }}"
    loop: "{{ users }}"

  - name: Modify sudo config to allow webadmin users sudo without a password
    copy:
      content: "%webadmin ALL=(ALL) NOPASSWD: ALL"
      dest: /etc/sudoers.d/webadmin
      mode: 0440

  - name: Disable root login via SSH
    lineinfile:
      dest: /etc/ssh/sshd_config
      regexp: "^PermitRootLogin"
      line: "PermitRootLogin no"
    notify: "Restart sshd"

Étape 5 : ExĂ©cuter le playbook

Une fois toutes ces tùches écrites, il est temps de tester notre playbook. Depuis le répertoire de travail, exécutez la commande suivante :

🎉 Si tout s’est bien passĂ©, vous devriez voir la sortie ci-dessous. Et voilĂ  ! Vos utilisateurs ont Ă©tĂ© créés et configurĂ©s avec succĂšs. C’est pas gĂ©nial ça ? 🚀🙌

đŸ€” Et si nos utilisateurs n’ont pas Ă©tĂ© créés ? Pas de panique ! Allons vĂ©rifier ça ensemble ! 🔍👀

Bravo, vous avez rĂ©ussi ! 🎉đŸ’Ș Vous avez non seulement automatisĂ© la gestion des utilisateurs, mais aussi sĂ©curisĂ© vos serveurs 🔒✹.

Conclusion

Avec ce guide, vous avez maintenant une meilleure comprĂ©hension de la façon dont Ansible simplifie la gestion des utilisateurs et l’authentification dans un environnement multi-serveurs. đŸš€đŸ’» Automatiser ces tĂąches avec Ansible non seulement vous fait gagner du temps ⏳, mais garantit aussi une cohĂ©rence et une sĂ©curitĂ© accrues 🔐✅. Alors, prĂȘt Ă  rendre votre infrastructure plus intelligente ? đŸ€–.

Categorized in:

Ansible, Linux system, RedHat,