linux namespace - ghdrako/doc_snipets GitHub Wiki
Główne rodzaje przestrzeni nazw (Namespaces) w Linuksie Jądro Linux dzieli izolację na kilka niezależnych kategorii:
- MNT (Mount): Izoluje punkty montowania systemów plików. Zmiany dokonane w tej przestrzeni (zamontowanie lub odmontowanie dysku) nie są widoczne dla reszty systemu. To potężniejsza i bezpieczniejsza wersja klasycznego chroot.
- PID (Process ID): Izoluje drzewo procesów. Proces działający w nowej przestrzeni PID może otrzymać numer PID równy 1 (czyli zachowywać się jak proces init/systemd), nawet jeśli w głównym systemie operacyjnym ma numer np. 4503. Taki proces nie widzi żadnych innych procesów działających w systemie matce.
- NET (Network): Zapewnia całkowicie oddzielny stos sieciowy. Obejmuje to własne interfejsy sieciowe (w tym pętlę zwrotną lo), własne adresy IP, tablice routingu oraz reguły firewalla (np. iptables/nftables).
- UTS (UNIX Timesharing System): Pozwala procesom na posiadanie własnej nazwy hosta (hostname) i nazwy domeny (NIS domain name), niezależnej od reszty systemu.
- IPC (Inter-Process Communication): Izoluje mechanizmy komunikacji międzyprocesowej (kolejki wiadomości, pamięć współdzieloną, semafory). Procesy z różnych przestrzeni IPC nie mogą się ze sobą komunikować tą drogą.
- USER (User ID): Jeden z najpotężniejszych mechanizmów pod kątem bezpieczeństwa. Pozwala na mapowanie identyfikatorów użytkowników (UID) i grup (GID). Dzięki temu proces może działać jako root (UID 0) wewnątrz swojej wyizolowanej przestrzeni nazw, ale z punktu widzenia głównego systemu operacyjnego jest to zwykły, nieuprzywilejowany użytkownik (np. UID 1000). Jeśli taki proces "ucieknie" z izolacji, nie wyrządzi szkód w systemie.
- CGROUP (Control Group): Ukrywa strukturę grup kontrolnych (cgroups) przed procesem, sprawiając, że widzi on tylko swój własny limit zasobów (np. pamięci czy CPU) jako korzeń całego drzewa.