Răspuns scurt
- Gestionezi utilizatorii după principiul privilegiului minim dând fiecărei persoane un cont propriu, fără conturi partajate și fără conectare directă ca root.
- Acorzi drepturi de sudo prin fișiere separate în /etc/sudoers.d/, fiecare cu comenzile exacte permise, nu cu ALL, și fără NOPASSWD decât pentru automatizări cu o singură comandă.
- Procesele aplicațiilor rulează sub conturi de serviciu cu shell nologin, fără parolă și fără sudo.
- Când cineva pleacă, dezactivezi contul în aceeași zi pe toate serverele, dintr-un inventar, și rotești secretele la care avea acces.
- Auditezi trimestrial lista conturilor, grupurile și regulile sudo și ștergi tot ce nu mai are justificare.
- Regula de bază
- un om = un cont; root fără login direct
- Unde stau regulile sudo
- /etc/sudoers.d/<rol>, validat cu visudo -c
- Conturi de aplicație
- useradd -r -s /usr/sbin/nologin
- Jurnal
- sudo scrie în journal fiecare comandă și cine a rulat-o
De ce contul partajat este problema, nu comoditatea
Când toți intră pe același cont, jurnalul arată că „deploy” a șters o bază de date și auditul se termină acolo. Când un coleg pleacă, parola comună ar trebui schimbată, ceea ce în practică nu se întâmplă. Cu conturi individuale și sudo, fiecare comandă privilegiată are un nume lângă ea, iar plecarea cuiva înseamnă dezactivarea unui singur cont. Clienții din UE cer exact asta: acces nominal, jurnal al acțiunilor administrative, revocare promptă.
Reguli sudo scrise pentru roluri, nu pentru oameni
Un dezvoltator trebuie să repornească serviciul aplicației și să-i citească logurile, nu să editeze sshd_config; un operator de backup rulează scriptul de backup, nu instalează pachete. Scrii câte un fișier în /etc/sudoers.d/ per rol, cu comenzile exacte, și pui oamenii în grupuri care corespund rolurilor. NOPASSWD se dă doar unui cont de automatizare, pentru o singură comandă, niciodată ALL. Validezi fiecare fișier cu visudo -c înainte să închizi sesiunea: o eroare de sintaxă blochează sudo pentru toți.
- grupuri pe rol: dev, ops, backup
- comenzi cu cale absolută, fără wildcard-uri cu argumente arbitrare
- comenzile care deschid un pager (journalctl, systemctl status, man) se dau doar cu --no-pager
- Defaults log_output pentru sesiuni interactive sensibile
- fără sudo su -, fără sudo bash, care anulează tot
Conturi de serviciu și offboarding
Aplicația web, baza de date și job-urile programate rulează fiecare sub contul lor, creat cu -r și shell nologin, fără parolă și fără cheie SSH. Un atacator care compromite aplicația obține un cont fără shell și fără sudo. Pentru oameni, offboarding-ul are o listă: dezactivare cu usermod -L și expirare, ștergerea cheilor din authorized_keys pe toate serverele, revocarea peer-ului VPN, rotirea parolelor și cheilor API văzute. Lista se rulează în ziua plecării.
Auditul periodic
Trimestrial generezi lista conturilor cu UID peste 1000, grupurile lor și regulile sudo efective și o compari cu lista de angajați: conturile fără proprietar se dezactivează, cele cu drepturi peste rol se restrâng. HG nr. 562/2025 cere furnizorilor sub Legea nr. 48/2023 o politică de control al accesului cu revizuiri periodice, iar Legea nr. 195/2024 cere măsuri organizatorice adecvate pentru accesul la date personale. Raportul trimestrial e dovada pentru amândouă.
Roluri tipice și drepturile lor pe un server de producție| Rol | Cont | Drepturi sudo | Ce nu poate face |
|---|
| Administrator de sistem | nominal, în grupul ops | ALL, cu parolă, cu log_output | conectare directă ca root |
|---|
| Dezvoltator | nominal, în grupul dev | systemctl restart app, journalctl -u app | editare configurație de sistem, instalare pachete |
|---|
| Operator backup | nominal sau de automatizare | NOPASSWD doar pentru /usr/local/bin/backup.sh | orice altă comandă |
|---|
| Contabil extern | nominal, limitat | NOPASSWD doar pentru scriptul de export | shell interactiv privilegiat |
|---|
| Aplicație web | de serviciu, nologin | niciunul | shell, sudo, SSH |
|---|
Comenzi și configurări
Cont nominal, grup pe rol și cont de serviciugroupadd dev && groupadd ops
useradd -m -G dev -s /bin/bash ion.popescu
# cheia lui Ion ajunge în /home/ion.popescu/.ssh/authorized_keys, nu parolă
# aplicația rulează sub cont de serviciu fără shell
useradd -r -s /usr/sbin/nologin -d /srv/app app
/etc/sudoers.d/10-dev: doar ce are nevoie rolul# journalctl și systemctl status deschid un pager care, rulat ca root, permite !sh —
# de aceea comenzile sunt fixate cu --no-pager și fără wildcard.
Cmnd_Alias APP_OPS = /usr/bin/systemctl --no-pager restart app.service, /usr/bin/systemctl --no-pager --full status app.service, /usr/bin/journalctl --no-pager -n 200 -u app.service
Defaults!APP_OPS env_reset, env_delete += "PAGER SYSTEMD_PAGER LESS LESSOPEN"
%dev ALL=(root) APP_OPS
# /etc/sudoers.d/20-backup
backup ALL=(root) NOPASSWD: /usr/local/bin/backup.sh
# /etc/sudoers.d/00-defaults
Defaults log_output, logfile=/var/log/sudo.log
# validare înainte de a închide sesiunea:
visudo -c
Offboarding în aceeași zi și auditul trimestrial# offboarding
usermod -L -e 1 vasile.rusu && pkill -u vasile.rusu
grep -rl 'vasile.rusu@' /home/*/.ssh/authorized_keys /root/.ssh/authorized_keys
# audit: conturi umane, grupuri, reguli sudo efective
awk -F: '$3>=1000 && $7!~/nologin|false/ {print $1}' /etc/passwd
for u in $(awk -F: '$3>=1000 && $7!~/nologin|false/ {print $1}' /etc/passwd); do echo "== $u"; id -nG "$u"; sudo -l -U "$u" | tail -n +2; done
Exemple din practică
Outsourcing din Chișinău, contul deploy folosit de toți
Nouă oameni știau parola contului deploy, care avea sudo ALL, iar un tabel șters în producție nu a putut fi atribuit nimănui. După conturi nominale și un fișier sudoers.d pe rol, incidentul următor a fost atribuit în două minute.
Retailer din Bălți, contabil extern
Contabilul avea sudo ALL ca să copieze exporturile pentru SFS. Acum are un cont limitat la o comandă, cu NOPASSWD pentru scriptul de export, iar jurnalul arată când a rulat.
Instituție din Comrat, conturi ale foștilor angajați
Un audit intern a găsit șapte conturi active ale unor persoane plecate de peste un an, două cu chei SSH valide. Offboarding-ul a fost formalizat, iar auditul trimestrial a intrat în calendarul responsabilului IT.
Greșeli frecvente
- Acorzi NOPASSWD: ALL „ca să meargă scripturile” și dai oricărui proces al persoanei root fără parolă.
- Permiți în sudoers wildcard-uri precum /usr/bin/vim *, prin care se editează orice fișier și se deschide un shell ca root.
- Dai aplicației un cont cu shell și parolă în loc de nologin și îi lași și sudo.
- Dezactivezi contul persoanei plecate, dar îi lași cheia SSH la alt cont sau peer-ul VPN activ.
- Editezi /etc/sudoers direct, fără visudo, și blochezi sudo pentru toți cu o virgulă lipsă.
Cum te ajută 4hosting
- Hardening & Compliance acoperă modelul de acces: conturi nominale, reguli sudo pe rol și procedura de offboarding, cu raport de anexat contractului cu clientul din UE.
- SIEM & Incident Response centralizează jurnalul sudo și alertează la comenzi privilegiate neobișnuite.
- Orele de CyberSecurity incluse (1–8 lunar la VPS, 10 la dedicate și GPU) acoperă auditul trimestrial al conturilor; le ceri din panoul de client; orele se consumă în luna calendaristică, fără reportare.
- Factură în euro, cu TVA-ul local defalcat; suport în engleză și română.
Întrebări conexe
Este acceptabil sudo ALL cu parolă pentru administratorii de sistem?
Da, pentru rolul de administrator, cu cont nominal, parolă cerută și log_output activat: administratorul chiar are nevoie de tot. Problema apare când toți primesc ALL fiindcă e mai simplu. Celelalte roluri primesc liste de comenzi.
Cum gestionez conturile pe douăzeci de servere fără să le editez pe fiecare?
Cu un instrument precum Ansible, care aplică aceeași listă de utilizatori, grupuri, chei și fișiere sudoers.d pe toate mașinile, dintr-un inventar versionat în Git. Offboarding-ul devine o ștergere și o rulare, iar auditul e diff-ul acelui fișier.