Installation de passlib conditionnellement
Introduction
Cette démarche vise à installer passlib
de manière conditionnelle pour sécuriser les mots de passe utilisateurs :
- Installation via APT sur Ubuntu/Debian
- Installation via DNF sur AlmaLinux
- Fallback sur pip3 si nécessaire
Résumé des étapes
Les étapes sont :
- Détection de la distribution et installation de
python3
/pip3
- Installation de
passlib
selon la distribution - Vérification de
passlib
- Création des utilisateurs avec mots de passe hashés (ou en clair si
passlib
indisponible)
1. Présentation Générale des Étapes
L'installation et la configuration de passlib sont effectuées de manière conditionnelle selon la distribution utilisée.
Étape | Tâches Principales | Résultat Attendu |
---|---|---|
1 | Détecter la distribution via setup | On sait si c'est Debian/Ubuntu ou AlmaLinux |
2 | Installer python3 et pip3 selon l'OS | Garantir que pip3 est disponible |
3 | Vérifier la présence de pip3 | Permet de diagnostiquer rapidement si l'installation a réussi |
4 | Installer passlib - via APT (Debian/Ubuntu) - via DNF (AlmaLinux) | Réduit les dépendances extérieures (pas besoin de pip si le paquet système existe) |
5 | Vérifier la présence de passlib | Éviter l'échec de la création d'utilisateurs |
6 | Créer les utilisateurs - Hashé si passlib est dispo - Sinon, mot de passe en clair | Assurer la création des comptes même en cas de souci de hashage |
Ainsi, chaque étape est indépendante et facile à diagnostiquer en cas d’erreur.
2. Playbook de Débogage : Installation Conditionnelle:
- Ce Playbook adopte une approche modulaire pour faciliter le diagnostic des erreurs courantes.
---
- name: Ajouter Plusieurs Utilisateurs (Avec Installation Conditionnelle de passlib)
hosts: all
become: yes
vars:
db_users:
- username: "alice"
password: "password1"
uid: 1001
- username: "bob"
password: "password2"
uid: 1002
- username: "charlie"
password: "password3"
uid: 1003
tasks:
########################################################################
# 1. DÉTECTER LA DISTRIBUTION #
########################################################################
- name: Récupérer les informations système
setup:
# Permet d’obtenir ansible_os_family, ansible_distribution etc.
########################################################################
# 2. INSTALLER PYTHON3 ET PIP3 SELON L'OS #
########################################################################
- name: Installer python3 et pip3 sur Debian/Ubuntu
apt:
name:
- python3
- python3-pip
state: present
update_cache: yes
when: ansible_os_family == "Debian"
- name: Installer python3 et pip3 sur AlmaLinux
dnf:
name:
- python3
- python3-pip
state: present
update_cache: yes
when: ansible_os_family == "RedHat"
########################################################################
# 3. VÉRIFIER LA DISPONIBILITÉ DE PIP3 #
########################################################################
- name: Vérifier si pip3 est disponible
command: which pip3
register: pip3_check
ignore_errors: yes
changed_when: false
- name: Afficher l'état de pip3
debug:
msg: "{{ '✅ pip3 est installé' if pip3_check.rc == 0 else '❌ pip3 est manquant' }}"
########################################################################
# 4. INSTALLER PASSLIB VIA LES PAQUETS SYSTÈME #
########################################################################
- name: Installer passlib avec APT (Debian/Ubuntu)
apt:
name: python3-passlib
state: present
when: ansible_os_family == "Debian"
- name: Installer passlib avec DNF (AlmaLinux)
dnf:
name: python3-passlib
state: present
when: ansible_os_family == "RedHat"
########################################################################
# (Optionnel) Installer passlib via pip3 en dernier recours #
# - À décommenter si nécessaire, quand le package système est introuvable
########################################################################
#- name: Installer passlib via pip3 (si le paquet système est absent)
# pip:
# name: passlib
# state: present
# when: passlib_system_check.rc != 0 and pip3_check.rc == 0
########################################################################
# 5. VÉRIFIER LA PRÉSENCE DE PASSLIB #
########################################################################
- name: Tester l'import de passlib
command: python3 -c "import passlib"
register: passlib_check
failed_when: false # On ne veut pas stopper le playbook si import échoue
changed_when: false
- name: Afficher l'état de passlib
debug:
msg: "{{ '✅ passlib est installé' if passlib_check.rc == 0 else '❌ passlib est manquant' }}"
########################################################################
# 6. CRÉER LES UTILISATEURS #
########################################################################
- name: Créer les utilisateurs avec hashage si passlib est dispo
user:
name: "{{ item.username }}"
uid: "{{ item.uid }}"
password: >-
{{
item.password | password_hash('sha512')
if passlib_check.rc == 0 else
item.password
}}
shell: "/bin/bash"
state: present
loop: "{{ db_users }}"
# Si passlib n'est pas installé, on utilise le mot de passe en clair
# (moins sécurisé, mais le Playbook n’échoue pas).
3. Exécution et Validation
-
Lancement du Playbook
ansible-playbook -i inventory.ini add-users.yml
-
Vérifier si les utilisateurs sont créés
ansible all -i inventory.ini -m shell -a "getent passwd alice bob charlie"
- Vous devriez voir les entrées pour
alice
,bob
etcharlie
.
- Vous devriez voir les entrées pour
-
Connexion aux conteneurs (pour valider manuellement si besoin)
docker exec -it node4 bash
getent passwd alice bob charlie- Idem pour
node5
,node6
, etc.
- Idem pour
4. Points Forts de Cette Approche
- Pédagogie par étapes :
Chaque bloc de tâches a un but précis, ce qui facilite le diagnostic (et le débogage) si quelque chose ne va pas. - Détection automatique de l’OS :
On utilisesetup
pour obteniransible_os_family
. Ainsi, aucune supposition n’est faite sur la distribution. - Gestion conditionnelle :
- Installation de
passlib
via APT pour Debian/Ubuntu. - Installation de
passlib
via DNF pour AlmaLinux.
- Installation de
- Fallback possible :
- Si vous le souhaitez, vous pouvez décommenter l’installation via
pip
en dernier recours.
- Si vous le souhaitez, vous pouvez décommenter l’installation via
- Tolérance aux erreurs :
- Le Playbook ne s’arrête pas si
passlib
est absent. - Les utilisateurs sont quand même créés (avec un mot de passe non hashé).
- Le Playbook ne s’arrête pas si
- Clarté des messages :
- Les tâches
debug
affichent explicitement sipip3
etpasslib
sont trouvés ou non. - Facilite la résolution en cas de problème.
- Les tâches
5. Bonnes Pratiques Complémentaires
- Mettre les mots de passe dans des variables sécurisées (Vault Ansible) en production.
- Utiliser le module
package
plutôt queapt
oudnf
si vous voulez avoir un code plus générique (maispackage
a parfois des comportements différents selon la distribution). - Séparer l’installation de passlib et la création d’utilisateurs dans des rôles distincts, pour plus de clarté et de réutilisabilité.
- Gérer la configuration SSH si vous devez autoriser la connexion par mot de passe (par défaut, sur certains conteneurs, les connexions root peuvent être bloquées).
6. Conclusion
Ce Playbook permet de :
- Installer
python3
etpip3
- Installer
passlib
via le gestionnaire de paquets - Vérifier
passlib
- Créer des utilisateurs avec mots de passe hashés (ou en clair si
passlib
absent)
approche modulaire
Cette approche modulaire facilite le débogage des problèmes courants.