ti-enxame.com

chroot "jail" - o que é e como eu o uso?

Eu ouvi/li muito sobre a prisão chroot no linux, mas nunca a usei (eu uso o Fedora diariamente), então o que é uma "prisão" chroot? Quando e por que devo usá-lo/não usá-lo e há mais alguma coisa que eu deva saber? Como eu iria criar um?

107
user119

Uma prisão chroot é uma maneira de isolar um processo e seus filhos do resto do sistema. Ele deve ser usado apenas para processos que não são executados como root, pois os usuários root podem sair da prisão com muita facilidade.

A idéia é que você crie uma árvore de diretórios na qual copie ou vincule todos os arquivos do sistema necessários para a execução de um processo. Em seguida, você usa a chamada do sistema chroot() para alterar o diretório raiz para estar na base dessa nova árvore e iniciar o processo em execução no ambiente chroot'd. Como ele não pode realmente fazer referência a caminhos fora da raiz modificada, não pode executar operações (leitura/gravação etc.) maliciosamente nesses locais.

No Linux, o uso de montagens de ligação é uma ótima maneira de preencher a árvore chroot. Com isso, você pode abrir pastas como /lib e /usr/lib enquanto não estiver puxando /usr, por exemplo. Basta vincular as árvores de diretório que você deseja aos diretórios criados no diretório de prisão.

97
Ben Combee

"prisão chroot" é um nome impróprio que realmente deve desaparecer, mas as pessoas continuam usando. chroot é uma ferramenta que permite simular um diretório no seu sistema de arquivos como a raiz do sistema de arquivos. Isso significa que você pode ter uma estrutura de pastas como:

-- foo
    -- bar
    -- baz
-- bazz

Se vocês chroot foo e fazer ls /, Você vai ver:

-- bar
-- baz

No que diz respeito a ls (e a qualquer outra ferramenta que você executa), esses são os únicos diretórios no sistema de arquivos. A razão pela qual "prisão" é um nome impróprio é chroot não se destina a forçar um programa para permanecer nesse sistema de arquivos simulado; um programa que sabe que está em uma "prisão" chroot pode escapar facilmente, portanto você não deve usar chroot como uma medida de segurança para impedir que um programa modifique arquivos fora do seu sistema de arquivos simulado

53
Michael Mrozek

Basicamente, você está apenas alterando o diretório raiz do seu ambiente. assim

/

torna-se

/some-jail/ (or whatever directory you want)

Quando um aplicativo acessa/eles recebem/some-jail /. Além disso, o aplicativo não pode sair de/some-jail /, assim você sabe que não acessará mais nada em sua máquina. É uma maneira muito simples de dizer 'ei, você só pode acessar essas coisas que estou fornecendo e não pode acessar mais nada no sistema.

12
jacksonh

"Quando e por que eu devo usá-lo?"

Um uso é em scripts de teste (tempo de inicialização e outros) que fazem referências absolutas ao caminho ou que executam comandos que você pode interceptar e registrar (e talvez não os opere) - em um ambiente em que você não deseja que esses comandos sejam executados. realmente operar em seu ambiente de execução.

Por exemplo, eu tenho um dispositivo incorporado executando o Linux, gostaria de verificar a operação de alguns bash sem a) executá-lo no dispositivo real (já que tenho melhores ferramentas na área de trabalho e não quero bloquear o dispositivo) b) executando de verdade na minha área de trabalho (já que não quero que meu sistema seja desarrumado)

Além disso, você pode descobrir quais comandos ou outros arquivos de script são usados, pois a execução será encerrada com um erro sempre que tentar executar um comando ou script do Shell que não esteja presente na "chroot jail".

(É claro que, para deixar o porco todo, você pode executar dentro do QEMU, Docker ou VM, mas isso envolveria a criação de uma VM etc. - muito mais trabalho)

6
MikeW