Acasă › Blog › Cum gestionați permisiunile avansate cu chmod și chown
Cum gestionați permisiunile avansate cu chmod și chown
16 august 2025 · Dorel Tănase, specialist în servicii SEO din 2007 · Linux
Cum gestionați permisiunile avansate cu chmod și chown decide dacă un site rulează sau dă eroare 403, dacă un script de copii de siguranță poate scrie în dosarul lui și dacă un utilizator compromis poate atinge fișierele altuia. Jumătate dintre problemele de „nu merge după migrare” pe care le vedem la clienți sunt permisiuni, nu cod.
Ghidul pornește de la ce înseamnă rândul afișat de ls -l, trece prin cele două comenzi, apoi prin biții speciali, umask și listele de control al accesului, cu exemple din administrarea serverelor web.
Cum gestionați permisiunile avansate cu chmod și chown
Fiecare fișier și dosar din Linux are un proprietar, un grup și trei seturi de permisiuni: pentru proprietar, pentru grup și pentru toți ceilalți. Fiecare set are trei drepturi: citire (r), scriere (w) și executare (x). Comanda ls -l le afișează astfel:
-rw-r--r-- 1 goai goai 4096 sep 3 10:15 index.php
drwxr-xr-x 5 goai goai 4096 sep 3 10:15 imagini
Primul caracter spune tipul (- fișier, d dosar, l legătură simbolică). Urmează cele trei triplete: rw- pentru proprietar, r-- pentru grup, r-- pentru ceilalți. Apoi numărul de legături, proprietarul, grupul, dimensiunea și data.
Pe dosare, drepturile au alt înțeles decât pe fișiere: r permite listarea conținutului, w permite crearea și ștergerea de fișiere în dosar, iar x permite intrarea în dosar și accesul la fișierele din el. Un dosar cu r dar fără x se poate lista, dar fișierele din el nu se pot deschide.
chmod cu cifre
Fiecare drept are o valoare: r = 4, w = 2, x = 1. Suma pentru fiecare triplet dă o cifră de la 0 la 7, iar cele trei cifre formează modul numeric:
- 644: proprietarul citește și scrie, restul doar citesc. Standardul pentru fișierele unui site.
- 755: proprietarul are toate drepturile, restul citesc și intră. Standardul pentru dosare și pentru scripturi executabile.
- 600 și 700: doar proprietarul. Potrivite pentru fișiere de configurare cu parole și pentru cheile SSH.
- 664 și 775: grupul poate scrie. Utile când mai mulți utilizatori din același grup lucrează în același dosar.
chmod 644 wp-config.php
chmod 755 public_html
chmod 600 ~/.ssh/id_ed25519
chmod cu litere
Sintaxa simbolică schimbă doar ce specificați, fără să atingă restul. Se compun trei elemente: cine (u proprietar, g grup, o ceilalți, a toți), operatorul (+ adaugă, - scoate, = setează exact) și dreptul (r, w, x).
chmod u+x deploy.sh # proprietarul poate executa scriptul
chmod go-w config.ini # grupul și ceilalți pierd scrierea
chmod o= secret.txt # ceilalți nu mai au niciun drept
chmod a+r raport.pdf # toată lumea poate citi
Forma simbolică este mai sigură în scripturi, fiindcă nu suprascrie din greșeală drepturi pe care nu le-ați văzut, de exemplu bitul de executare pe un dosar.
Recursiv, dar cu discernământ
Opțiunea -R aplică schimbarea în tot arborele. Greșeala clasică este chmod -R 755 pe un site întreg: dosarele rămân corecte, dar toate fișierele devin executabile, ceea ce unele servere refuză. Corect este să tratați separat fișierele și dosarele, cu find:
find public_html -type d -exec chmod 755 {} +
find public_html -type f -exec chmod 644 {} +
Alternativa este litera X (mare) în sintaxa simbolică: chmod -R a+X adaugă executarea doar pe dosare și pe fișierele care erau deja executabile.
chown: proprietar și grup
chown schimbă proprietarul, grupul sau ambele. Doar root poate schimba proprietarul; un utilizator obișnuit poate schimba grupul unui fișier propriu doar spre un grup din care face parte.
sudo chown goai fisier.txt # doar proprietarul
sudo chown goai:goai fisier.txt # proprietar și grup
sudo chown :www-data incarcari # doar grupul
sudo chown -R goai:goai /home/goai/public_html
Pe serverele web, regula pe care o aplicăm este: fișierele site-ului aparțin utilizatorului contului, nu utilizatorului sub care rulează serverul web. Dacă PHP rulează ca utilizatorul contului (cum se întâmplă în cPanel și în configurațiile cu PHP-FPM pe utilizator), site-ul poate scrie în dosarele de încărcare fără permisiuni largi. Dacă PHP rulează ca www-data, dați scriere doar pe dosarele care chiar au nevoie (încărcări, cache), prin grup, nu prin 777.
O capcană frecventă la transferuri: rsync sau tar rulate ca root păstrează proprietarul de pe serverul vechi, care pe serverul nou poate să nu existe sau să aibă alt id numeric. Rezultatul e un site întreg cu proprietar necunoscut și erori de permisiuni la fiecare cerere. Un chown -R spre utilizatorul corect, imediat după transfer, rezolvă.
Biții speciali: setuid, setgid și sticky
A patra cifră, pusă înaintea celor trei, activează comportamente speciale:
- setuid (4): un program executabil rulează cu drepturile proprietarului, nu ale celui care îl lansează. Așa funcționează passwd, care trebuie să scrie în fișiere ale lui root. Pe fișierele unui site nu are ce căuta.
- setgid (2): pe un dosar, fișierele noi moștenesc grupul dosarului, nu grupul celui care le creează. Este mecanismul corect pentru dosare partajate între utilizatori: chmod 2775 proiect.
- sticky bit (1): pe un dosar, fiecare utilizator poate șterge doar fișierele proprii, chiar dacă are scriere pe dosar. Este setat pe /tmp (1777) exact din acest motiv.
chmod 2775 /var/www/partajat # setgid pe dosar
chmod 1777 /var/tmp/incarcari # sticky bit
ls -ld /var/www/partajat # drwxrwsr-x, s în locul lui x la grup
Litera s sau t în locul lui x în listare arată că bitul este activ. Un s mare (S) înseamnă că bitul e setat, dar fără drept de executare dedesubt, de obicei o greșeală.
umask: permisiunile implicite
umask decide ce drepturi primesc fișierele noi. Valoarea se scade din 666 pentru fișiere și din 777 pentru dosare. Cu umask 022 (implicită pe majoritatea distribuțiilor), fișierele noi au 644 și dosarele 755. Cu 077, doar proprietarul are acces la tot ce creează. Valoarea se vede cu comanda umask și se setează în fișierul de profil al utilizatorului sau în configurarea serviciului (de exemplu, în unitatea systemd a unui proces care scrie fișiere).
Un simptom tipic de umask greșit: fișierele încărcate prin FTP au 600 și nu se afișează pe site, deși dosarul e 755. Corectarea umask-ului serverului FTP elimină problema pentru fișierele viitoare; pentru cele existente, rulați comanda find de mai sus.
ACL: când trei triplete nu ajung
Listele de control al accesului permit drepturi pentru mai mulți utilizatori sau grupuri pe același fișier. Se folosesc cu setfacl și getfacl; pachetul acl este preinstalat pe Ubuntu și AlmaLinux, iar sistemele de fișiere ext4 și xfs le acceptă implicit.
setfacl -m u:redactie:rwx /home/goai/public_html/articole
setfacl -d -m u:redactie:rwx /home/goai/public_html/articole # și pentru fișierele viitoare
getfacl /home/goai/public_html/articole
setfacl -b /home/goai/public_html/articole # scoate toate ACL-urile
Un semn + la finalul rândului din ls -l arată că fișierul are ACL. Atenție la interacțiunea cu chmod: comanda chmod pe grup modifică „masca” ACL și poate reduce drepturile acordate prin ACL fără să pară. După orice chmod pe un dosar cu ACL, verificați cu getfacl.
Copierea permisiunilor de pe un model
Ambele comenzi acceptă opțiunea --reference, care ia permisiunile sau proprietarul de pe un alt fișier. Este utilă după ce ați reparat manual un fișier și vreți să aplicați aceleași drepturi pe altele, fără să calculați cifrele:
chmod --reference=index.php contact.php
chown --reference=public_html public_html/nou
Pentru un inventar rapid al permisiunilor dintr-un site, comanda stat afișează modul numeric și proprietarul într-un format ușor de filtrat. Cele două comenzi de mai jos listează fișierele care nu au 644 și dosarele care nu au 755, adică exact abaterile de la standard:
find public_html -type f ! -perm 644 -exec stat -c '%a %U:%G %n' {} +
find public_html -type d ! -perm 755 -exec stat -c '%a %U:%G %n' {} +
find public_html -perm -o+w # orice poate scrie oricine
A treia comandă este cea pe care o rulăm prima la un site cu probleme de securitate: orice fișier sau dosar în care „ceilalți” au drept de scriere este un punct de intrare. Pe un site curat, lista trebuie să fie goală.
Verificare înainte de a modifica
Înainte de un chmod sau chown recursiv pe un site în producție, faceți trei lucruri: salvați starea curentă, ca să o puteți reface; rulați comanda întâi pe un subdosar mic; și verificați site-ul în browser imediat după. Starea se salvează cu getfacl, care înregistrează și permisiunile clasice, nu doar ACL-urile, și se restaurează cu setfacl:
getfacl -R public_html > permisiuni-inainte.txt
setfacl --restore=permisiuni-inainte.txt
Un fișier de câteva sute de kilobytes vă scutește de o restaurare din copia de siguranță atunci când o comandă greșită a schimbat proprietarul pe zeci de mii de fișiere.
Greșeli pe care le vedem des
- chmod 777 „ca să meargă”: oricine de pe server poate scrie fișierul, inclusiv un script compromis din alt cont. Pe găzduirile partajate, este modul cel mai rapid de a fi infectat.
- Fișiere de configurare lizibile de toți: wp-config.php sau .env cu 644 pe un server cu mai mulți utilizatori expun parola bazei de date. Folosiți 600 sau 640 cu grupul serverului web.
- Dosare fără x: 644 pe un dosar face imposibilă intrarea în el, deși listarea merge; site-ul dă 403 pe tot ce e înăuntru.
- Scripturi fără x după transfer prin FTP: cron-ul raportează Permission denied. chmod u+x pe script.
- chown recursiv pe / sau pe /home din greșeală: schimbați proprietarul întregului sistem și, de obicei, singura reparație e reinstalarea. Verificați calea de două ori și evitați variabilele goale în scripturi.
Pentru fișierele unui site administrat prin panou, File Manager din cPanel permite schimbarea permisiunilor cu clic dreapta, Change Permissions, cu aceleași valori numerice. Regulile pentru conturi cu drepturi limitate le descriem în articolul despre crearea unui utilizator cu acces limitat, iar rolurile din interiorul unei aplicații, care nu au legătură cu permisiunile de fișiere, în ghidul despre rolurile și permisiunile din WordPress.
Pentru transferuri între servere, care păstrează sau strică proprietarii în funcție de opțiuni, vedeți ghidul comenzilor rsync; pentru sarcinile programate care au nevoie de scriere în dosare precise, cronurile avansate din cPanel; iar pentru un context mai larg despre întărirea unui server, SELinux, care adaugă un strat de control peste permisiunile clasice.
Surse
- Manualul GNU coreutils, chmod: sintaxa completă, biții speciali și opțiunea X.
- Documentația Ubuntu Server: administrarea utilizatorilor, grupurilor și a permisiunilor pe server.
Cum a fost realizat acest articol
- Autor
- Dorel Tănase
- Publicat
- 16 august 2025
- Ultima actualizare
- 9 septembrie 2026
- Surse
Lucrăm după principiile noastre de publicare, politica pentru corectare, politica pentru etică.

