Skip to main content

Cyber AI România

Fișiere, permisiuni și procese în Linux: baza pentru analiză și administrare sigură

În Linux, o investigație de securitate începe frecvent cu trei întrebări: ce fișier s-a modificat, cine are acces la el și ce proces îl folosește. Dacă nu poți interpreta corect rezultatul comenzilor ls, stat, chmod, ps sau systemctl, riști fie să ratezi o problemă, fie să strici permisiunile unui sistem funcțional.

Comenzile din acest ghid pot fi testate pe Ubuntu, Debian, Kali și majoritatea distribuțiilor Linux. Pentru exerciții, folosește contul obișnuit, nu o sesiune permanentă de root.

Creează un laborator fără să atingi fișierele sistemului

Deschide terminalul și creează un director separat:

mkdir -p ~/linux-cyber-lab/{public,private,logs}
cd ~/linux-cyber-lab

echo "informatii publice" > public/readme.txt
echo "date interne" > private/clienti.txt
echo "2026-07-20 login successful" > logs/auth-demo.log

Verifică structura:

find ~/linux-cyber-lab -maxdepth 2 -type f -print

Ar trebui să vezi cele trei fișiere create.

Află utilizatorul și grupurile contului curent:

whoami
id

Comanda id afișează identificatorul utilizatorului, grupul principal și grupurile suplimentare din care face parte contul. Aceste informații sunt importante deoarece accesul la fișiere poate fi acordat proprietarului, grupului sau tuturor celorlalți utilizatori.

Citește corect permisiunile unui fișier

Rulează:

ls -l private/clienti.txt

Un rezultat posibil este:

-rw-r--r-- 1 alex alex 13 Jul 20 14:10 clienti.txt

Prima parte se interpretează astfel:

-    rw-    r--    r--
tip  owner  group  others

Caracterul inițial arată tipul obiectului:

-  fișier obișnuit
d  director
l  legătură simbolică

Următoarele nouă caractere sunt împărțite în trei grupuri:

r = read, citire
w = write, modificare
x = execute, executare

În exemplul anterior, proprietarul poate citi și modifica fișierul, iar membrii grupului și ceilalți utilizatori îl pot doar citi. ls -l afișează inclusiv tipul, permisiunile, proprietarul și grupul fișierului.

Pentru informații mai exacte folosește:

stat private/clienti.txt

stat afișează permisiunile în format simbolic și numeric, proprietarul, grupul, dimensiunea și momentele asociate fișierului.

Permisiunile directoarelor nu înseamnă exact același lucru

Pentru un director:

  • r permite listarea numelor din director;
  • w permite crearea, ștergerea sau redenumirea intrărilor;
  • x permite traversarea directorului și accesarea elementelor din interior.

Un director poate avea permisiunea de citire, dar fără x utilizatorul nu poate accesa normal fișierele din el.

Verifică permisiunile laboratoarelor:

ls -ld public private logs

Protejează directorul privat astfel încât numai proprietarul să îl poată accesa:

chmod 700 private
chmod 600 private/clienti.txt

Verifică rezultatul:

ls -ld private
ls -l private/clienti.txt

Ar trebui să apară:

drwx------ private
-rw------- clienti.txt

chmod modifică biții de acces ai fișierelor și directoarelor. Permisiunile pot fi exprimate simbolic sau numeric.

Cum funcționează valorile 755, 750, 640 și 600

Valorile numerice sunt construite din:

r = 4
w = 2
x = 1

Suma se calculează separat pentru proprietar, grup și ceilalți:

7 = rwx
6 = rw-
5 = r-x
4 = r--
0 = ---

Exemple utile:

600  proprietarul citește și scrie; nimeni altcineva nu are acces
640  proprietarul citește și scrie; grupul poate citi
700  director privat, accesibil doar proprietarului
750  proprietarul are acces complet; grupul poate citi și traversa
755  director sau program accesibil tuturor, modificabil doar de proprietar

Ubuntu oferă, de asemenea, exemplul 600 pentru un fișier accesibil numai proprietarului.

Nu folosi chmod 777 ca soluție universală pentru o eroare de acces. 777 permite tuturor utilizatorilor să citească, modifice și execute obiectul respectiv. Rezolvă problema de proprietar sau grup, nu elimina toate restricțiile.

Schimbă proprietarul numai când este necesar

Vezi proprietarul curent:

stat -c 'Owner: %U | Group: %G | Permissions: %A' private/clienti.txt

Pentru a schimba proprietarul și grupul:

sudo chown nume_utilizator:nume_grup private/clienti.txt

Exemplu:

sudo chown alex:analisti private/clienti.txt

chown schimbă proprietarul și, opțional, grupul asociat unui fișier. Folosirea recursivă cu -R afectează toate elementele din director și trebuie verificată cu atenție.

Înainte de o modificare recursivă, listează ce va fi afectat:

find /cale/catre/director -maxdepth 2 -ls

Nu executa direct comenzi precum:

sudo chown -R user:user /
sudo chmod -R 777 /var/www

Prima poate modifica proprietatea întregului sistem. A doua poate expune codul și configurațiile site-ului la modificări neautorizate.

Verifică fișierele cu permisiuni riscante

Caută fișiere modificabile de orice utilizator în laborator:

find ~/linux-cyber-lab -type f -perm -0002 -ls

Dacă nu apare nimic, nu există fișiere world-writable în acel director.

Creează unul pentru test:

touch public/test-riscant.txt
chmod 666 public/test-riscant.txt
find ~/linux-cyber-lab -type f -perm -0002 -ls

Corectează-l:

chmod 644 public/test-riscant.txt

find poate căuta fișiere după tip, proprietar, dată și permisiuni într-o întreagă ierarhie de directoare.

Pentru o verificare read-only a sistemului:

sudo find / -xdev \( -nouser -o -nogroup \) -ls 2>/dev/null

Aceasta caută fișiere al căror UID sau GID nu mai corespunde unui utilizator ori grup existent. Pot apărea după ștergerea unui cont sau restaurarea unui backup.

Poți inventaria și fișierele SUID:

sudo find / -xdev -type f -perm -4000 -print 2>/dev/null

Prezența unui fișier SUID nu înseamnă automat compromitere. Salvează lista normală a sistemului și investighează elementele noi, locațiile neobișnuite sau fișierele care nu aparțin unui pachet cunoscut.

Controlează permisiunile implicite cu umask

Vezi valoarea curentă:

umask

Pentru o sesiune în care vrei fișiere private pentru proprietar și lizibile pentru grup:

umask 027

Creează un test:

touch test-umask.txt
mkdir test-umask-dir
ls -ld test-umask.txt test-umask-dir

În mod obișnuit, vei obține:

-rw-r----- test-umask.txt
drwxr-x--- test-umask-dir

Setarea se aplică procesului shell curent și proceselor pornite din el. Nu modifica global umask pe un server înainte să verifici ce aplicații depind de permisiunile existente.

Vezi ce procese rulează

Un proces este o instanță activă a unui program. Fiecare are un PID, un utilizator, un proces părinte și o comandă de pornire.

Listează procesele:

ps aux

Vezi primele procese după consumul CPU:

ps aux --sort=-%cpu | head -n 15

Pentru o vedere mai utilă într-o investigație:

ps -eo pid,ppid,user,%cpu,%mem,etime,cmd --sort=-%cpu | head -n 20

Coloanele importante sunt:

PID    identificatorul procesului
PPID   procesul părinte
USER   contul sub care rulează
%CPU   consumul procesorului
%MEM   consumul memoriei
ETIME  timpul de când rulează
CMD    comanda completă

ps citește informații despre procese și permite alegerea coloanelor și sortarea rezultatelor.

Caută un proces după nume:

pgrep -a ssh
pgrep -a nginx
pgrep -a apache2

Opțiunea -a afișează și linia de comandă, nu doar PID-ul.

Investighează un PID înainte să îl oprești

Presupunem că PID-ul suspect este 4321. Nu îl opri imediat. Verifică:

ps -p 4321 -o pid,ppid,user,lstart,etime,%cpu,%mem,cmd

Află executabilul real:

sudo readlink -f /proc/4321/exe

Vezi directorul de lucru:

sudo readlink -f /proc/4321/cwd

Vezi comanda cu care a fost pornit:

sudo tr '\0' ' ' < /proc/4321/cmdline
echo

Verifică procesul părinte:

ps -p "$(ps -o ppid= -p 4321)" -o pid,ppid,user,cmd

Directorul virtual /proc/PID expune informații despre fiecare proces, inclusiv executabilul, comanda și directorul său de lucru, în limita permisiunilor utilizatorului.

Semne care merită investigate:

  • proces executat din /tmp, /var/tmp sau un director ascuns din home;
  • nume asemănător unui serviciu legitim, dar cu o literă schimbată;
  • proces de rețea care rulează sub un utilizator neașteptat;
  • comandă foarte lungă cu Base64, curl, wget sau shell redirection;
  • executabil șters de pe disc, dar încă activ;
  • proces fără legătură clară cu aplicațiile instalate.

Un singur semn nu confirmă malware. Compară procesul cu serviciile instalate, logurile și pachetele sistemului.

Oprește procesul gradual

Trimite mai întâi semnalul normal de terminare:

kill -TERM 4321

Verifică dacă mai rulează:

ps -p 4321

Numai dacă procesul nu răspunde și ai confirmat că poate fi oprit:

kill -KILL 4321

SIGTERM îi permite programului să închidă fișiere și conexiuni controlat. SIGKILL oprește procesul imediat și nu poate fi gestionat de aplicație. Comanda kill trimite semnale către procesele indicate.

Pentru un serviciu administrat de systemd, folosește systemctl, nu omorî direct procesul principal:

sudo systemctl status ssh
sudo systemctl restart ssh

Pe alte distribuții, serviciul poate fi numit sshd:

sudo systemctl status sshd

systemctl este instrumentul standard pentru verificarea și controlul unităților administrate de systemd.

Leagă procesul de logurile sale

Listează serviciile active:

systemctl list-units --type=service --state=running

Vezi logurile serviciului SSH din ziua curentă:

sudo journalctl -u ssh --since today

Urmărește logurile în timp real:

sudo journalctl -u ssh -f

Pentru ultimele erori ale sistemului:

sudo journalctl -p err --since "1 hour ago"

journalctl interoghează jurnalele colectate de systemd-journald și poate filtra după serviciu, prioritate, boot sau interval de timp.

Un mini-checklist pentru o analiză Linux

Când găsești un fișier sau proces necunoscut, urmează aceeași ordine:

# Fișierul
ls -la /cale/catre/fisier
stat /cale/catre/fisier
file /cale/catre/fisier
sha256sum /cale/catre/fisier

# Procesul
ps -p PID -o pid,ppid,user,lstart,etime,%cpu,%mem,cmd
sudo readlink -f /proc/PID/exe
sudo readlink -f /proc/PID/cwd

# Serviciul și logurile
systemctl status nume-serviciu
sudo journalctl -u nume-serviciu --since "2 hours ago"

Nu modifica permisiunile și nu șterge fișierul până nu ai păstrat calea, proprietarul, hash-ul, timpul modificării și procesul asociat. Într-o investigație, aceste informații pot fi mai valoroase decât eliminarea rapidă a obiectului suspect.

Fișierele, permisiunile și procesele nu sunt capitole separate. Ele formează același lanț: un utilizator pornește un proces, procesul citește sau modifică fișiere, iar permisiunile stabilesc dacă operația este permisă. Înțelegerea acestui lanț este baza pentru administrarea sigură, analiza logurilor, hardening și răspunsul la incidente în Linux.

Surse folosite

Linux man-pages – ls, stat, chmod, chown, find, ps, pgrep, kill și /proc
Ubuntu Server Documentation – Welcome to the Terminal
Ubuntu Manpages – systemctl
Linux man-pages – journalctl și systemd-journald

Facebook
X
WhatsApp

Te-ar putea interesa si: