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)
O namespace PID (Identificador de Processo) é um recurso no kernel do Linux que fornece isolamento de processos, permitindo que um grupo de processos tenha seu próprio conjunto de PIDs únicos, separado dos PIDs em outros namespaces. Isso é particularmente útil na containerização, onde o isolamento de processos é essencial para segurança e gerenciamento de recursos.
Quando um novo namespace PID é criado, o primeiro processo nesse namespace recebe o PID 1. Esse processo se torna o processo "init" do novo namespace e é responsável por gerenciar outros processos dentro do namespace. Cada processo subsequente criado dentro do namespace terá um PID único dentro desse namespace, e esses PIDs serão independentes dos PIDs em outros namespaces.
Do ponto de vista de um processo dentro de um namespace PID, ele só pode ver outros processos no mesmo namespace. Ele não está ciente de processos em outros namespaces e não pode interagir com eles usando ferramentas tradicionais de gerenciamento de processos (por exemplo, kill
, wait
, etc.). Isso fornece um nível de isolamento que ajuda a evitar que os processos interfiram uns nos outros.
Quando um novo processo é criado (por exemplo, usando a chamada de sistema clone()
), o processo pode ser atribuído a um novo ou existente namespace PID. Se um novo namespace for criado, o processo se torna o processo "init" desse namespace.
O kernel mantém um mapeamento entre os PIDs no novo namespace e os PIDs correspondentes no namespace pai (ou seja, o namespace do qual o novo namespace foi criado). Esse mapeamento permite que o kernel traduza PIDs quando necessário, como ao enviar sinais entre processos em diferentes namespaces.
Processos dentro de um namespace PID só podem ver e interagir com outros processos no mesmo namespace. Eles não estão cientes de processos em outros namespaces, e seus PIDs são únicos dentro de seu namespace.
Quando um namespace PID é destruído (por exemplo, quando o processo "init" do namespace sai), todos os processos dentro desse namespace são terminados. Isso garante que todos os recursos associados ao namespace sejam devidamente limpos.
Ao montar uma nova instância do sistema de arquivos /proc
se você usar o parâmetro --mount-proc
, você garante que o novo namespace de montagem tenha uma visão precisa e isolada das informações do processo específicas para aquele namespace.
Observe que o usuário root do namespace PID inicial (padrão) pode ver todos os processos, mesmo aqueles em novos namespaces PID, é por isso que podemos ver todos os namespaces PID.
Quando você entra em um namespace PID a partir do namespace padrão, ainda será capaz de ver todos os processos. E o processo desse namespace PID poderá ver o novo bash no namespace PID.
Além disso, você só pode entrar em outro namespace PID de processo se você for root. E você não pode entrar em outro namespace sem um descritor apontando para ele (como /proc/self/ns/pid
)
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)