CGroups
Last updated
Leer & oefen AWS Hack:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hack: HackTricks Opleiding GCP Red Team Expert (GRTE)
Linux Beheergroepe, of cgroups, is 'n kenmerk van die Linux-kernel wat die toekenning, beperking, en prioritisering van stelselbronne soos CPU, geheue, en skyf I/O onder prosesgroepe moontlik maak. Hulle bied 'n meganisme vir die bestuur en isolering van die hulpbruggebruik van prosesversamelings, voordelig vir doeleindes soos hulpbrugbeperking, werklas-isolering, en hulpbrugprioritisering tussen verskillende prosesgroepe.
Daar is twee weergawes van cgroups: weergawe 1 en weergawe 2. Beide kan gelyktydig op 'n stelsel gebruik word. Die primêre onderskeid is dat cgroups weergawe 2 'n hiërargiese, boomagtige struktuur introduceer, wat meer genuanseerde en gedetailleerde hulpbrugverdeling tussen prosesgroepe moontlik maak. Daarbenewens bring weergawe 2 verskeie verbeterings, insluitend:
Benewens die nuwe hiërargiese organisasie het cgroups weergawe 2 ook verskeie ander veranderinge en verbeterings ingevoer, soos ondersteuning vir nuwe hulpbrugbeheerders, beter ondersteuning vir oudtydse toepassings, en verbeterde prestasie.
Oor die algemeen bied cgroups weergawe 2 meer kenmerke en beter prestasie as weergawe 1, maar die laasgenoemde kan steeds in sekere scenario's gebruik word waar verenigbaarheid met ouer stelsels 'n bekommernis is.
Jy kan die v1 en v2 cgroups vir enige proses lys deur na sy cgroup-lêer in /proc/<pid> te kyk. Jy kan begin deur na jou skul se cgroups te kyk met hierdie bevel:
Die uitvoerstruktuur is as volg:
Nommers 2–12: cgroups v1, waar elke lyn 'n verskillende cgroup voorstel. Kontroleerders vir hierdie is aangrensend aan die nommer.
Nommer 1: Ook cgroups v1, maar slegs vir bestuursdoeleindes (ingestel deur bv. systemd), en ontbreek 'n kontroleerder.
Nommer 0: Stel cgroups v2 voor. Geen kontroleerders word gelys nie, en hierdie lyn is eksklusief op stelsels wat slegs cgroups v2 hardloop.
Die name is hiërargies, lyk soos lêerpaadjies, wat die struktuur en verhouding tussen verskillende cgroups aandui.
Name soos /user.slice of /system.slice dui die kategorisering van cgroups aan, met user.slice tipies vir aanmeldsessies wat deur systemd bestuur word en system.slice vir stelseldienste.
Die lêersisteem word tipies gebruik vir die toegang tot cgroups, wat afwyk van die Unix-stelseloproepkoppelvlak wat tradisioneel gebruik word vir kernelinteraksies. Om 'n skul se cgroup-konfigurasie te ondersoek, moet 'n mens die /proc/self/cgroup-lêer ondersoek, wat die skul se cgroup onthul. Daarna, deur te navigeer na die /sys/fs/cgroup (of /sys/fs/cgroup/unified
) gids en 'n gids te vind wat die naam van die cgroup deel, kan 'n mens verskeie instellings en hulpbruggebruiksinligting wat relevant is vir die cgroup, waarneem.
Die sleutelkoppelvlaklêers vir cgroups is voorafgegaan deur cgroup. Die cgroup.procs-lêer, wat met standaardopdragte soos cat bekyk kan word, lys die prosesse binne die cgroup. 'n Ander lêer, cgroup.threads, sluit draadinligting in.
Cgroups wat skul beheer, omvat tipies twee kontroleerders wat geheugengebruik en prosesgetal reguleer. Om met 'n kontroleerder te interaksieer, moet lêers wat die voorvoegsel van die kontroleerder dra, geraadpleeg word. Byvoorbeeld, pids.current sou geraadpleeg word om die telling van drade in die cgroup te bepaal.
Die aanduiding van max in 'n waarde dui op die afwesigheid van 'n spesifieke limiet vir die cgroup. Tog, as gevolg van die hiërargiese aard van cgroups, kan limiete opgelê word deur 'n cgroup op 'n laer vlak in die gidshiërargie.
Prosesse word aan cgroups toegewys deur hul Proses-ID (PID) na die cgroup.procs
-lêer te skryf. Dit vereis root-voorregte. Byvoorbeeld, om 'n proses by te voeg:
Op soortgelyke wyse word die wysiging van cgroup-eienskappe, soos die instelling van 'n PID-limiet, gedoen deur die gewenste waarde na die relevante lêer te skryf. Om 'n maksimum van 3,000 PIDs vir 'n cgroup in te stel:
Skep nuwe cgroups behels die skep van 'n nuwe subgids binne die cgroup-hierargie, wat die kernel aanmoedig om outomaties die nodige koppelvlaklêers te genereer. Alhoewel cgroups sonder aktiewe prosesse met rmdir
verwyder kan word, moet daar bewus wees van sekere beperkings:
Prosesse kan slegs in blaar-cgroups geplaas word (m.a.w., die mees geneste in 'n hiërargie).
'n Cgroup kan nie 'n beheerder besit wat afwesig is in sy ouer nie.
Beheerders vir kind-cgroups moet eksplisiet verklaar word in die cgroup.subtree_control
lêer. Byvoorbeeld, om die CPU- en PID-beheerders in 'n kind-cgroup te aktiveer:
Die root cgroup is 'n uitsondering op hierdie reëls, wat direkte prosesplasing toelaat. Dit kan gebruik word om prosesse uit systemd-bestuur te verwyder.
Monitering van CPU-gebruik binne 'n cgroup is moontlik deur die cpu.stat
lêer, wat die totale CPU-tyd verbruik aandui, nuttig vir die opsporing van gebruik oor 'n diens se subprosesse:
Boek: How Linux Works, 3de Uitgawe: Wat Elke Supergebruiker Behoort te Weet Deur Brian Ward