CGroups

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese Inligting

Linux Beheer Groepe, of cgroups, is ’n kenmerk van die Linux-kern wat die toewysing, beperking en prioritisering van stelselhulpbronne soos CPU, geheue en skyf I/O onder prosesgroepe moontlik maak. Hulle bied ’n mekanisme vir die bestuur en isolasie van hulpbronverbruik van prosesversamelings, wat voordelig is vir doeleindes soos hulpbronbeperking, werkladingisolasie, en hulpbronprioritisering onder verskillende prosesgroepe.

Daar is twee weergawes van cgroups: weergawe 1 en weergawe 2. Albei kan gelyktydig op ’n stelsel gebruik word. Die primĂȘre onderskeid is dat cgroups weergawe 2 ’n hiĂ«rargiese, boomagtige struktuur bekendstel, wat meer genuanseerde en gedetailleerde hulpbronverdeling onder prosesgroepe moontlik maak. Boonop bring weergawe 2 verskeie verbeterings, insluitend:

Benewens die nuwe hiërargiese organisasie, het cgroups weergawe 2 ook verskeie ander veranderinge en verbeterings bekendgestel, soos ondersteuning vir nuwe hulpbronbeheerders, beter ondersteuning vir ouer toepassings, en verbeterde prestasie.

Algeheel bied cgroups weergawe 2 meer kenmerke en beter prestasie as weergawe 1, maar laasgenoemde kan steeds in sekere scenario’s gebruik word waar kompatibiliteit 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 skulp se cgroups te kyk met hierdie opdrag:

$ cat /proc/self/cgroup
12:rdma:/
11:net_cls,net_prio:/
10:perf_event:/
9:cpuset:/
8:cpu,cpuacct:/user.slice
7:blkio:/user.slice
6:memory:/user.slice 5:pids:/user.slice/user-1000.slice/session-2.scope 4:devices:/user.slice
3:freezer:/
2:hugetlb:/testcgroup
1:name=systemd:/user.slice/user-1000.slice/session-2.scope
0::/user.slice/user-1000.slice/session-2.scope

Die uitvoerstruktuur is soos volg:

  • Nommer 2–12: cgroups v1, met elke lyn wat ’n ander cgroup verteenwoordig. Beheerders hiervoor word langs die nommer gespesifiseer.
  • Nommer 1: Ook cgroups v1, maar slegs vir bestuursdoeleindes (gestel deur, bv., systemd), en het nie ’n beheerder nie.
  • Nommer 0: Verteenwoordig cgroups v2. Geen beheerders word gelys nie, en hierdie lyn is eksklusief op stelsels wat slegs cgroups v2 draai.
  • Die name is hiĂ«rargies, wat soos lĂȘerpaaie lyk, wat die struktuur en verhouding tussen verskillende cgroups aandui.
  • Name soos /user.slice of /system.slice spesifiseer die kategorisering van cgroups, met user.slice tipies vir aanmeldsessies wat deur systemd bestuur word en system.slice vir stelseldienste.

Beskou cgroups

Die lĂȘerstelsel word tipies gebruik om toegang te verkry tot cgroups, wat afwyk van die Unix-sisteemoproepinterface wat tradisioneel vir kerninteraksies gebruik word. Om ’n skulp se cgroup-konfigurasie te ondersoek, moet ’n mens die /proc/self/cgroup lĂȘer nagaan, wat die skulp se cgroup onthul. Dan, deur na die /sys/fs/cgroup (of /sys/fs/cgroup/unified) gids te navigeer en ’n gids te vind wat die cgroup se naam deel, kan ’n mens verskeie instellings en hulpbronverbruikinligting wat relevant is tot die cgroup, waarneem.

Cgroup Filesystem

Die sleutelinterface-lĂȘers vir cgroups is met cgroup voorafgegaan. Die cgroup.procs lĂȘer, wat met standaardopdragte soos cat beskou kan word, lys die prosesse binne die cgroup. ’n Ander lĂȘer, cgroup.threads, sluit draad-inligting in.

Cgroup Procs

Cgroups wat skulpens bestuur, sluit tipies twee beheerders in wat geheuegebruik en prosesgetal reguleer. Om met ’n beheerder te kommunikeer, moet lĂȘers met die beheerder se voorvoegsel geraadpleeg word. Byvoorbeeld, pids.current sou geraadpleeg word om die aantal drade in die cgroup te bepaal.

Cgroup Memory

Die aanduiding van max in ’n waarde dui op die afwesigheid van ’n spesifieke limiet vir die cgroup. egter, weens die hiĂ«rargiese aard van cgroups, mag limiete opgelĂȘ word deur ’n cgroup op ’n laer vlak in die gids hiĂ«rargie.

Manipuleer en Skep cgroups

Prosesse word aan cgroups toegeken deur hulle Proses ID (PID) na die cgroup.procs lĂȘer te skryf. Dit vereis wortelprivileges. Byvoorbeeld, om ’n proses by te voeg:

echo [pid] > cgroup.procs

Net soos, om cgroup-attribuut te wysig, soos om ’n PID-limiet in te stel, word dit gedoen deur die verlangde waarde na die relevante lĂȘer te skryf. Om ’n maksimum van 3,000 PIDs vir ’n cgroup in te stel:

echo 3000 > pids.max

Die skep van nuwe cgroups behels die maak van ’n nuwe subgids binne die cgroup hiĂ«rargie, wat die kern aanmoedig om outomaties die nodige koppelvlaklĂȘers te genereer. Alhoewel cgroups sonder aktiewe prosesse met rmdir verwyder kan word, wees bewus van sekere beperkings:

  • Prosesse kan slegs in blaar cgroups geplaas word (d.w.s. die mees geneste in ’n hiĂ«rargie).
  • ’n cgroup kan nie ’n kontroleerder hĂȘ wat nie in sy ouer is nie.
  • Kontroleerders vir kind cgroups moet eksplisiet verklaar word in die cgroup.subtree_control lĂȘer. Byvoorbeeld, om CPU en PID kontroleerders in ’n kind cgroup in te skakel:
echo "+cpu +pids" > cgroup.subtree_control

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 wat verbruik is, vertoon, nuttig vir die opsporing van gebruik oor ’n diens se subprosesse:

CPU-gebruik statistieke soos getoon in die cpu.stat lĂȘer

Verwysings

  • Boek: Hoe Linux Werk, 3de Uitgawe: Wat Elke Supergebruiker Moet Weet Deur Brian Ward

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks