.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2016 by Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH cgroup_namespaces 7 "31 octombrie 2023" "Pagini de manual de Linux 6.06" .SH NUME cgroup_namespaces \- prezentare generală a spațiilor de nume cgroup din Linux .SH DESCRIERE Pentru o descriere generală a spațiilor de nume, consultați \fBnamespaces\fP(7). .P Spațiile de nume cgroup virtualizează vizualizarea grupurilor cgroup ale unui proces (a se vedea \fBcgroups\fP(7)), așa cum sunt văzute prin intermediul fișierelor \fI/proc/\fPpid\fI/cgroup\fP și \fI/proc/\fPpid\fI/mountinfo\fP. .P Fiecare spațiu de nume cgroup are propriul set de directoare rădăcină cgroup. Aceste directoare rădăcină sunt punctele de bază pentru locațiile relative afișate în înregistrările corespunzătoare din fișierul \fI/proc/\fPpid\fI/cgroup\fP. Atunci când un proces creează un nou spațiu de nume cgroup folosind \fBclone\fP(2) sau \fBunshare\fP(2) cu fanionul \fBCLONE_NEWCGROUP\fP, directoarele sale cgroups curente devin directoarele rădăcină cgroup ale noului spațiu de nume; (acest lucru se aplică atât pentru ierarhiile cgroups versiunea 1, cât și pentru ierarhia unificată cgroups versiunea 2). .P Atunci când se citesc membrii cgroup ai unui proces "țintă" din \fI/proc/\fPpid\fI/cgroup\fP, numele rutei afișat în al treilea câmp al fiecărei înregistrări va fi relativ la directorul rădăcină al procesului de citire pentru ierarhia cgroup corespunzătoare. În cazul în care directorul cgroup al procesului țintă se află în afara directorului rădăcină al spațiului de nume cgroup al procesului de citire, atunci numele rutei va afișa intrări \&\fI../\fP pentru fiecare nivel antecesor în ierarhia cgroup. .P Următoarea sesiune shell demonstrează efectul creării unui nou spațiu de nume cgroup. .P În primul rând, (ca super\-utilizator), într\-un shell din spațiul de nume cgroup inițial, creăm un cgroup copil în ierarhia \fIfreezer\fP și plasăm un proces în acel cgroup pe care îl vom folosi ca parte a demonstrației de mai jos: .P .in +4n .EX # \fBmkdir \-p /sys/fs/cgroup/freezer/sub2\fP # \fBsleep 10000 &\fP # Creează un proces care există o perioadă de timp [1] 20124 # \fBecho 20124 > /sys/fs/cgroup/freezer/sub2/cgroup.procs\fP .EE .in .P Apoi creăm un alt cgroup copil în ierarhia \fIfreezer\fP și punem shell\-ul în acel cgroup: .P .in +4n .EX # \fBmkdir \-p /sys/fs/cgroup/freezer/sub\fP # \fBecho $$\fP # Afișează PID\-ul acestui shell 30655 # \fBecho 30655 > /sys/fs/cgroup/freezer/sub/cgroup.procs\fP # \fBcat /proc/self/cgroup | grep freezer\fP 7:freezer:/sub .EE .in .P În continuare, folosim \fBunshare\fP(1) pentru a crea un proces care rulează un nou shell în noile spații de nume cgroup și mount: .P .in +4n .EX # \fBPS1="sh2# " unshare \-Cm bash\fP .EE .in .P Din noul shell pornit de \fBunshare\fP(1), inspectăm apoi fișierele \fI/proc/\fPpid\fI/cgroup\fP ale noului shell, respectiv ale unui proces care se află în spațiul de nume cgroup inițial (\fIinit\fP, cu PID 1) și ale procesului din cgroup\-ul frate (\fIsub2\fP): .P .in +4n .EX sh2# \fBcat /proc/self/cgroup | grep freezer\fP 7:freezer:/ sh2# \fBcat /proc/1/cgroup | grep freezer\fP 7:freezer:/.. sh2# \fBcat /proc/20124/cgroup | grep freezer\fP 7:freezer:/../sub2 .EE .in .P Din ieșirea primei comenzi, vedem că apartenența la freezer cgroup a noului shell (care se află în același cgroup ca și shell\-ul inițial) este afișată definită în raport cu directorul rădăcină al freezer cgroup care a fost stabilit atunci când a fost creat noul spațiu de nume cgroup; (în termeni absoluți, noul shell se află în cgroup\-ul freezer \fI/sub\fP, iar directorul rădăcină al ierarhiei freezer cgroup din noul spațiu de nume cgroup este, de asemenea, \fI/sub\fP. Astfel, apartenența la cgroup a noului shell este afișată ca „/”). .P Cu toate acestea, când ne uităm în \fI/proc/self/mountinfo\fP vedem următoarea anomalie: .P .in +4n .EX sh2# \fBcat /proc/self/mountinfo | grep freezer\fP 155 145 0:32 /.. /sys/fs/cgroup/freezer ... .EE .in .P Al patrulea câmp al acestei linii (\fI/..\fP) trebuie să arate directorul din sistemul de fișiere cgroup care formează rădăcina acestei montări. Deoarece, prin definiția spațiilor de nume cgroup, directorul cgroup freezer curent al procesului a devenit directorul cgroup freezer rădăcină al acestuia, ar trebui să vedem „/” în acest câmp. Problema aici este că vedem o intrare de montare pentru sistemul de fișiere cgroup corespunzător spațiului de nume cgroup inițial (al cărui sistem de fișiere cgroup este într\-adevăr înrădăcinat în directorul părinte al lui \fIsub\fP). Pentru a remedia această problemă, trebuie să montăm din nou sistemul de fișiere cgroup freezer din noul shell (adică să efectuăm montarea dintr\-un proces care se află în noul spațiu de nume cgroup), după care vedem rezultatele așteptate: .P .in +4n .EX sh2# \fBmount \-\-make\-rslave /\fP # Nu propagă evenimentele de montare # în alte spații de nume sh2# \fBumount /sys/fs/cgroup/freezer\fP sh2# \fBmount \-t cgroup \-o freezer freezer /sys/fs/cgroup/freezer\fP sh2# \fBcat /proc/self/mountinfo | grep freezer\fP 155 145 0:32 / /sys/fs/cgroup/freezer rw,relatime ... .EE .in .\" .SH STANDARDE Linux. .SH NOTE Utilizarea spațiilor de nume cgroup necesită un nucleu care să fie configurat cu opțiunea \fBCONFIG_CGROUPS\fP. .P Virtualizarea oferită de spațiile de nume cgroup servește mai multor scopuri: .IP \[bu] 3 Aceasta previne scurgerile de informații prin care rutele directoarelor cgroup din afara unui container ar fi altfel vizibile pentru procesele din container. Astfel de scurgeri de informații ar putea, de exemplu, dezvălui informații despre cadrul containerului pentru aplicațiile containerizate. .IP \[bu] Aceasta ușurează sarcini precum migrarea containerelor. Virtualizarea oferită de spațiile de nume ale cgroup\-urilor permite ca containerele să fie izolate de cunoașterea numelor de rută ale cgroup\-urilor ancestrale. Fără o astfel de izolare, ar trebui ca numele complete ale rutelor cgroup\-urilor (afișate în \fI/proc/self/cgroups\fP) să fie reproduse pe sistemul țintă atunci când se migrează un container; aceste nume de rute ar trebui, de asemenea, să fie unice, astfel încât să nu intre în conflict cu alte nume de rute de pe sistemul țintă. .IP \[bu] Aceasta permite o mai bună confinare a proceselor containerizate, deoarece este posibil să se monteze sistemele de fișiere cgroup ale containerului astfel încât procesele containerului să nu poată obține acces la directoarele cgroup ancestrale. Luați în considerare, de exemplu, următorul scenariu: .RS .IP \[bu] 3 Avem un director cgroup, \fI/cg/1\fP, care este deținut de utilizatorul ID 9000. .IP \[bu] Avem un proces, \fIX\fP, deținut de asemenea de utilizatorul ID 9000, care este plasat în spațiul de nume al cgroupului \fI/cg/1/2\fP (adică \fIX\fP a fost plasat într\-un nou spațiu de nume de cgroup prin \fBclone\fP(2) sau \fBunshare\fP(2) cu indicatorul \fBCLONE_NEWCGROUP\fP). .RE .IP Dacă cgroup\-ul nu este pus într\-un spațiu de nume, deoarece directorul cgroup \fI/cg/1\fP este deținut (și poate fi scris) de UID 9000 și procesul \fIX\fP este, de asemenea, deținut de ID\-ul utilizatorului 9000, procesul \fIX\fP ar putea modifica conținutul fișierelor cgroups (adică ar putea schimba parametrii cgroup) nu numai în \fI/cg/1/2\fP, ci și în directorul cgroup ancestral \fI/cg/1\fP. Plasarea procesului \fIX\fP sub directorul cgroup \fI/cg/1/2\fP, în combinație cu operațiile de montare adecvate pentru sistemul de fișiere cgroup (așa cum s\-a arătat mai sus), îl împiedică să modifice fișierele din \fI/cg/1\fP, deoarece nu poate vedea nici măcar conținutul acestui director (sau al directoarelor ancestrale cgroup mai îndepărtate). În combinație cu aplicarea corectă a limitelor ierarhice, acest lucru împiedică procesul \fIX\fP să scape de limitele impuse de cgroup\-urile ancestrale. .SH "CONSULTAȚI ȘI" \fBunshare\fP(1), \fBclone\fP(2), \fBsetns\fP(2), \fBunshare\fP(2), \fBproc\fP(5), \fBcgroups\fP(7), \fBcredentials\fP(7), \fBnamespaces\fP(7), \fBuser_namespaces\fP(7) .PP .SH TRADUCERE Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu . .PP Această traducere este documentație gratuită; citiți .UR https://www.gnu.org/licenses/gpl-3.0.html Licența publică generală GNU Versiunea 3 .UE sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE. .PP Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la .MT translation-team-ro@lists.sourceforge.net .ME .