arch-chroot
faz mais do que criar um chroot: também cria um namespace PID .
unshare --fork --pid chroot "$chrootdir" "$@"
Como o nome sugere, um namespace PID possui seu próprio conjunto de IDs de processo, distinto do resto do sistema. Isso significa que os processos dentro do namespace não podem ver os processos fora do namespace (e, em particular, não podem matá-los ou rastreá-los) e os processos fora do namespace - vê-los com diferentes PIDs.
Para mais informações sobre namespaces, leia meu resumo aqui e a série LWN de Michael Kerrisk , especialmente Parte 3: PID namespaces e Parte 4: mais sobre namespaces de PID , bem como artigo anterior de Pavel Emelyanov e Kir Kolyshkin . como descobrir o namespace de um processo específico? e Maneira confiável de prender processos filhos usando 'nsenter:' também pode ser de interesse.
Se você quiser fazer coisas para um processo em execução em um namespace de fora, você pode usar o nsenter
utility ; consulte Existe um comando para alternar para em um namespace existente? . Você também pode usar o nsenter
pacote Python . Ou você pode organizar essas operações de dentro do namespace (isso pode ou não ser uma boa solução, dependendo da arquitetura e dos requisitos de segurança); é mais fácil acessar algo em um chroot do lado de fora (apenas prefixar o caminho do diretório correto) do que em um namespace do PID.
Observe que os namespaces e chroots do PID são independentes. Se você chroot para o mesmo diretório de forma independente, isso não permite que você alcance o mesmo namespace PID. Se você executar arch-chroot
duas vezes no mesmo diretório, acabará trabalhando no mesmo diretório, mas em dois namespaces PID diferentes.
¹ Mais precisamente, em um namespace de ancestral. (Espaços de nomes têm uma estrutura de árvore onde as crianças são confinadas dentro do pai.)