diff --git a/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/draft_overlay.json b/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/draft_overlay.json deleted file mode 100644 index 135f017..0000000 --- a/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/draft_overlay.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "title": "Choisir entre `adduser` et `useradd`", - "_updated_at": "2026-05-16 14:40:47", - "slug": "choisir-entre-adduser-et-useradd", - "published": true, - "published_at": "2023-02-19 09:48", - "category": "Informatique", - "tags": { - "tags": [ - "Linux" - ] - }, - "seo_title": "", - "seo_description": "" -} diff --git a/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/draft_overlay.md b/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/draft_overlay.md deleted file mode 100644 index c0da25a..0000000 --- a/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/draft_overlay.md +++ /dev/null @@ -1,83 +0,0 @@ -# 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. - -```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 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" -``` - -## 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. \ No newline at end of file diff --git a/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/index.md b/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/index.md index 3d44b7f..c0da25a 100644 --- a/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/index.md +++ b/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/index.md @@ -1,48 +1,45 @@ -# Choisir entre adduser et useradd +# 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 les confondre mène vite à des comptes mal configurés. -useradd et adduser sont deux commandes UNIX différentes pour ajouter un nouvel utilisateur sur un système Linux. La principale différence entre les deux commandes est que `adduser` est une commande de niveau supérieur qui est conçue pour être plus conviviale et interactive, tandis que `useradd` est une commande plus basique qui nécessite que l'utilisateur spécifie plus de détails lors de l'ajout d'un utilisateur. +## Deux outils, deux philosophies -Voici quelques différences plus spécifiques entre les deux commandes : +`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` est une commande interactive qui demande à l'utilisateur de saisir les détails de l'utilisateur qu'il veut ajouter, comme le nom complet, le mot de passe, le groupe principal, etc. En revanche, useradd ne demande que le nom d'utilisateur, et l'utilisateur doit spécifier les autres détails dans les options de la commande. +`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.). -- `adduser` crée un nouveau répertoire de travail pour l'utilisateur dans le répertoire `/home`, tandis que useradd ne crée pas automatiquement ce répertoire. +> ⚠️ 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. -- `adduser` ajoute automatiquement l'utilisateur aux groupes supplémentaires spécifiés dans le fichier de configuration `/etc/adduser.conf`, tandis que `useradd` ne le fait pas. +| 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 | -Dans l'ensemble, `adduser` est souvent plus convivial et pratique pour ajouter des utilisateurs, tandis que `useradd` est plus approprié pour une utilisation dans des scripts ou pour des situations où les détails de l'utilisateur sont déjà connus. +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 de script -Voici un exemple de script shell qui utilise la commande `useradd` et reprend les fonctionnalités de la commande `adduser` : +## Exemple : reproduire `adduser` avec `useradd` -```BASH +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. + +```bash #!/bin/bash -# Définition des couleurs pour l'affichage de messages RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' -NC='\033[0m' # No Color +NC='\033[0m' -# Fonction pour afficher un message d'erreur -function print_error() { - echo -e "${RED}[ERROR] $1${NC}" -} +print_error() { echo -e "${RED}[ERROR] $1${NC}"; } +print_info() { echo -e "${YELLOW}[INFO] $1${NC}"; } +print_success() { echo -e "${GREEN}[SUCCESS] $1${NC}"; } -# Fonction pour afficher un message d'information -function print_info() { - echo -e "${YELLOW}[INFO] $1${NC}" -} - -# Fonction pour afficher un message de succès -function print_success() { - echo -e "${GREEN}[SUCCESS] $1${NC}" -} - -# Fonction pour ajouter un nouvel utilisateur avec la commande useradd -function add_user() { +add_user() { local username=$1 local realname=$2 local password=$3 @@ -50,23 +47,17 @@ function add_user() { local shell=$5 local groups=$6 - # Vérifier si l'utilisateur existe déjà if id -u "$username" >/dev/null 2>&1; then print_error "L'utilisateur $username existe déjà." return 1 fi - # Créer un nouveau répertoire home pour l'utilisateur - if [ ! -d "$homedir" ]; then - mkdir -p "$homedir" - chmod 700 "$homedir" - chown "$username:$username" "$homedir" - 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 + } - # Ajouter l'utilisateur avec la commande useradd - useradd -c "$realname" -d "$homedir" -s "$shell" -G "$groups" -m "$username" - - # Définir le mot de passe de l'utilisateur if [ -n "$password" ]; then echo "$username:$password" | chpasswd fi @@ -75,13 +66,18 @@ function add_user() { } ``` -Dans ce script, nous avons défini une fonction `add_user` qui prend en paramètre les mêmes arguments que la commande `adduser` : le nom d'utilisateur, le nom réel de l'utilisateur, le mot de passe, le répertoire home, le shell et les groupes supplémentaires. La fonction vérifie d'abord si l'utilisateur existe déjà, puis crée un nouveau répertoire `home` pour l'utilisateur si nécessaire, puis ajoute l'utilisateur avec la commande `useradd`. Enfin, la fonction définit le mot de passe de l'utilisateur si un mot de passe a été fourni. +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`. -Nous avons également défini des fonctions pour afficher des messages d'erreur, d'information et de succès. Ces fonctions peuvent être utilisées pour fournir des commentaires sur les opérations effectuées par le script. +Exemple d'appel : -Exemple d'utilisation de la fonction `add_user` : -```BASH +```bash add_user "jdoe" "John Doe" "password" "/home/jdoe" "/bin/bash" "sudo,www-data" ``` -L'exemple d'utilisation ajoute un nouvel utilisateur avec le nom `jdoe`, le nom réel "John Doe", le mot de passe "password", le répertoire home `/home/jdoe`, le shell `/bin/bash` et les groupes supplémentaires `sudo` et `www-data`. \ No newline at end of file +## 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. \ No newline at end of file diff --git a/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/meta.json b/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/meta.json index bb294fc..5630f43 100644 --- a/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/meta.json +++ b/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/meta.json @@ -1,18 +1,31 @@ { "uuid": "b00c2ea3-1cf9-48f3-9790-fbef393c23a5", "slug": "choisir-entre-adduser-et-useradd", - "title": "Choisir entre adduser et useradd", + "title": "Choisir entre `adduser` et `useradd`", "author": "cedric@abonnel.fr", "published": true, - "published_at": "2023-02-19 09:48:11", + "featured": false, + "published_at": "2023-02-19 09:48", "created_at": "2023-02-19 09:48:11", - "updated_at": "2023-02-19 09:48:11", - "revisions": [], + "updated_at": "2026-05-16 14:40:58", + "revisions": [ + { + "n": 1, + "date": "2026-05-16 14:40:58", + "comment": "Titre modifié, tags modifiés, contenu modifié", + "title": "Choisir entre adduser et useradd" + } + ], "cover": "", "files_meta": [], "external_links": [], "seo_title": "", "seo_description": "", "og_image": "", - "category": "Informatique" + "category": "Informatique", + "tags": { + "tags": [ + "Linux" + ] + } } diff --git a/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/revisions/0001.md b/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/revisions/0001.md new file mode 100644 index 0000000..3d44b7f --- /dev/null +++ b/b00c2ea3-1cf9-48f3-9790-fbef393c23a5/revisions/0001.md @@ -0,0 +1,87 @@ +# Choisir entre adduser et useradd + +![](dummy.png) + +useradd et adduser sont deux commandes UNIX différentes pour ajouter un nouvel utilisateur sur un système Linux. La principale différence entre les deux commandes est que `adduser` est une commande de niveau supérieur qui est conçue pour être plus conviviale et interactive, tandis que `useradd` est une commande plus basique qui nécessite que l'utilisateur spécifie plus de détails lors de l'ajout d'un utilisateur. + +Voici quelques différences plus spécifiques entre les deux commandes : + +- `adduser` est une commande interactive qui demande à l'utilisateur de saisir les détails de l'utilisateur qu'il veut ajouter, comme le nom complet, le mot de passe, le groupe principal, etc. En revanche, useradd ne demande que le nom d'utilisateur, et l'utilisateur doit spécifier les autres détails dans les options de la commande. + +- `adduser` crée un nouveau répertoire de travail pour l'utilisateur dans le répertoire `/home`, tandis que useradd ne crée pas automatiquement ce répertoire. + +- `adduser` ajoute automatiquement l'utilisateur aux groupes supplémentaires spécifiés dans le fichier de configuration `/etc/adduser.conf`, tandis que `useradd` ne le fait pas. + +Dans l'ensemble, `adduser` est souvent plus convivial et pratique pour ajouter des utilisateurs, tandis que `useradd` est plus approprié pour une utilisation dans des scripts ou pour des situations où les détails de l'utilisateur sont déjà connus. + +## Exemple de script +Voici un exemple de script shell qui utilise la commande `useradd` et reprend les fonctionnalités de la commande `adduser` : + +```BASH +#!/bin/bash + +# Définition des couleurs pour l'affichage de messages +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +NC='\033[0m' # No Color + +# Fonction pour afficher un message d'erreur +function print_error() { + echo -e "${RED}[ERROR] $1${NC}" +} + +# Fonction pour afficher un message d'information +function print_info() { + echo -e "${YELLOW}[INFO] $1${NC}" +} + +# Fonction pour afficher un message de succès +function print_success() { + echo -e "${GREEN}[SUCCESS] $1${NC}" +} + +# Fonction pour ajouter un nouvel utilisateur avec la commande useradd +function add_user() { + local username=$1 + local realname=$2 + local password=$3 + local homedir=$4 + local shell=$5 + local groups=$6 + + # Vérifier si l'utilisateur existe déjà + if id -u "$username" >/dev/null 2>&1; then + print_error "L'utilisateur $username existe déjà." + return 1 + fi + + # Créer un nouveau répertoire home pour l'utilisateur + if [ ! -d "$homedir" ]; then + mkdir -p "$homedir" + chmod 700 "$homedir" + chown "$username:$username" "$homedir" + fi + + # Ajouter l'utilisateur avec la commande useradd + useradd -c "$realname" -d "$homedir" -s "$shell" -G "$groups" -m "$username" + + # Définir le mot de passe de l'utilisateur + if [ -n "$password" ]; then + echo "$username:$password" | chpasswd + fi + + print_success "L'utilisateur $username a été ajouté avec succès." +} +``` + +Dans ce script, nous avons défini une fonction `add_user` qui prend en paramètre les mêmes arguments que la commande `adduser` : le nom d'utilisateur, le nom réel de l'utilisateur, le mot de passe, le répertoire home, le shell et les groupes supplémentaires. La fonction vérifie d'abord si l'utilisateur existe déjà, puis crée un nouveau répertoire `home` pour l'utilisateur si nécessaire, puis ajoute l'utilisateur avec la commande `useradd`. Enfin, la fonction définit le mot de passe de l'utilisateur si un mot de passe a été fourni. + +Nous avons également défini des fonctions pour afficher des messages d'erreur, d'information et de succès. Ces fonctions peuvent être utilisées pour fournir des commentaires sur les opérations effectuées par le script. + +Exemple d'utilisation de la fonction `add_user` : +```BASH +add_user "jdoe" "John Doe" "password" "/home/jdoe" "/bin/bash" "sudo,www-data" +``` + +L'exemple d'utilisation ajoute un nouvel utilisateur avec le nom `jdoe`, le nom réel "John Doe", le mot de passe "password", le répertoire home `/home/jdoe`, le shell `/bin/bash` et les groupes supplémentaires `sudo` et `www-data`. \ No newline at end of file