PID Namespace
Informazioni di base
Lo spazio dei nomi PID (Process IDentifier) è una funzionalità nel kernel Linux che fornisce l'isolamento dei processi abilitando un gruppo di processi ad avere il proprio set di PID univoci, separati dai PID in altri spazi dei nomi. Questo è particolarmente utile nella containerizzazione, dove l'isolamento dei processi è essenziale per la sicurezza e la gestione delle risorse.
Quando viene creato un nuovo spazio dei nomi PID, il primo processo in tale spazio dei nomi viene assegnato il PID 1. Questo processo diventa il processo "init" del nuovo spazio dei nomi ed è responsabile della gestione degli altri processi all'interno dello spazio dei nomi. Ogni processo successivo creato all'interno dello spazio dei nomi avrà un PID univoco all'interno di tale spazio dei nomi e questi PID saranno indipendenti dai PID in altri spazi dei nomi.
Dal punto di vista di un processo all'interno di uno spazio dei nomi PID, può vedere solo gli altri processi nello stesso spazio dei nomi. Non è consapevole dei processi in altri spazi dei nomi e non può interagire con essi utilizzando gli strumenti tradizionali di gestione dei processi (ad esempio, kill
, wait
, ecc.). Ciò fornisce un livello di isolamento che aiuta a prevenire l'interferenza tra i processi.
Come funziona:
Quando viene creato un nuovo processo (ad esempio, utilizzando la chiamata di sistema
clone()
), il processo può essere assegnato a uno spazio dei nomi PID nuovo o esistente. Se viene creato un nuovo spazio dei nomi, il processo diventa il processo "init" di tale spazio dei nomi.Il kernel mantiene una mappatura tra i PID nel nuovo spazio dei nomi e i PID corrispondenti nello spazio dei nomi padre (cioè lo spazio dei nomi da cui è stato creato il nuovo spazio dei nomi). Questa mappatura consente al kernel di tradurre i PID quando necessario, ad esempio quando si inviano segnali tra processi in spazi dei nomi diversi.
I processi all'interno di uno spazio dei nomi PID possono vedere e interagire solo con gli altri processi nello stesso spazio dei nomi. Non sono consapevoli dei processi in altri spazi dei nomi e i loro PID sono univoci all'interno del loro spazio dei nomi.
Quando viene distrutto uno spazio dei nomi PID (ad esempio, quando il processo "init" dello spazio dei nomi esce), tutti i processi all'interno di tale spazio dei nomi vengono terminati. Ciò garantisce che tutte le risorse associate allo spazio dei nomi vengano correttamente pulite.
Laboratorio:
Creare spazi dei nomi diversi
CLI
Montando una nuova istanza del filesystem /proc
se si utilizza il parametro --mount-proc
, si garantisce che il nuovo spazio dei nomi di montaggio abbia una visualizzazione accurata e isolata delle informazioni sui processi specifiche di tale spazio dei nomi.
Docker
Controlla in quale namespace si trova il tuo processo
To check which namespace your process is in, you can use the following command:
Per controllare in quale namespace si trova il tuo processo, puoi utilizzare il seguente comando:
This will display the inode number of the PID namespace associated with your process.
Questo mostrerà il numero di inode dello spazio dei nomi PID associato al tuo processo.
Trova tutti i namespace PID
Nota che l'utente root dal PID namespace iniziale (predefinito) può vedere tutti i processi, anche quelli nei nuovi PID namespaces, ecco perché possiamo vedere tutti i PID namespaces.
Entra all'interno di un PID namespace
Quando entri all'interno di uno spazio dei processi (PID namespace) dal namespace predefinito, sarai comunque in grado di vedere tutti i processi. E il processo dal PID ns sarà in grado di vedere il nuovo bash nel PID ns.
Inoltre, puoi entrare in un altro PID namespace solo se sei root. E non puoi entrare in un altro namespace senza un descrittore che punti ad esso (come /proc/self/ns/pid
)
Riferimenti
Last updated