PID Namespace
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
El espacio de nombres PID (Identificador de Proceso) es una característica en el núcleo de Linux que proporciona aislamiento de procesos al permitir que un grupo de procesos tenga su propio conjunto de PIDs únicos, separado de los PIDs en otros espacios de nombres. Esto es particularmente útil en la contenedorización, donde el aislamiento de procesos es esencial para la seguridad y la gestión de recursos.
Cuando se crea un nuevo espacio de nombres PID, el primer proceso en ese espacio de nombres se le asigna el PID 1. Este proceso se convierte en el proceso "init" del nuevo espacio de nombres y es responsable de gestionar otros procesos dentro del espacio de nombres. Cada proceso subsiguiente creado dentro del espacio de nombres tendrá un PID único dentro de ese espacio de nombres, y estos PIDs serán independientes de los PIDs en otros espacios de nombres.
Desde la perspectiva de un proceso dentro de un espacio de nombres PID, solo puede ver otros procesos en el mismo espacio de nombres. No es consciente de los procesos en otros espacios de nombres y no puede interactuar con ellos utilizando herramientas tradicionales de gestión de procesos (por ejemplo, kill
, wait
, etc.). Esto proporciona un nivel de aislamiento que ayuda a prevenir que los procesos interfieran entre sí.
Cuando se crea un nuevo proceso (por ejemplo, utilizando la llamada al sistema clone()
), el proceso puede ser asignado a un nuevo espacio de nombres PID o a uno existente. Si se crea un nuevo espacio de nombres, el proceso se convierte en el proceso "init" de ese espacio de nombres.
El núcleo mantiene un mapeo entre los PIDs en el nuevo espacio de nombres y los PIDs correspondientes en el espacio de nombres padre (es decir, el espacio de nombres del cual se creó el nuevo espacio de nombres). Este mapeo permite que el núcleo traduzca PIDs cuando sea necesario, como al enviar señales entre procesos en diferentes espacios de nombres.
Los procesos dentro de un espacio de nombres PID solo pueden ver e interactuar con otros procesos en el mismo espacio de nombres. No son conscientes de los procesos en otros espacios de nombres, y sus PIDs son únicos dentro de su espacio de nombres.
Cuando un espacio de nombres PID es destruido (por ejemplo, cuando el proceso "init" del espacio de nombres sale), todos los procesos dentro de ese espacio de nombres son terminados. Esto asegura que todos los recursos asociados con el espacio de nombres se limpien adecuadamente.
Al montar una nueva instancia del sistema de archivos /proc
si usas el parámetro --mount-proc
, aseguras que el nuevo espacio de nombres de montaje tenga una vista precisa y aislada de la información del proceso específica para ese espacio de nombres.
Tenga en cuenta que el usuario root del espacio de nombres PID inicial (predeterminado) puede ver todos los procesos, incluso los que están en nuevos espacios de nombres PID, por eso podemos ver todos los espacios de nombres PID.
Cuando entras dentro de un espacio de nombres PID desde el espacio de nombres predeterminado, aún podrás ver todos los procesos. Y el proceso de ese espacio de nombres PID podrá ver el nuevo bash en el espacio de nombres PID.
Además, solo puedes entrar en otro espacio de nombres PID de proceso si eres root. Y no puedes entrar en otro espacio de nombres sin un descriptor que apunte a él (como /proc/self/ns/pid
)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)