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)
PID(进程标识符)命名空间是Linux内核中的一个特性,通过使一组进程拥有自己独特的PID集合,从而提供进程隔离,这些PID与其他命名空间中的PID是分开的。这在容器化中尤其有用,因为进程隔离对于安全性和资源管理至关重要。
当创建一个新的PID命名空间时,该命名空间中的第一个进程被分配PID 1。这个进程成为新命名空间的“init”进程,负责管理该命名空间内的其他进程。在命名空间内创建的每个后续进程将拥有该命名空间内的唯一PID,这些PID将独立于其他命名空间中的PID。
从PID命名空间内进程的角度来看,它只能看到同一命名空间中的其他进程。它无法感知其他命名空间中的进程,也无法使用传统的进程管理工具(例如,kill
,wait
等)与它们交互。这提供了一种隔离级别,有助于防止进程相互干扰。
当创建一个新进程时(例如,通过使用clone()
系统调用),该进程可以被分配到一个新的或现有的PID命名空间。如果创建了一个新命名空间,该进程将成为该命名空间的“init”进程。
内核维护一个新命名空间中的PID与父命名空间中相应PID之间的映射(即,从中创建新命名空间的命名空间)。这个映射允许内核在必要时翻译PID,例如,在不同命名空间中的进程之间发送信号时。
PID命名空间内的进程只能看到并与同一命名空间中的其他进程交互。它们无法感知其他命名空间中的进程,并且它们的PID在其命名空间内是唯一的。
当PID命名空间被销毁(例如,当命名空间的“init”进程退出时),该命名空间内的所有进程都将被终止。这确保与命名空间相关的所有资源都得到适当清理。
通过挂载新的 /proc
文件系统实例,如果使用参数 --mount-proc
,您可以确保新的挂载命名空间具有 特定于该命名空间的进程信息的准确和隔离的视图。
请注意,初始(默认)PID 命名空间中的 root 用户可以看到所有进程,甚至是新 PID 命名空间中的进程,这就是我们可以看到所有 PID 命名空间的原因。
当你从默认命名空间进入一个PID命名空间时,你仍然能够看到所有的进程。而来自该PID命名空间的进程将能够看到在PID命名空间中的新bash。
此外,你只能以root身份进入另一个进程的PID命名空间。并且你不能在没有指向它的描述符的情况下进入其他命名空间(如/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)