Objectif du Projet
Mettre en pratique vos compétences en scripting pour automatiser une tâche d’administration système courante : la création et la suppression d’utilisateurs en masse à partir d’une liste.
Le Scénario
Vous êtes l’administrateur d’un système et le département des ressources humaines vous envoie régulièrement une liste d’employés qui arrivent ou qui partent. Au lieu de taper les commandes useradd et userdel manuellement pour chaque personne, vous allez créer un script qui lit un simple fichier CSV et effectue les actions pour vous.
Le fichier d’entrée (users.csv)
Votre script lira un fichier CSV avec deux colonnes : action (add ou remove) et username.
action,username
add,alice
add,bob
remove,charlie
add,david
Les commandes d’administration clés
useradd <nom_utilisateur>: Crée un nouvel utilisateur.-m: Crée le dossier personnel (/home/<nom_utilisateur>).-s <shell>: Spécifie le shell de connexion par défaut (ex:/bin/bash).
deluser <nom_utilisateur>: Supprime un utilisateur.--remove-home: Supprime également son dossier personnel.
id <nom_utilisateur>: Permet de vérifier si un utilisateur existe. Si l’utilisateur existe, la commande réussit (code de sortie 0).
Le Script Complet
Ce script combine la lecture de fichier, les boucles, les conditions case, et l’appel de commandes système.
Note de sécurité : Les commandes
useraddetdelusersont commentées par défaut pour éviter toute modification accidentelle de votre système. Le script ne fait qu’une simulation. Pour le faire fonctionner “en vrai” sur une machine de test, il faudrait le lancer avecsudoet dé-commenter les lignes correspondantes.
#!/usr/bin/env bash
set -euo pipefail
# --- Documentation ---
# Description:
# Gère la création et la suppression d'utilisateurs à partir d'un fichier CSV.
# Format du CSV : action,username (ex: add,alice)
#
# Usage:
# sudo ./manage_users.sh <fichier_csv>
readonly SCRIPT_NAME="$(basename "$0")"
# --- Fonctions ---
die() {
echo >&2 "[ERREUR] $@"
exit 1
}
# --- Fonction Principale ---
main() {
if [[ "$#" -ne 1 ]]; then
die "Usage: $SCRIPT_NAME <fichier_csv>"
fi
local INPUT_FILE="$1"
if [[ ! -f "$INPUT_FILE" ]]; then
die "Le fichier d'entrée '$INPUT_FILE' n'existe pas."
fi
# Vérifie que le script est lancé avec des privilèges root (nécessaire pour useradd/deluser)
# if [[ "$(id -u)" -ne 0 ]]; then
# die "Ce script doit être exécuté avec sudo."
# fi
local line_count=0
# On lit le fichier ligne par ligne, en ignorant la première (l'en-tête)
while IFS=',' read -r action username; do
((line_count++))
if [[ "$line_count" -eq 1 ]]; then
continue # Ignore la ligne d'en-tête
fi
# On ignore les lignes vides
if [[ -z "$action" || -z "$username" ]]; then
continue
fi
case "$action" in
add)
echo "Tentative d'ajout de l'utilisateur '$username'..."
if id "$username" &>/dev/null; then
echo " -> AVERTISSEMENT: L'utilisateur '$username' existe déjà. On ignore."
else
echo " -> ACTION : Création de l'utilisateur '$username'."
# useradd -m -s /bin/bash "$username"
fi
;;
remove)
echo "Tentative de suppression de l'utilisateur '$username'..."
if ! id "$username" &>/dev/null; then
echo " -> AVERTISSEMENT: L'utilisateur '$username' n'existe pas. On ignore."
else
echo " -> ACTION : Suppression de l'utilisateur '$username'."
# deluser --remove-home "$username"
fi
;;
*)
echo " -> ERREUR: Action '$action' non reconnue pour '$username' à la ligne $line_count."
;;
esac
done < "$INPUT_FILE"
echo "Traitement terminé."
}
# --- Point d'entrée ---
main "$@"
Bonnes Pratiques Mises en Œuvre
- Validation : Le script vérifie qu’un fichier est bien fourni en argument et qu’il existe.
- Lecture de CSV robuste :
while IFS=',' read -rest la bonne manière de lire un fichier CSV simple. - Idempotence : Le script vérifie si l’utilisateur existe déjà avant d’essayer de le créer ou de le supprimer. On peut le lancer plusieurs fois sans causer d’erreur.
- Simulation : Le script est écrit de manière à être sûr par défaut, en n’exécutant que des
echo.
Exercices
-
Préparation :
- Enregistrez le script ci-dessus sous le nom
manage_users.shet rendez-le exécutable. - Créez un fichier
users.csvavec le contenu de l’exemple.
- Enregistrez le script ci-dessus sous le nom
-
Simulation :
- Lancez le script en mode simulation :
./manage_users.sh users.csv. - Observez la sortie. Le script vous indique-t-il correctement les actions qu’il ferait ?
- Lancez le script en mode simulation :
-
(Sur une machine de test/VM) Exécution réelle :
- Créez un utilisateur “charlie” manuellement (
sudo useradd -m charlie) pour tester le cas de la suppression. - Dans le script, dé-commentez les lignes
useraddetdeluser. - Lancez le script avec
sudo ./manage_users.sh users.csv. - Vérifiez le résultat avec les commandes
ls /home(alice et bob devraient exister, charlie non) etid alice.
- Créez un utilisateur “charlie” manuellement (