CGroups
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Linux kontrolne grupe, ili cgroups, su funkcija Linux jezgra koja omogućava dodeljivanje, ograničavanje i prioritizaciju sistemskih resursa kao što su CPU, memorija i disk I/O među grupama procesa. One nude mehanizam za upravljanje i izolaciju korišćenja resursa kolekcija procesa, što je korisno za svrhe kao što su ograničenje resursa, izolacija radnog opterećenja i prioritizacija resursa među različitim grupama procesa.
Postoje dve verzije cgroups: verzija 1 i verzija 2. Obe se mogu koristiti istovremeno na sistemu. Primarna razlika je u tome što cgroups verzija 2 uvodi hijerarhijsku, stablo-sličnu strukturu, omogućavajući suptilniju i detaljniju distribuciju resursa među grupama procesa. Pored toga, verzija 2 donosi razne poboljšanja, uključujući:
Pored nove hijerarhijske organizacije, cgroups verzija 2 je takođe uvela nekoliko drugih promena i poboljšanja, kao što su podrška za nove kontrolere resursa, bolja podrška za nasleđene aplikacije i poboljšane performanse.
Sve u svemu, cgroups verzija 2 nudi više funkcija i bolje performanse od verzije 1, ali se potonja može i dalje koristiti u određenim scenarijima gde je kompatibilnost sa starijim sistemima važna.
Možete nabrojati v1 i v2 cgroups za bilo koji proces gledajući njegov cgroup fajl u /proc/<pid>. Možete početi tako što ćete pogledati cgroups vašeg shell-a sa ovom komandom:
Izlazna struktura je sledeća:
Brojevi 2–12: cgroups v1, pri čemu svaka linija predstavlja različiti cgroup. Kontroleri za njih su navedeni pored broja.
Broj 1: Takođe cgroups v1, ali isključivo za upravljačke svrhe (postavlja, npr., systemd), i nema kontroler.
Broj 0: Predstavlja cgroups v2. Nema navedene kontrolere, a ova linija je ekskluzivna na sistemima koji rade samo sa cgroups v2.
Imena su hijerarhijska, podsećajući na putanje fajlova, što ukazuje na strukturu i odnos između različitih cgroups.
Imena kao što su /user.slice ili /system.slice specificiraju kategorizaciju cgroups, pri čemu je user.slice obično za sesije prijavljivanja koje upravlja systemd, a system.slice za sistemske usluge.
Datotečni sistem se obično koristi za pristup cgroups, odstupajući od Unix sistemskog poziva koji se tradicionalno koristi za interakciju sa kernelom. Da bi se istražila cgroup konfiguracija shelle, treba ispitati /proc/self/cgroup fajl, koji otkriva cgroup shelle. Zatim, navigacijom do /sys/fs/cgroup (ili /sys/fs/cgroup/unified
) direktorijuma i pronalaženjem direktorijuma koji deli ime cgroup-a, može se posmatrati razne postavke i informacije o korišćenju resursa relevantne za cgroup.
Ključne interfejsne datoteke za cgroups su prefiksirane sa cgroup. Fajl cgroup.procs, koji se može pregledati standardnim komandama kao što je cat, navodi procese unutar cgroup-a. Drugi fajl, cgroup.threads, uključuje informacije o nitima.
Cgroups koje upravljaju shellovima obično obuhvataju dva kontrolera koja regulišu korišćenje memorije i broj procesa. Da bi se interagovalo sa kontrolerom, treba konsultovati fajlove sa prefiksom kontrolera. Na primer, pids.current bi se referisao da bi se utvrdio broj niti u cgroup-u.
Naznaka max u vrednosti sugeriše odsustvo specifičnog limita za cgroup. Međutim, zbog hijerarhijske prirode cgroups, limiti mogu biti nametnuti od strane cgroup-a na nižem nivou u hijerarhiji direktorijuma.
Procesi se dodeljuju cgroups pisanjem njihovog ID-a procesa (PID) u cgroup.procs
fajl. Ovo zahteva root privilegije. Na primer, da bi se dodao proces:
Slično, modifikovanje cgroup atributa, kao što je postavljanje limita za PID, se vrši pisanjem željene vrednosti u odgovarajući fajl. Da biste postavili maksimum od 3.000 PID-ova za cgroup:
Kreiranje novih cgroups podrazumeva pravljenje nove poddirektorijuma unutar hijerarhije cgroup-a, što pokreće kernel da automatski generiše potrebne interfejsne datoteke. Iako se cgroups bez aktivnih procesa mogu ukloniti pomoću rmdir
, budite svesni određenih ograničenja:
Procesi se mogu postaviti samo u listovite cgroups (tj. najdublje u hijerarhiji).
Cgroup ne može imati kontroler koji nije prisutan u svom roditelju.
Kontroleri za podcgroups moraju biti eksplicitno deklarisani u datoteci cgroup.subtree_control
. Na primer, da biste omogućili CPU i PID kontrolere u podcgroup-u:
root cgroup je izuzetak od ovih pravila, omogućavajući direktno postavljanje procesa. Ovo se može koristiti za uklanjanje procesa iz upravljanja systemd-om.
Praćenje korišćenja CPU-a unutar cgroup-a je moguće kroz cpu.stat
datoteku, koja prikazuje ukupno vreme CPU-a koje je potrošeno, što je korisno za praćenje korišćenja kroz podprocese usluge:
Knjiga: Kako Linux funkcioniše, 3. izdanje: Šta svaki superkorisnik treba da zna od Brajan Varda
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)