CGroups
Last updated
Naučite i vežbajte hakovanje AWS-a:HackTricks Training AWS Red Team Expert (ARTE) Naučite i vežbajte hakovanje GCP-a: HackTricks Training GCP Red Team Expert (GRTE)
Linux Control Groups, ili cgroups, su funkcija Linux jezgra koja omogućava dodelu, ograničavanje i prioritizaciju resursa sistema poput CPU-a, memorije i disk I/O među grupama procesa. Pružaju mehanizam za upravljanje i izolaciju korišćenja resursa kolekcija procesa, korisnih za svrhe poput ograničavanja resursa, izolacije radnih opterećenja i prioritizacije resursa među različitim grupama procesa.
Postoje dve verzije cgroups-a: verzija 1 i verzija 2. Obe mogu istovremeno biti korišćene na sistemu. Osnovna razlika je što cgroups verzija 2 uvodi hijerarhijsku, stablo-sličnu strukturu, omogućavajući detaljniju distribuciju resursa među grupama procesa. Pored toga, verzija 2 donosi različita poboljšanja, uključujući:
Pored nove hijerarhijske organizacije, cgroups verzija 2 takođe je uvela nekoliko drugih promena i poboljšanja, kao što su podrška za nove kontrolere resursa, bolja podrška za legacy aplikacije i poboljšana performansa.
Ukupno, cgroups verzija 2 nudi više funkcija i bolju performansu od verzije 1, ali ova poslednja se i dalje može koristiti u određenim scenarijima gde je kompatibilnost sa starijim sistemima od značaja.
Možete videti v1 i v2 cgroups za bilo koji proces gledanjem njegovog cgroup fajla u /proc/<pid>. Možete početi tako što ćete pogledati cgroups vaše ljuske ovom komandom:
Struktura izlaza je kako sledi:
Brojevi 2–12: cgroups v1, pri čemu svaka linija predstavlja drugačiji cgroup. Kontroleri za ove su navedeni pored broja.
Broj 1: Takođe cgroups v1, ali isključivo u svrhe upravljanja (postavljen od strane, npr., systemd-a), i nedostaje kontroler.
Broj 0: Predstavlja cgroups v2. Kontroleri nisu navedeni, i ova linija je ekskluzivna za sisteme koji koriste samo cgroups v2.
Imena su hijerarhijska, slična putanjama datoteka, ukazujući na strukturu i odnos između različitih cgroups.
Imena poput /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 sistemski servis.
Ključne datoteke interfejsa za cgroups imaju prefiks cgroup. Datoteka cgroup.procs, koja se može pregledati standardnim komandama poput cat, nabraja procese unutar cgroup-a. Druga datoteka, cgroup.threads, uključuje informacije o nitima.
Cgroups koji upravljaju ljuskama obično obuhvataju dva kontrolera koji regulišu upotrebu memorije i broj procesa. Za interakciju sa kontrolerom, treba se konsultovati datoteke koje nose prefiks kontrolera. Na primer, pids.current bi se koristio da bi se utvrdio broj niti u cgroup-u.
Indikacija max u vrednosti sugeriše odsustvo specifičnog ograničenja za cgroup. Međutim, zbog hijerarhijske prirode cgroups-a, ograničenja mogu biti nametnuta od strane cgroup-a na nižem nivou u hijerarhiji direktorijuma.
Procesi se dodeljuju cgroups-ima tako što se upisuje njihov ID procesa (PID) u datoteku cgroup.procs
. Ovo zahteva privilegije root-a. Na primer, da dodate proces:
Slično tome, izmena cgroup atributa, poput postavljanja PID ograničenja, vrši se upisivanjem željene vrednosti u odgovarajući fajl. Da biste postavili maksimum od 3.000 PID-ova za cgroup:
Kreiranje novih cgroups uključuje pravljenje novog poddirektorijuma unutar hijerarhije cgroup-a, što podstiče jezgro da automatski generiše neophodne interfejs fajlove. Iako se cgroups bez aktivnih procesa mogu ukloniti pomoću rmdir
, budite svesni određenih ograničenja:
Procesi mogu biti smešteni samo u listne cgroups (tj. najugnježdenije u hijerarhiji).
Cgroup ne može imati kontroler koji nedostaje u svom roditelju.
Kontroleri za pod-cgroups moraju biti eksplicitno deklarisani u fajlu cgroup.subtree_control
. Na primer, da biste omogućili kontrolere CPU i PID u pod-cgroup-u:
Root cgroup je izuzetak od ovih pravila, omogućavajući direktno postavljanje procesa. Ovo se može koristiti za uklanjanje procesa iz systemd upravljanja.
Pratiti upotrebu CPU-a unutar cgroup-a je moguće putem datoteke cpu.stat
, koja prikazuje ukupno vreme CPU-a koje je potrošeno, korisno za praćenje upotrebe preko podprocesa servisa:
Knjiga: Kako Linux funkcioniše, 3. izdanje: Šta svaki superkorisnik treba da zna, autor Brian Ward
Slika:
Slika:
Slika: