Files
abonnel-www/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/index.md
T
2026-05-16 16:40:58 +02:00

4.3 KiB

Choisir entre adduser et useradd

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 les confondre mène vite à 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 se contente d'ajouter une entrée minimale dans /etc/passwd, sans créer de home ni copier le squelette par défaut.

adduser, à l'inverse, est un frontend interactif propre à Debian, Ubuntu et leurs dérivées. Il s'appuie sur useradd en coulisses, mais applique les conventions de la distribution (UID dans la bonne plage, copie de /etc/skel, groupes par défaut lus dans /etc/adduser.conf, etc.).

⚠️ Piège classique : sur Alpine, adduser existe aussi, mais c'est la version BusyBox, dont la syntaxe et le comportement diffèrent du adduser Debian. Même nom, autre outil.

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. Il ne réimplémente pas tout (pas de lecture de /etc/adduser.conf, pas de validation NAME_REGEX, pas de gestion fine des plages d'UID), mais il couvre le cas le plus courant.

🔒 À lire avant l'exemple : passer un mot de passe en clair en argument le rend visible dans l'historique shell et dans ps. L'exemple ci-dessous est pédagogique. En production, préférez chpasswd -e avec un hash, ou laissez passwd demander le mot de passe interactivement.

#!/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 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 :

add_user "jdoe" "John Doe" "password" "/home/jdoe" "/bin/bash" "sudo,www-data"

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 : la même logique s'applique en miroir. deluser est le pendant Debian d'adduser ; userdel est l'outil bas niveau universel.

Connaître la différence évite les mauvaises surprises : un home manquant parce qu'on a oublié -m, un script qui passe en local et casse sur un serveur Alpine, ou un compte créé sans le groupe attendu parce qu'on supposait que useradd lirait /etc/adduser.conf — ce qu'il ne fait pas.