Essentials Pagina 4: Diferență între versiuni
Admin (discuție | contribuții) |
Admin (discuție | contribuții) |
||
Linia 203: | Linia 203: | ||
Unul dintre cele mai cunoscute exemple este executabilul passwd, care permite utilizatorilor să își schimbe parolele. Deoarece fișierele de parole sunt accesibile doar de către root, executabilul passwd trebuie să ruleze cu permisiunile de root pentru a modifica aceste fișiere. Prin setarea bitului setuid, orice utilizator poate rula passwd ca și cum ar avea permisiuni de root, permițându-le să își schimbe propriile parole.Comandă pentru setarea setuid:chmod u+s /path/to/file | Unul dintre cele mai cunoscute exemple este executabilul passwd, care permite utilizatorilor să își schimbe parolele. Deoarece fișierele de parole sunt accesibile doar de către root, executabilul passwd trebuie să ruleze cu permisiunile de root pentru a modifica aceste fișiere. Prin setarea bitului setuid, orice utilizator poate rula passwd ca și cum ar avea permisiuni de root, permițându-le să își schimbe propriile parole.Comandă pentru setarea setuid:chmod u+s /path/to/file | ||
'''Notă''' | |||
Chiar dacă un fișier script bash are bitul SUID setat și aparține utilizatorului root, scripturile shell nu vor rula cu privilegii de root atunci când sunt executate de un utilizator obișnuit. Acest comportament este o măsură de securitate implementată de sistemele Unix și Linux, deoarece rularea scripturilor shell cu SUID ar putea introduce riscuri majore de securitate. | |||
''De ce SUID nu funcționează pe scripturi shell'' | |||
Spre deosebire de fișierele executabile binare, scripturile shell ignoră bitul SUID. Sistemul de operare face acest lucru pentru a preveni posibile vulnerabilități, deoarece scripturile pot fi modificate sau exploatate cu ușurință pentru a executa comenzi neintenționate ca root. | |||
''Soluții pentru a executa scriptul cu permisiuni de root'' | |||
Pentru a rula acest script cu permisiuni de root, există câteva metode mai sigure: | |||
* Folosește sudo pentru a executa scriptul cu privilegii de root: | |||
Dacă ai acces sudo pentru utilizatorul care execută scriptul, îl poți rula astfel: | |||
sudo /path/to/script.sh | |||
Asigură-te că utilizatorul are permisiuni sudo și că acest script este permis în configurația sudoers. | |||
* Permite execuția unor comenzi specifice din script cu sudo fără parolă: | |||
Dacă dorești ca scriptul să poată fi rulat de un utilizator specific fără a necesita parolă pentru fiecare execuție, poți adăuga o regulă specifică în fișierul sudoers. Editează fișierul sudoers utilizând comanda: | |||
sudo visudo | |||
Adaugă o regulă similară, permițându-i utilizatorului glass să ruleze acest script fără parolă: | |||
<user> ALL=(ALL) NOPASSWD: /path/to/script.sh | |||
Astfel, utilizatorul '<user>' poate rula comanda: | |||
sudo /path/to/script.sh | |||
* Rulează scriptul din cron cu privilegiile root: | |||
Dacă acest script trebuie rulat regulat, îl poți adăuga într-un job cron sub utilizatorul root. Deschide fișierul de cron pentru root: | |||
sudo crontab -e | |||
Adaugă o linie pentru a rula scriptul la intervalul dorit: | |||
0 2 * * * /path/to/script.sh | |||
Oricare dintre metodele de mai sus îți va permite să rulezi scriptul cu permisiuni de root în siguranță, fără a depinde de bitul SUID. | |||
== Setgid (Set Group ID) bit == | == Setgid (Set Group ID) bit == |
Versiunea curentă din 1 noiembrie 2024 20:28
Laborator 4
Managementul utilizatorilor Drepturi si permisiuni pentru fisiere si directoare, atribute
Gestiunea utilizatorilor în Linux / Users and Groups
• Sistemul de operare recunoaște utilizatorii și grup urile după identificatori numerici • uid – user identifier - identificator unic al unui utilizator în sistemul de operare • gid – group identifier - identificator unic al unui grup în sistemul de operare
uso@elf:~$ id uid=1001(uso) gid=1009(courses) groups=1009(courses) uso@elf:~$ id -u 1001 uso@elf:~$ id rl uid=1000(rl) gid=1009(courses) groups=1009(courses) uso@elf:~$ finger mps Login: mps Name: Managementul Proiectelor Software Directory: /home/mps Shell: /bin/bash uso@elf:~$ groups pw pw: courses
Adăugare/ștergere utilizatori
• Necesită drepturi privilegiate
• useradd, userdel
root@valhalla:~# useradd -m -d /home/uso -s /bin/bash uso root@valhalla:~# passwd uso root@valhalla:~# userdel -r uso • adduser, deluser
root@valhalla:~# adduser uso Adding user `uso' ... Adding new group `uso' (1002) ... Adding new user `uso' (1002) with group `uso' ... Enter new UNIX password: Retype new UNIX password: root@valhalla:~# deluser --remove-home uso
Adăugare/ștergere grupuri
• groupadd, groupdel
• addgroup, delgroup
root@valhalla:~# addgroup test Adding group `test' (GID 1003) ... Done. root@valhalla:~# id uso uid=1002(uso) gid=1002(uso) groups=1002(uso) root@valhalla:~# adduser uso test Adding user `uso' to group `test' ... Adding user uso to group test Done. root@valhalla:~# id uso uid=1002(uso) gid=1002(uso) groups=1002(uso),1003(test) root@valhalla:~# deluser uso test
Modificarea proprietăților utilizatorilor
• usermod • rulat de root • modifică informații precum shell-ul de login, login name, home directory • passwd • schimbarea parolei utilizatorului current • passwd mihai • rulat de root, permite schimbarea parolei utilizatorului Mihai
Utilizatorii sunt definiti in fisierul /etc/passwd, iar parolele corespunzatoare fiecarui utilizator in fisierul /etc/shadow.
La crearea unui utilizator se creeaza automat si grupul cu numele lui. Grupurile si utilizatorii alocati acestor grupuri sunt definiti in fisierul /etc/group.
• se face cat sau more pe fisiere corespunzatoare, /etc/passwd si /etc/group pentru vizualizare
• exercitii de adaugare, modificare si stergere utilizatori, exercitii de introducere a unui utilizatro dintr-un grup – manual prin editarea fisierelor corespunzatoare si cu comanda in mod automat.
Gestiunea drepturilor si permisiunilor pentru fisiere în Linux
În Linux, spre deosebire de alte sisteme de operare, mai ales datorită faptului că este un sistem multiuser, vom întâlni un sistem special de administrare a drepturilor asupra fişierelor şi directoarelor preluat din Unix.
Tipuri de utilizatori Utilizatorii care pot accesa fişierele sau directoarele sunt împărţiţi pe trei categorii:
• owner - proprietarul, cel care a creat fişierul sau directorul • group - un membru al grupului din care face parte proprietarul • other - oricare alt utilizator, care nici nu deţine fişierul/directorul şi nici nu face parte din grupul proprietarului
Drepturi de acces pentru fişiere Sunt împarţite în trei categorii:
• r - (read) citire • w - (write) scriere • x - (execute) execuţie
Drepturi de acces pentru directoare Sunt împărţite tot în trei categorii, au aceeaşi simbolizare dar au altă semnificaţie
• r - (read) citire; semnifică dreptul de a vizualiza (lista) conţinutul directorului (comanda ls) • w - (write) scriere; permite adăugarea şi ştergerea de fişiere • x - (execute) execuţie; semnifică dreptul de a intra în director (comanda cd)
Vizualizarea şi interpretarea permisiunilor Se face cu ajutorul comenzii:
ls -l
Să vedem ce informaţii oferă outputul acestei comenzi şi cum se foloseşte ea. Dacă dorim să vedem permisiunile unui fişier folosim:
ls -l numefişier
Dacă dorim să listăm toate fişierele şi directoarele din alt director, să spunem test, dăm comanda în directorul respectiv
cd /calecătre/test ls -l
Să spunem că ceea ce am afişat mai jos este conţinutul directorului test şi să facem o analiză scurtă.
drwxrwxrwx 20 romikele romikele 1448 Jan 2 19:48 pclinuxos/ drwxrwxrwx 3 romikele romikele 72 May 6 2024 Music/ -rw-r--r-- 1 romikele romikele 185575 May 27 2024 Screenshot.png -rw-rw-r-- 1 romikele romikele 4879 Jun 20 2024 shrek-text.scm -rwxrwxrwx 1 romikele romikele 48970 Apr 23 2024 snapshot1.jpg* -rwxrwxrwx 1 romikele romikele 125602 Apr 23 2024 snapshot2.jpg* -rwxrwxrwx 1 romikele romikele 144053 May 7 2024 snapshot3.jpg*
Primul caracter poate fi - sau d. - denotă că avem de a face cu un fişier, iar d ne arată că este vorba despre un director. Deci în lista noastră primele două linii aparţin unor directoare iar celelalte cinci aparţin unor fişiere. Mai sunt şi alte caractere pentru alte tipuri de fişiere, cum ar fi: l (legături simbolice),p (pipe),s (socket) etc, dar ele nu fac obiectul acestui tutorial. Cele două nume sunt al proprietarului (owner) şi respectiv al grupului. Urmează data ultimei modificări şi apoi numele fişierului sau directorului. Următoarele nouă caractere dau permisiunile de acces. De ce sunt nouă? Foarte simplu. Aşa cum aţi citit mai sus, sunt trei categorii de utilizatori şi trei feluri în care poate fi accesat un fişier, rezultând deci nouă combinaţii posibile. Trei pentru owner, trei pentru group şi ultimele trei pentru others.
Acolo unde caracterul care simbolizează un drept este înlocuit cu -, înseamnă că respectiva permisiune nu este acordată. Cele două directoare au permisiuni activate pentru toţi utilizatorii sistemului: rwxrwxrwx. La fel şi ultimele trei fişiere. Asta înseamnă că orice utilizator poate să le modifice sau să le acceseze după bunul plac. Primele două fişiere vedem că au acordate numai anumite drepturi pe care le puteţi identifica cu uşurinţă.
Modificarea permisiunilor
Comanda cu care se face schimbarea permisiunilor este chmod. Aceasta are mai multe moduri în care poate fi apelată:
* Cu litere Într-un prim mod de utilizare se folosesc următoarele convenţii: u - proprietar , g -grup , o - others, a - toţi(all), - retrage drepturile şi + adaugă drepturile. Dacă pentru fişierul
-rw-r--r-- 1 romikele romikele 185575 May 27 2024 Screenshot.png
vrem să adăugăm drepturi de scriere (w) pentru grup folosim:
chmod g+w Screenshot.png
Rezultatul, dacă dăm:
ls -l
este:
-rw-rw-r-- 1 romikele romikele 185575 May 27 2024 Screenshot.png
Se observă apariţia dreptului de scriere pentru grup. Dacă vrem să dăm permisiuni de scriere şi citire (rw) pentru toţi utilizatorii, putem scrie: chmod a+rw Screenshot.png Rezultatul va fi:
-rw-rw-rw- 1 romikele romikele 185575 May 27 2024 Screenshot.png
Dacă vrem să retragem dreptul de scriere (w) putem scrie:
chmod a-rw Screenshot.png
* Cu cifre Un alt mod de utilizare este folosirea scrierii permisiunilor sub forma zecimală. Este mai puţin intuitiv dar odată înţeles este destul de uşor de aplicat şi mai flexibil decât modul prezentat anterior. Pentru fiecare tip de utilizator vom avea o valoare numerică ce va descrie toate cele trei permisiuni (rwx) şi care se obţine astfel: - Pentru fiecare drept se acordă 1 dacă el este dat şi 0 dacă el este revocat. Va rezulta astfel un număr binar format din trei cifre. Să luăm cazul în care avem 111, adică acordăm toate permisiunile. Îl transformăm apoi în zecimal sub forma:
1*4+1*2+1*1=7 unde 1,2 şi 4 sunt puterile lui 2 (2^0=1, 2^1=2, 2^2=4).
Dacă aveam o serie de drepturi de tipul -wx vom avea 0*4+1*2+1*1=3. Acesta cum spuneam este numai pentru un tip de utilizator. De exemplu pentru toate cele trei categorii, owner, group şi others , permisiunile rwxrwxrwx s-ar scrie după modelul de mai sus, luate trei câte trei 777. Atunci comanda ar fi sub forma:
chmod 777 Screenshot.png
care ar avea ca rezultat:
-rwxrwxrwx 1 romikele romikele 185575 May 27 2024 Screenshot.png
Ca o modalitate uşoară de memorare a acestei metode, trebuie să ştiţi să faceţi sume din 1, 2 şi 4, funcţie de drepturile pe care doriţi să le acordaţi.
Modificarea proprietarului
Modificarea proprietarului (owner) se face folosind comanda chown. Dacă, să spunem, fişierul dat în exemplele de mai sus şi care are ownerul romikele din grupul romikele vrem să îl trecem sub proprietatea lui corin din grupul romikele, folosim comanda:
chown corin.romikele Screenshot.png
rezultatul va fi:
-rwxrwxrwx 1 corin romikele 185575 May 27 2024 Screenshot.png
Dacă nu cunoaşteţi grupul userului puteţi să nu îl precizaţi. Observaţii Dacă vrem să aplicăm comanda chmod pentru toate fişierele dintr-un director, folosim opţiunea -R recursive. Dacă vrem să dăm drepturi depline tuturor asupra fişierelor din directorul pclinuxos din lista de mai sus putem folosi:
chmod -R a+rwx pclinuxos
sau:
chmod -R 777 pclinuxos
Sticky bit
Sticky bit este o permisiune speciala pe sistemele de operare Unix-like, folosit pentru a controla accesul la fișiere și directoare într-un mediu partajat. Atunci când sticky bit este setat pe un director, el impune o restricție ca fișierele din acel director să poată fi șterse sau redenumite doar de proprietarul fișierului, proprietarul directorului, sau de utilizatorul root. Aceasta previne ștergerea sau modificarea accidentală a fișierelor și directoarelor de către utilizatorii care nu au drepturile necesare.
Exemplu:
Un exemplu comun în care sticky bit este folosit este directorul /tmp. În sistemele Unix și Linux, /tmp este un director unde toate programele pot scrie date temporare. Pentru a evita ca un utilizator să șteargă sau să modifice fișierele temporare ale altui utilizator, sticky bit este setat pe acest director.Puteți verifica dacă sticky bit este setat pe un director folosind comanda ls -ld. De exemplu:
ls -ld /tmp
Rezultatul ar putea arăta astfel:
drwxrwxrwt 9 root root 4096 Oct 7 10:00 /tmp
Aici, litera t la sfârșitul listei de permisiuni indică faptul că sticky bit este setat. Setarea sticky bit:Pentru a seta sticky bit pe un director, puteți folosi comanda chmod cu opțiunea +t. De exemplu, pentru a seta sticky bit pe un director numit example_dir, ați folosi:
chmod +t example_dir
Pentru a elimina sticky bit, folosiți -t:
chmod -t example_dir
Sumar: Sticky bit este folositor în medii unde multiple persoane sau programe au acces la același director și este necesar să se protejeze integritatea datelor individuale prin restricționarea drepturilor de ștergere și redenumire a fișierelor. Aceasta contribuie la menținerea unui mediu de sistem de fișiere ordonat și sigur pentru toți utilizatorii.
Pe lângă sticky bit, în sistemele Unix-like există alte două tipuri de permisiuni speciale cunoscute sub numele de "bit setuid" și "bit setgid". Aceste permisiuni speciale sunt folosite pentru a controla modul în care programele execută și accesează resursele sistemului de operare.
Setuid (Set User ID) bit
Când bitul setuid este setat pe un fișier executabil, procesul care rulează fișierul executabil va avea permisiunile asociate cu proprietarul fișierului, nu cu utilizatorul care îl execută. Acest lucru este util pentru programele care necesită acces la resursele sistemului care sunt altfel inaccesibile utilizatorilor obișnuiți.
Exemplu de utilizare:
Unul dintre cele mai cunoscute exemple este executabilul passwd, care permite utilizatorilor să își schimbe parolele. Deoarece fișierele de parole sunt accesibile doar de către root, executabilul passwd trebuie să ruleze cu permisiunile de root pentru a modifica aceste fișiere. Prin setarea bitului setuid, orice utilizator poate rula passwd ca și cum ar avea permisiuni de root, permițându-le să își schimbe propriile parole.Comandă pentru setarea setuid:chmod u+s /path/to/file
Notă
Chiar dacă un fișier script bash are bitul SUID setat și aparține utilizatorului root, scripturile shell nu vor rula cu privilegii de root atunci când sunt executate de un utilizator obișnuit. Acest comportament este o măsură de securitate implementată de sistemele Unix și Linux, deoarece rularea scripturilor shell cu SUID ar putea introduce riscuri majore de securitate.
De ce SUID nu funcționează pe scripturi shell
Spre deosebire de fișierele executabile binare, scripturile shell ignoră bitul SUID. Sistemul de operare face acest lucru pentru a preveni posibile vulnerabilități, deoarece scripturile pot fi modificate sau exploatate cu ușurință pentru a executa comenzi neintenționate ca root.
Soluții pentru a executa scriptul cu permisiuni de root
Pentru a rula acest script cu permisiuni de root, există câteva metode mai sigure:
- Folosește sudo pentru a executa scriptul cu privilegii de root:
Dacă ai acces sudo pentru utilizatorul care execută scriptul, îl poți rula astfel:
sudo /path/to/script.sh
Asigură-te că utilizatorul are permisiuni sudo și că acest script este permis în configurația sudoers.
- Permite execuția unor comenzi specifice din script cu sudo fără parolă:
Dacă dorești ca scriptul să poată fi rulat de un utilizator specific fără a necesita parolă pentru fiecare execuție, poți adăuga o regulă specifică în fișierul sudoers. Editează fișierul sudoers utilizând comanda:
sudo visudo
Adaugă o regulă similară, permițându-i utilizatorului glass să ruleze acest script fără parolă:
<user> ALL=(ALL) NOPASSWD: /path/to/script.sh
Astfel, utilizatorul '<user>' poate rula comanda:
sudo /path/to/script.sh
- Rulează scriptul din cron cu privilegiile root:
Dacă acest script trebuie rulat regulat, îl poți adăuga într-un job cron sub utilizatorul root. Deschide fișierul de cron pentru root:
sudo crontab -e
Adaugă o linie pentru a rula scriptul la intervalul dorit:
0 2 * * * /path/to/script.sh
Oricare dintre metodele de mai sus îți va permite să rulezi scriptul cu permisiuni de root în siguranță, fără a depinde de bitul SUID.
Setgid (Set Group ID) bit
Similar cu setuid, când bitul setgid este setat pe un director, fișierele nou-create în acel director vor avea grupul setat la grupul directorului, nu la grupul implicit al utilizatorului care a creat fișierul. Setat pe un fișier executabil, va face ca executabilul să ruleze cu permisiunile grupului fișierului.
Exemplu de utilizare: Dacă aveți un director unde membrii unui grup trebuie să colaboreze pe fișiere, setgid poate fi folosit pentru a menține toate fișierele nou-create în acel director cu grupul directorului, astfel încât toți membrii să aibă acces la acestea.
Comandă pentru setarea setgid:
chmod g+s /path/to/directory
Verificare Puteți verifica setările de setuid și setgid folosind ls -l. Bitul setuid este indicat prin s sau S în locul bitului de execuție în permisiunile proprietarului, iar setgid este indicat prin s sau S în locul bitului de execuție în permisiunile grupului. Aceste permisiuni speciale sunt puternice și trebuie folosite cu prudență, deoarece pot introduce riscuri de securitate dacă nu sunt gestionate corespunzător.
Comanda lsattr este folosită pentru a afișa atributele unui fișier în sistemul de fișiere Linux, iar comanda chattr este folosită pentru a modifica aceste atribute. Iată câteva dintre atributele disponibile și semnificațiile lor:
1. i (immutable): Împiedică modificarea, ștergerea sau redenumirea fișierului. 2. a (append-only): Permite doar adăugarea de date la fișier, dar nu și modificarea sau ștergerea conținutului existent. 3. A (no-atime): Împiedică actualizarea timestamp-ului de acces al fișierului atunci când este citit. 4. d (no-dump): Împiedică fișierul să fie inclus în operațiile de backup cu dump. 5. s (secure deletion): Împiedică ștergerea sigură a fișierului. 6. S (synchronous directory updates): Forcează actualizarea imediată a directorului atunci când fișierul este modificat. 7. u (undeletable): Împiedică ștergerea fișierului, dar permite suprascrierea acestuia cu date noi. 8. C (compressed): Indică că fișierul este comprimat la nivelul sistemului de fișiere. 9. E (extent format): Indică că fișierul utilizează formatul de extensii în sistemul de fișiere ext4. 10. I (inline data): Indică că datele fișierului sunt stocate direct în inode.
Acestea sunt câteva dintre atributele comune utilizate cu lsattr și chattr în sistemele de fișiere Linux.
Notă: Nu toate aceste atribute sunt suportate de toate sistemele de fișiere, iar unele atribute pot avea efecte diferite în funcție de sistemul de fișiere utilizat.