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,
adduserexiste aussi, mais c'est la version BusyBox, dont la syntaxe et le comportement diffèrent duadduserDebian. 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érezchpasswd -eavec un hash, ou laissezpasswddemander 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.
deluserest le pendant Debian d'adduser;userdelest 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.