În afara permisiunilor obișnuite din Linux pe care le-am descris într-un articol anterior, există și posibilitatea ca, prin intermediul unui singur bit, să stabilim niște permisiuni speciale pentru fișiere și directoare.
Aceste permisiuni speciale sunt:
Set User ID (SUID)
Opțiunea SUID este folosită pentru fișierele executabile. Ea îi spune sistemului Linux să ruleze programul respectiv cu permisiunile celui care deține fișierul (proprietarul), nu ale celui care îl execută.
De exemplu, dacă un fișier este deținut de superutilizator (root) și are setat bitul SUID, programul va rula cu privilegii de root și, prin urmare, poate accesa orice fișier de pe computer - acest aspect poate reprezenta o foarte gravă problemă de securitate!
Programele (fișierele executabile) care au bitul SUID setat sunt indicate printr-un s în poziția de execuție din grupul de permisiuni corespunzătoare proprietarului (folosiți comanda ls -l):
rwsr-xr-x
Să presupunem că avem setat bitul SUID la comanda rm
(fișierul se află în /bin) - asta înseamnă că oricine (orice utilizator) poate rula comanda rm cu drepturi de administrator și poate șterge orice fișier din sistem.
În cazul în care fișierul respectiv nu are drepturi de execuție pentru proprietar (owner), dar are totuși setat bitul SUID, această permisiune (deși nu va funcționa) va apărea în lista de permisiuni cu un S:
-rwSr-xr-x
Set Group ID (SGID)
Opțiunea SGID este similară lui SUID, dar este setată pentru poziția de execuție din setul de permisiuni pentru grup. Se notează cu s dacă fișierul sau directorul are drept de execuție pentru grup și cu S dacă fișierul sau directorul nu are drept de execuție pentru grup (în ultimul caz setarea acestui bit nu-și va face efectul):
-rwxr-sr-x
drwxr-Sr-x
SGID are efecte diferite, în funcție de tipul de fișier căruia i se aplică:
- dacă i se aplică unui fișier executabil obișnuit, acesta va rula cu drepturile grupului care deține fișierul și nu cu grupul primar al utilizatorului care îl execută;
- dacă i se aplică unui director, fișierele și subdirectoarele nou create în acest director (care are - reamintesc - setat bitul SGID), vor moșteni permisiunile grupului proprietarului directorului și nu pe ale utilizatorului care le creează.
Această permisiune specială este folosită în special pentru directoare, mai ales pentru crearea directoarelor shared.
Sticky bit
Bitul sticky este folosit pentru a proteja de la ștergere fișierele unui director în care au acces mai mulți utilizatori (cum ar fi /tmp) de către cei care nu le dețin. Când acest bit este prezent la un director, fișierele din interiorul său pot fi șterse numai de proprietar (cel care le-a creat) sau de administrator (root).
Bitul sticky este marcat cu ajutorul literei t pe poziția dreptului de execuție pentru alții (other):
drwxrwxrwt
În cazul în care directorul respectiv nu are drept de execuție pentru other, dar are totuși setat bitul sticky, acesta va apărea marcat cu litera T.
Dacă intrați în directorul rădăcină al instalării voastre Linux - / - și dați comanda ls -l, veți observa directorul /tmp cu bitul sticky setat.
Cum se alocă SUID, SGID și bitul sticky
În mod normal, permisiunile obișnuite se alocă cu 3 digiți în baza 8 (așa cum am descris în prima parte a articolului despre permisiuni).
Permisiunile SUID, SGID și sticky bit corespund următorilor biți:
1 - permisiune sticky bit
2 - SGID
4 - SUID
Următoarea comandă alocă permisiunea 644 unui fișier:
chmod 644 fișier
Linux tratează pe 644 ca fiind, de fapt, 0644. În cazul în care utilizăm 4 digiți, Linux va considera că vrem să alocăm permisiuni speciale. Să presupunem că vrem să alocăm următoarele permisiuni speciale (se va face suma biților prezentați mai sus pentru permisiunile speciale):
- ambele permisiuni SUID și SGID - vom folosi al patrulea digit (cel din față) 6
- toate cele 3 permisiuni speciale (SUID, SGID și sticky bit) - vom folosi al patrulea digit 7
- doar SUID și sticky bit - vom folosi al patrulea digit 5
În imaginea de mai jos am setat toate cele 3 permisiuni speciale fișierului test cu 7644; după cum se observă, inițial fișierul test nu era executabil (din această cauză întâlnim literele mari S și T) - după ce-l facem executabil, va apărea astfel:
Într-un articol viitor voi prezenta modul de alocare a permisiunilor prin coduri și nu prin 3 sau 4 digiți în baza 8.
Catalin a zis
Inca un articol bun. Chiar daca ai folosit foarte bine expresia "fișierele executabile", pentru a inlatura orice suspiciune, eu as mai fi adaugat si faptul ca permisiunile speciale nu au efect asupra programelor interpretate (Ex.: scripturi shell, python etc.)
Bobses a zis
Bună completare. 🙂