SUID și SGID în Linux explicate cu exemple
On octombrie 1, 2021 by adminImaginați-vă o situație în care aveți un script sau un fișier executabil care trebuie să fie rulat întotdeauna de un anumit utilizator, pur și simplu pentru că acel utilizator are drepturi de acces adecvate pentru acțiunile întreprinse de script. De asemenea, doriți ca și alți utilizatori să poată executa acel script, dar, în cele din urmă, acesta trebuie să fie rulat ca utilizator original al scriptului (deoarece acel utilizator are doar seturile de permisiuni necesare pentru acțiunile întreprinse).
În mod implicit, aplicațiile și programele Linux rulează cu aceleași permisiuni exacte ale utilizatorului care le execută. Din acest motiv, avem nevoie de o soluție bună pentru situația menționată mai sus (adică: toți utilizatorii ar trebui să poată executa un program deținut de un anumit utilizator ca și cum proprietarul însuși l-ar fi executat).
Aici intervine SUID. SUID nu este altceva decât un bit special de permisiune disponibil în Linux, care realizează acest lucru cu multă ușurință.
Dacă sunteți proprietarul unui fișier executabil, cu ajutorul setului de permisiuni SUID, ceilalți utilizatori vor rula executabilul cu permisiunea dumneavoastră și nu a lor.
SUID este utilizat în mod normal în Linux, pentru a oferi privilegii ridicate temporar în timpul execuției. Această ridicare a privilegiilor nu este deloc permanentă. Este o ridicare temporară doar atunci când programul/scriptul este în curs de execuție.
Exemple de fișiere executabile în Linux care au bitul de permisiune SUID setat
Să înțelegem acest lucru prin luarea în considerare a unui exemplu. Din lista de executabile de mai sus,/usr/bin/passwd este ceva ce ar trebui să fie executabil de către toți utilizatorii din sistem(acest lucru se datorează faptului că toți utilizatorii ar trebui să fie capabili să își schimbe propria parolă). Dacă nu știți cum funcționează parolele în linux, vă recomand să citiți articolul de mai jos.
Citește: Cum funcționează parolele în Linux
Actualizarea parolei unui utilizator necesită ca utilizatorul să editeze fișierul /etc/passwd, /etc/shadow în linux. Totuși, acest lucru este permis numai pentru utilizatorul root. Acesta este motivul pentru care bitul SUID este aplicat pe fișierul /usr/bin/passwd. Deoarece root este proprietarul acestui fișier, iar SUID fiind setat pe acest fișier, orice utilizator care execută comanda /usr/bin/passwd o va executa ca utilizator root. Să vedem acest lucru în mod practic.
Mai jos este prezentată comanda passwd executată de utilizatorul numit sarath. Să vedem dacă acest proces de comandă passwd este executat ca utilizator root.
$ passwdChanging password for user sarath.Changing password for sarath.(current) UNIX password:
Să deschidem un alt terminal și să pornim ps aux commad și să vedem dacă procesul de comandă passwd este executat cu utilizator root. Acest lucru se poate face așa cum se arată mai jos.
$ ps aux | grep passwdroot 24531 0.0 0.0 156928 1664 pts/0 S+ 07:24 0:00 passwd
Puteți vedea clar că procesul de comandă passwd rulează cu utilizatorul root (vizibil din primul câmp al ieșirii de mai sus.). Similar comenzii passwd, orice comandă din lista de fișiere aplicate SUID prezentată anterior, va fi întotdeauna executată cu permisiunea proprietarului fișierului, indiferent de utilizatorul care o execută.
Rețineți, de asemenea, faptul că până și comanda ping este SUID (a se vedea lista inițială dată mai sus), acest lucru se datorează faptului că execuția PING necesită mai multe operații de rețea, care pot fi executate numai de către root.
Cum se configurează SUID în Linux?
Configurarea SUID pe fișierele/scriptul dvs. necesar este la o singură comandă CHMOD distanță.
$ chmod u+s /path/to/file/or/executable
Înlocuiți „/path/to/file/or/executable”, în comanda de mai sus, cu calea absolută a scriptului pe care aveți nevoie de SUID bit. Acest lucru poate fi realizat și prin utilizarea metodei numerice a chmod.
$ chmod 4755 /path/to/file/or/executable
Primul „4” din „4755” indică SUID. Un alt exemplu de metodă numerică este prezentat mai jos.
$ chmod 4750 /path/to/file/or/executable
În principiu, în metoda numerică, pur și simplu se adaugă 4 la celelalte seturi de permisiuni de care este nevoie în fișierul respectiv.
Cum se verifică dacă SUID este sau nu aplicat pe un fișier?
Puteți verifica dacă bitul SUID este sau nu aplicat pe un fișier folosind comanda ls, așa cum se arată mai jos.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
comandals -l ar trebui să vă arate dacă SUID este aplicat sau nu. Pur și simplu uitați-vă la primul câmp al ieșirii ls -l. S din -rwsr-xr-x indică bitul SUID. În unele cazuri, veți vedea un S mare în loc de un s mic pe care l-am văzut mai sus. S majusculă indică faptul că nu există nici o permisiune executabilă aplicată acelui fișier/script.
root@ip-10-12-2-217:/usr/bin# chmod -x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwSr--r-- 1 root root 47032 Jul 15 2015 passwd
Vezi clar din ieșirea de mai sus că, eliminarea permisiunii executabile din fișierul /usr/bin/passwd a transformat ieșirea lui ls -l în S majusculă. Adăugarea permisiunii executabile înapoi pe acel fișier va face ca acesta să aibă un s mic, așa cum se arată mai jos.
root@ip-10-12-2-217:/usr/bin# chmod +x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
Cum găsiți toate fișierele care au bitul SUID activat în Linux?
Puteți utiliza comanda find de mai jos pentru a căuta toate fișierele din sistem care au bitul SUID activat. Dacă sunteți nou în ceea ce privește comanda find, vă recomand să citiți articolul de mai jos.
Citește: Comanda find în Linux cu exemple
root@ip-10-12-2-217:~# find / -perm -4000 -exec ls -l {} \;
Înlocuiți primul / din comanda de mai sus cu locația necesară pentru a găsi toate fișierele SUID din acea locație. De exemplu, pentru a găsi toate fișierele cu SUID în interiorul /usr/bin, rulați comanda de mai jos.
Vă rugăm să rețineți faptul că bitul SUID este ignorat pe directoare în Linux.
SGID este foarte asemănător cu SUID. Singura diferență este că scriptul/fișierul care are configurat SGID, va rula cu aceeași permisiune a proprietarului grupului.
Dacă configurați SGID pe directorii, toate fișierele sau directoarele create în interiorul acelui director vor fi deținute de același grup comun (grupul proprietar al directorului în care este configurat SGID).
Exemple de fișiere SGID în linux
Cum se configurează SGID în Linux?
Similar cu SUID, SGID poate fi configurat folosind comanda chmod, așa cum se arată mai jos.
root@localhost:~# chmod g+s /path/to/file
Înlocuiți „/path/to/file”, în comanda de mai sus, cu calea absolută a scriptului pe care aveți nevoie de SGID bit. Acest lucru poate fi realizat și prin utilizarea metodei numerice a chmod (prezentată mai jos).
root@localhost:~# chmod 2755 /path/to/file
Cum se poate verifica dacă SGID este aplicat pe un fișier sau script?
Similar cu SUID, puteți executa cu ușurință comanda ls -l pe un fișier/directorat pentru a afla dacă SGID este activat sau nu. Exemplul prezentat mai jos arată același lucru.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Partea mică a s din primul câmp din ieșirea about (-rwxr-sr-x) indică bitul SGID. Similar cu SUID, dacă nu aveți permisiunea executabilă aplicată pe grup, acesta va fi S mare în loc de S mic, așa cum se arată mai jos.
root@ip-10-12-2-217:/usr/bin# chmod g-x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-Sr-x 1 root shadow 54968 Jul 15 2015 chage
Și activarea permisiunii executabile pe grup, va face ca acesta să fie s mic (se arată mai jos.)
root@ip-10-12-2-217:/usr/bin# chmod g+x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Lasă un răspuns