PID Namespace
Osnovne informacije
PID (Process IDentifier) namespace je funkcionalnost u Linux kernelu koja omogućava izolaciju procesa omogućavajući grupi procesa da ima svoj set jedinstvenih PID-ova, odvojenih od PID-ova u drugim namespace-ima. Ovo je posebno korisno u kontejnerizaciji, gde je izolacija procesa ključna za bezbednost i upravljanje resursima.
Kada se kreira novi PID namespace, prvom procesu u tom namespace-u se dodeljuje PID 1. Taj proces postaje "init" proces novog namespace-a i odgovoran je za upravljanje ostalim procesima unutar namespace-a. Svaki sledeći proces kreiran unutar namespace-a će imati jedinstveni PID unutar tog namespace-a, i ovi PID-ovi će biti nezavisni od PID-ova u drugim namespace-ima.
Iz perspektive procesa unutar PID namespace-a, on može videti samo druge procese u istom namespace-u. Nije svestan procesa u drugim namespace-ima i ne može da interaguje sa njima koristeći tradicionalne alate za upravljanje procesima (npr. kill
, wait
, itd.). Ovo pruža nivo izolacije koji pomaže u sprečavanju međusobnog ometanja procesa.
Kako radi:
Kada se kreira novi proces (npr. korišćenjem
clone()
sistemskog poziva), proces može biti dodeljen novom ili postojećem PID namespace-u. Ako se kreira novi namespace, proces postaje "init" proces tog namespace-a.Kernel održava mapiranje između PID-ova u novom namespace-u i odgovarajućih PID-ova u roditeljskom namespace-u (tj. namespace-u iz kojeg je novi namespace kreiran). Ovo mapiranje omogućava kernelu da prevodi PID-ove kada je to potrebno, kao što je slanje signala između procesa u različitim namespace-ima.
Procesi unutar PID namespace-a mogu videti i interagovati samo sa drugim procesima u istom namespace-u. Nisu svesni procesa u drugim namespace-ima, a njihovi PID-ovi su jedinstveni unutar njihovog namespace-a.
Kada se PID namespace uništi (npr. kada "init" proces namespace-a izađe), svi procesi unutar tog namespace-a se terminiraju. Ovo osigurava da se svi resursi povezani sa namespace-om pravilno očiste.
Lab:
Kreiranje različitih Namespace-ova
CLI
Montiranjem nove instance /proc
fajl sistema, ako koristite parametar --mount-proc
, obezbeđujete da novi mount namespace ima tačan i izolovan prikaz informacija o procesima specifičnim za taj namespace.
Docker
Proverite u kojem namespace-u se nalazi vaš proces
Da biste proverili u kojem namespace-u se nalazi vaš proces, možete koristiti sledeću komandu:
Ova komanda će vam prikazati sve namespace-ove u kojima se trenutno nalazi vaš proces.
Pronađite sve PID namespace-ove
Imajte na umu da korisnik sa root privilegijama iz početnog (podrazumevanog) PID namespace-a može videti sve procese, čak i one u novim PID namespace-ima, zbog čega možemo videti sve PID namespace-e.
Uđite unutar PID namespace-a
Kada uđete unutar PID namespace-a iz zadanih namespace-a, i dalje ćete moći vidjeti sve procese. I proces iz tog PID ns-a će moći vidjeti novi bash na PID ns-u.
Takođe, možete ući u drugi PID namespace samo ako ste root. I ne možete ući u drugi namespace bez deskriptora koji na njega pokazuje (poput /proc/self/ns/pid
)
Reference
Last updated