# Choisir entre `adduser` et `useradd` ![](dummy.png) Sur un système Linux, deux commandes permettent d'ajouter un utilisateur : `useradd` et `adduser`. Elles se ressemblent, mais ne jouent pas dans la même catégorie — et confondre les deux peut mener à des comptes mal configurés. ## Deux outils, deux philosophies `useradd` est un utilitaire **bas niveau**, présent sur toutes les distributions Linux. Il fait exactement ce qu'on lui demande, ni plus ni moins : sans options, il crée une entrée minimale dans `/etc/passwd` et c'est tout. `adduser`, à l'inverse, est un **script Perl interactif** propre à Debian, Ubuntu et leurs dérivées (il n'existe pas tel quel sur Arch ou RHEL). Il s'appuie sur `useradd` en coulisses mais applique en plus les conventions de la distribution. | Aspect | `useradd` | `adduser` (Debian) | |---|---|---| | Niveau | Bas niveau, non interactif | Haut niveau, interactif | | Répertoire home | Créé uniquement avec `-m` | Créé automatiquement | | Squelette `/etc/skel` | Copié uniquement avec `-m` | Copié systématiquement | | Mot de passe | À définir séparément (`passwd`) | Demandé à la volée | | Groupes par défaut | Aucun en dehors du groupe principal | Lus dans `/etc/adduser.conf` | | Disponibilité | Universel | Debian/Ubuntu uniquement | En résumé : `adduser` est pratique pour une création manuelle sur un poste Debian, `useradd` est l'outil de choix pour les scripts et les environnements portables. ## Exemple : reproduire `adduser` avec `useradd` Voici un script Bash qui encapsule `useradd` pour offrir une ergonomie proche d'`adduser`, tout en restant portable. ```BASH #!/bin/bash RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' NC='\033[0m' print_error() { echo -e "${RED}[ERROR] $1${NC}"; } print_info() { echo -e "${YELLOW}[INFO] $1${NC}"; } print_success() { echo -e "${GREEN}[SUCCESS] $1${NC}"; } add_user() { local username=$1 local realname=$2 local password=$3 local homedir=$4 local shell=$5 local groups=$6 if id -u "$username" >/dev/null 2>&1; then print_error "L'utilisateur $username existe déjà." return 1 fi # -m crée le home et copie /etc/skel ; -U crée un groupe homonyme useradd -c "$realname" -d "$homedir" -s "$shell" -G "$groups" -m -U "$username" || { print_error "Échec de la création de $username." return 1 } if [ -n "$password" ]; then echo "$username:$password" | chpasswd fi print_success "L'utilisateur $username a été ajouté avec succès." } ``` La fonction `add_user` prend les mêmes arguments qu'`adduser` : nom d'utilisateur, nom réel, mot de passe, répertoire home, shell et groupes supplémentaires. Elle vérifie d'abord l'absence du compte, délègue ensuite à `useradd -m -U` la création du home (avec copie de `/etc/skel`) et du groupe principal, puis applique le mot de passe via `chpasswd`. Exemple d'appel : ```BASH add_user "jdoe" "John Doe" "password" "/home/jdoe" "/bin/bash" "sudo,www-data" ``` > **Note sécurité :** passer un mot de passe en clair en argument le rend visible dans l'historique shell et dans `ps`. En production, préférez `chpasswd -e` avec un hash, ou laissez `passwd` demander le mot de passe interactivement. ## En pratique - **Administration manuelle sur Debian/Ubuntu** : `adduser`, sans hésiter. - **Scripts d'automatisation, Ansible, conteneurs, distributions non-Debian** : `useradd`, qui garantit un comportement identique partout. - **Suppression** : symétriquement, `deluser` (Debian) et `userdel` répondent à la même logique. Connaître la différence évite les surprises — par exemple un home manquant parce qu'on a oublié `-m`, ou un script qui marche en local et casse sur un serveur Alpine.