15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți
09.10.2024

useradd vs adduser: Diferențe Tehnice, Cazuri de Utilizare și Când să le Folosești pe Fiecare

`useradd` este un utilitar binar de nivel scăzut disponibil pe aproape orice distribuție Linux, care creează conturi de utilizator prin scrierea directă în `/etc/passwd`, `/etc/shadow` și `/etc/group`. `adduser` este un script wrapper de nivel superior — scris de obicei în Perl pe sistemele bazate pe Debian — care apelează `useradd` intern, automatizând crearea directorului home, popularea fișierelor skeleton, solicitarea parolei și colectarea câmpurilor GECOS. Diferența practică nu este doar ergonomică: alegerea instrumentului greșit într-un pipeline de provizionare automatizat sau pe un sistem non-Debian poate produce în mod silențios conturi de utilizator incomplete.

Ambele comenzi înregistrează în cele din urmă un utilizator în baza de date de autentificare a sistemului, dar comportamentul lor diferă semnificativ în ceea ce privește valorile implicite, interactivitatea, portabilitatea și scriptabilitatea. Acest ghid acoperă fiecare distincție tehnică de care un administrator are nevoie pentru a lua o decizie informată.

Ce face useradd de fapt în culise

`useradd` face parte din pachetul shadow-utils (uneori numit `passwd` pe distribuțiile mai vechi). Când este invocat, efectuează o serie de operațiuni atomice:

  1. Citește `/etc/login.defs` pentru a determina intervalele UID implicite, politicile de îmbătrânire a parolelor și dacă să creeze un director home în mod implicit.
  2. Citește `/etc/default/useradd` pentru shell-ul implicit, calea directorului skeleton și comportamentul grupului.
  3. Scrie o nouă intrare în `/etc/passwd` și `/etc/shadow`.
  4. Creează opțional un director home și copiază fișiere din `/etc/skel` dacă `-m` este transmis explicit.
  5. Creează opțional un grup privat corespunzător numelui de utilizator dacă `USERGROUPS_ENAB` este setat la `yes` în `/etc/login.defs`.

Un punct critic pe care multe ghiduri îl omit: pe distribuțiile bazate pe Red Hat (RHEL, CentOS, Rocky Linux, AlmaLinux), `useradd` creează directorul home în mod implicit deoarece `/etc/login.defs` setează `CREATE_HOME yes`. Pe Debian și Ubuntu, nu face acest lucru — indicatorul `-m` este obligatoriu dacă nu modificați `/etc/default/useradd`. Această asimetrie comportamentală este o sursă frecventă de confuzie atunci când administratorii migrează între familii de distribuții.

Indicatoare cheie și comportamentul lor

IndicatorScopNote
———————-
`-m`Creează directorul homeNecesar pe Debian/Ubuntu fără modificarea configurației
`-d /path`Setează calea personalizată a directorului homeNu creează directorul dacă `-m` nu este utilizat și el
`-s /bin/bash`Setează shell-ul de autentificareImplicit la `/bin/sh` sau valoarea din `/etc/default/useradd`
`-u UID`Atribuie un UID specificTrebuie să fie unic; utilizați `-o` pentru a permite duplicate
`-g GID`Setează grupul primarGrupul trebuie să existe deja
`-G group1,group2`Adaugă grupuri suplimentareSeparate prin virgulă, fără spații
`-e YYYY-MM-DD`Data de expirare a contuluiScrisă în câmpul 8 al `/etc/shadow`
`-f days`Perioada de inactivitate a paroleiZile după expirare înainte ca contul să fie blocat
`-r`Creează cont de sistemUID sub `SYS_UID_MAX` în `/etc/login.defs`, fără director home în mod implicit
`-M`Nu creează explicit directorul homeSuprascrie valorile implicite ale distribuției
`-N`Nu creează un grup privat de utilizatorGrupul primar al utilizatorului devine grupul implicit
`-k /path`Specifică un director skeleton alternativSuprascrie `/etc/skel`

Exemplu practic useradd cu opțiuni complete

“`bash

useradd

-m

-d /srv/appuser

-s /bin/bash

-u 1500

-g developers

-G sudo,docker

-e 2025-12-31

-c "Application Service Account"

appuser

passwd appuser

“`

Nicio parolă nu este setată până când `passwd` nu este apelat. Până atunci, contul există dar este blocat — intrarea shadow conține `!` ca hash de parolă, împiedicând autentificarea prin parolă. Autentificarea prin cheie SSH, însă, nu este afectată de această stare.

Ce face adduser de fapt în culise

Pe Debian și Ubuntu, `adduser` este un script Perl localizat la `/usr/sbin/adduser`. Citește propria configurație din `/etc/adduser.conf` — un fișier separat de `/etc/login.defs` — și apoi apelează `useradd` cu indicatoarele corespunzătoare bazate pe acea configurație plus datele introduse de utilizator.

Scriptul efectuează pași suplimentari pe care `useradd` singur nu îi face:

  • Solicită interactiv o parolă și o confirmă cu o a doua introducere.
  • Colectează câmpurile GECOS (nume complet, număr cameră, telefon serviciu, telefon acasă, altele) prin solicitări ghidate.
  • Copiază fișierele skeleton din `/etc/skel` automat fără a necesita `-m`.
  • Setează proprietatea și permisiunile corecte pe directorul home.
  • Adaugă opțional utilizatorul în grupurile suplimentare definite în `/etc/adduser.conf`.

Pe sistemele bazate pe Red Hat, `adduser` este de obicei un symlink către `useradd`, ceea ce înseamnă că se comportă identic cu binarul de nivel scăzut — nu există un wrapper interactiv. Aceasta este cea mai importantă problemă de portabilitate la scrierea scripturilor cross-distribuție.

Fișierul de configurare adduser: /etc/adduser.conf

Directive cheie în `/etc/adduser.conf` care afectează comportamentul:

“`

DSHELL=/bin/bash # Default shell

DHOME=/home # Parent directory for home directories

GROUPHOMES=no # Whether to create group-named subdirectories

LETTERHOMES=no # Whether to use first-letter subdirectories

USERGROUPS=yes # Create a group with the same name as the user

USERS_GID=100 # Default GID if USERGROUPS=no

DIR_MODE=0755 # Permissions on new home directories

SETGID_HOME=no

QUOTAUSER=""

SKEL=/etc/skel

SKEL_IGNORE_REGEX="dpkg-(old|new|dist|tmp)"

“`

Modificarea acestui fișier vă permite să standardizați crearea utilizatorilor pe o flotă de servere Debian/Ubuntu fără a transmite indicatoare de fiecare dată.

Exemplu practic adduser

“`bash

adduser customuser

“`

Sesiunea interactivă arată astfel:

“`

Adding user 'customuser' …

Adding new group 'customuser' (1001) …

Adding new user 'customuser' (1001) with group 'customuser' …

Creating home directory '/home/customuser' …

Copying files from '/etc/skel' …

New password:

Retype new password:

passwd: password updated successfully

Changing the user information for customuser

Enter the new value, or press ENTER for the default

Full Name []: Jane Smith

Room Number []:

Work Phone []:

Home Phone []:

Other []:

Is the information correct? [Y/n] Y

“`

Pentru a adăuga un utilizator existent la un grup în mod non-interactiv cu `adduser`:

“`bash

adduser customuser sudo

“`

Aceasta este o caracteristică notabilă: `adduser` funcționează și ca instrument de gestionare a apartenenței la grup, pe care `useradd` nu îl replică într-o singură comandă.

Comparație față în față

Caracteristică`useradd``adduser`
TipBinar (program C)Script (Perl pe Debian, symlink pe RHEL)
InteractivitateNon-interactiv; toate opțiunile prin indicatoareSolicitări interactive în mod implicit
Director homeNu este creat dacă `-m` nu este transmis (Debian)Creat automat
Configurare parolăNecesită comandă separată `passwd`Solicitată în timpul creării
Câmpuri GECOSSetate prin indicatorul `-c` ca un șir unicColectate câmp cu câmp în mod interactiv
Fișiere skeletonCopiate doar cu indicatorul `-m`Întotdeauna copiate
Fișier de configurare`/etc/login.defs`, `/etc/default/useradd``/etc/adduser.conf`
Disponibilitate cross-distribuțieToate distribuțiile LinuxDoar Debian/Ubuntu (ca script wrapper)
Adecvare pentru scriptingExcelentă — complet non-interactivSlabă — necesită indicatoarele `–disabled-password` și `–gecos` pentru a evita solicitările
Conturi de sistemSuportat prin indicatorul `-r`Suportat prin indicatorul `–system`
Gestionarea grupurilorDoar la momentul creăriiPoate adăuga utilizatorul la un grup existent după creare
GranularitateControl complet asupra fiecărui parametruValori implicite opinionante, mai puțin granular

Când să utilizați useradd

Automatizare și Infrastructure-as-Code

`useradd` este alegerea corectă în orice context non-interactiv: playbook-uri Ansible, provisioners Terraform, instrucțiuni Docker `RUN`, scripturi cloud-init și pipeline-uri CI/CD. Produce rezultate deterministe fără dependență de stdin.

“`bash

Ansible task equivalent

useradd -m -s /bin/bash -G sudo -c "Deploy User" deployuser

echo "deployuser:$(openssl passwd -6 'securepassword')" | chpasswd

“`

Portabilitate cross-distribuție

Orice script shell destinat să ruleze atât pe sisteme bazate pe Debian, cât și pe cele bazate pe RHEL trebuie să utilizeze `useradd`. Bazarea pe comportamentul `adduser` va produce eșecuri silențioase sau comportament neașteptat pe CentOS, Fedora, Rocky Linux sau Alpine Linux.

Conturi de sistem și servicii

Crearea de conturi de servicii blocate, fără shell de autentificare pentru daemoni este o specialitate a `useradd`:

“`bash

useradd -r -s /usr/sbin/nologin -d /var/lib/myservice -m myservice

“`

Indicatorul `-r` atribuie un UID sub pragul contului de sistem, semnalează administratorilor că acesta nu este un cont de utilizator uman și reprezintă modelul standard pentru implementarea aplicațiilor pe medii de VPS Hosting unde izolarea serviciilor este critică.

Control precis UID/GID

În mediile NFS, orchestrarea containerelor sau la sincronizarea bazelor de date de utilizatori pe mai multe servere, UID-urile și GID-urile consistente sunt obligatorii. `useradd -u 1500 -g 1500` garantează acest lucru; `adduser` nu oferă același control determinist fără configurare semnificativă.

Când să utilizați adduser

Configurare interactivă a serverului

Când provizionați manual un nou Server Dedicat și adăugați primele câteva conturi de utilizatori umani, `adduser` reduce riscul unei configurări incomplete. Solicitările ghidate fac aproape imposibil să uitați pasul parolei.

Medii Debian/Ubuntu cu valori implicite standard

Dacă întreaga infrastructură rulează Debian sau Ubuntu și creați utilizatori standard cu director home, `adduser` produce rezultate corecte mai rapid cu mai puține indicatoare de reținut.

Gestionarea grupurilor după creare

Sintaxa `adduser username groupname` pentru adăugarea unui utilizator existent la un grup existent este mai curată decât `usermod -aG groupname username`, deși ambele sunt valide.

Instruirea administratorilor juniori

Natura interactivă a `adduser` îl face un instrument de predare mai bun. Evidențiază câmpurile importante (parolă, nume complet) și ascunde complexitatea intervalelor UID și a directoarelor skeleton până când administratorul este pregătit să le învețe.

Cazuri limită critice și capcane

Capcana directorului home lipsă

Pe Debian/Ubuntu, rularea `useradd username` fără `-m` creează utilizatorul dar nu și directorul home. Utilizatorul se poate autentifica (odată ce o parolă este setată), dar `$HOME` nu va exista, cauzând eșecuri în orice aplicație care scrie în directorul home la prima autentificare — inclusiv `.bash_history`, `.ssh/authorized_keys` și multe directoare de configurare ale aplicațiilor.

“`bash

Verify home directory existence after creation

ls -la /home/newuser || echo "Home directory missing — run: mkhomedir_helper newuser"

“`

Blocarea fișierului shadow

Ambele comenzi blochează `/etc/shadow` în timpul scrierilor. În scripturile de provizionare cu concurență ridicată care creează zeci de utilizatori simultan, aceasta cauzează condiții de cursă. Utilizați o coadă sau execuție secvențială la crearea în masă a utilizatorilor.

Coliziunea UID în medii containerizate

Când implementați aplicații pe VPS cu cPanel sau alte medii cu panou de control, panoul însuși gestionează alocarea UID. Rularea `useradd` manual cu un UID hardcodat poate coliziona cu UID-urile atribuite de panou, cauzând erori de permisiuni pe mai multe conturi. Verificați întotdeauna `getent passwd | awk -F: '{print $3}' | sort -n` înainte de a specifica manual un UID.

adduser –disabled-password pentru scripting

Dacă trebuie să utilizați `adduser` într-un script (de exemplu, pentru a valorifica valorile implicite `/etc/adduser.conf`), suprimați solicitările interactive:

“`bash

adduser –disabled-password –gecos "Automated User,,," scriptuser

echo "scriptuser:$(openssl passwd -6 'password')" | chpasswd

“`

Indicatorul `–gecos` acceptă un șir separat prin virgulă corespunzând câmpurilor GECOS, eliminând toate solicitările interactive.

Integrarea PAM și NSS

Nici `useradd` și nici `adduser` nu configurează modulele PAM sau intrările NSS (Name Service Switch) pentru LDAP, Active Directory sau alte sisteme de autentificare centralizată. Pe serverele integrate cu `sssd` sau `winbind`, crearea locală de utilizatori cu oricare dintre comenzi creează conturi care pot intra în conflict cu sau pot fi înlocuite de conturile serviciului de directoare. Verificați `/etc/nsswitch.conf` înainte de a crea utilizatori locali pe sistemele conectate la domeniu.

Personalizarea fișierelor skeleton

Ambele comenzi copiază din `/etc/skel` în mod implicit. Pentru echipele care gestionează medii de Găzduire Web Partajată unde fiecare utilizator are nevoie de un `.bashrc`, `.vimrc` sau configurație SSH pre-configurată, popularea `/etc/skel` înainte de rularea oricărei comenzi este abordarea corectă — nu modificarea fișierelor după crearea contului.

Verificarea creării utilizatorului

Indiferent de comanda utilizată, verificați rezultatul:

“`bash

Check passwd entry

getent passwd newuser

Check shadow entry (requires root)

getent shadow newuser

Check group memberships

groups newuser

id newuser

Verify home directory and permissions

ls -la /home/newuser

Test login shell

su -s /bin/bash – newuser -c "echo login successful"

“`

Modificarea și ștergerea utilizatorilor

`useradd` și `adduser` creează doar conturi. Gestionarea post-creare utilizează comenzi diferite:

  • `usermod` — Modifică atributele utilizatorului existent (shell, grupuri, director home, expirare).
  • `userdel` / `deluser` — Elimină conturi. `deluser –remove-home username` pe Debian elimină și directorul home și spool-ul de mail.
  • `passwd` — Setează sau schimbă parolele, blochează/deblochează conturi.
  • `chage` — Gestionează politicile de îmbătrânire și expirare a parolelor.

“`bash

Lock an account without deleting it

usermod -L username

Unlock

usermod -U username

Force password change on next login

chage -d 0 username

“`

Matrice practică de decizie

Utilizați această listă de verificare pentru a selecta comanda potrivită:

  • Scriptul rulează pe un sistem non-Debian sau trebuie să fie portabil? Utilizați `useradd`.
  • Este un mediu automatizat, non-interactiv (CI/CD, Ansible, Docker)? Utilizați `useradd`.
  • Aveți nevoie de un UID/GID specific pentru consistența NFS sau a containerelor? Utilizați `useradd -u -g`.
  • Creați un cont de sistem/serviciu fără shell de autentificare? Utilizați `useradd -r -s /usr/sbin/nologin`.
  • Sunteți pe Debian/Ubuntu, creând un cont standard de utilizator uman în mod interactiv? Utilizați `adduser`.
  • Doriți să adăugați un utilizator existent la un grup cu un one-liner curat? Utilizați `adduser username groupname`.
  • Scrieți documentație sau instruiți personal junior pe Debian? Utilizați `adduser`.
  • Trebuie să personalizați locația directorului home, expirarea sau shell-ul non-interactiv la scară? Utilizați `useradd` cu indicatoare explicite.

Igiena corectă a conturilor de utilizator este fundamentală pentru securitatea serverului. Indiferent dacă gestionați un singur VPS sau o flotă de Servere Dedicate, înțelegerea exactă a ceea ce fiecare comandă scrie pe disc — și a ceea ce lasă nesetat — previne clasa de escaladări de privilegii și eșecuri de autentificare care provin din provizionarea incompletă a conturilor.

Întrebări frecvente

useradd creează un director home în mod implicit?

Depinde de distribuție. Pe sistemele bazate pe Red Hat (RHEL, CentOS, Rocky Linux), `CREATE_HOME yes` în `/etc/login.defs` determină `useradd` să creeze directorul home automat. Pe Debian și Ubuntu, niciun director home nu este creat dacă nu transmiteți explicit indicatorul `-m`.

adduser este disponibil pe CentOS sau Rocky Linux?

Pe distribuțiile bazate pe RHEL, `adduser` este un link simbolic către `useradd`, nu wrapper-ul interactiv Perl găsit pe Debian/Ubuntu. Rularea `adduser username` pe CentOS se comportă identic cu `useradd username` — fără solicitări, fără director home automat pe valorile implicite de stil Debian.

Cum utilizez adduser non-interactiv într-un script?

Transmiteți `–disabled-password` pentru a sări solicitarea parolei și `–gecos ""` pentru a sări solicitările câmpurilor GECOS: `adduser –disabled-password –gecos "" username`. Setați parola ulterior cu `echo "username:password" | chpasswd` sau prin piping-ul unui hash `openssl passwd -6`.

Care este diferența dintre /etc/login.defs și /etc/adduser.conf?

`/etc/login.defs` este fișierul de configurare la nivel de sistem citit de `useradd`, `userdel` și `usermod` — controlează intervalele UID/GID, valorile implicite de îmbătrânire a parolelor și comportamentul de creare a directorului home. `/etc/adduser.conf` este citit exclusiv de scripturile Perl `adduser` și `deluser` pe sistemele bazate pe Debian și controlează valorile implicite de nivel superior precum shell-ul implicit, calea părintelui directorului home și directorul skeleton.

Pot combina în siguranță useradd și adduser pe același server Debian?

Da. Ambele scriu în cele din urmă în aceleași fișiere `/etc/passwd`, `/etc/shadow` și `/etc/group`. Conturile create cu oricare dintre comenzi sunt indistinguibile la nivel de sistem. Singura preocupare practică este consistența: dacă echipa dvs. utilizează `adduser` interactiv și un script de automatizare utilizează `useradd` fără `-m`, puteți ajunge cu unii utilizatori fără directoare home. Standardizați pe o singură abordare per mediu și documentați-o.

15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți