chroot “jail” - o que é e como usá-lo?

99

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?


fonte
as respostas aqui parecem ser curtas na categoria "como faço para usá-lo?" :(
Alexander Mills

Respostas:

88

Uma prisão chroot é uma maneira de isolar um processo e seus filhos do resto do sistema. 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 chroot()chamada do sistema 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 puxar pastas como /libe /usr/libsem puxar /usr, por exemplo. Basta vincular as árvores de diretórios que você deseja aos diretórios criados no diretório de prisão.

Ben Combee
fonte
10
Sua resposta é ótima. Uma coisa a mencionar, porém, o chroot não é um mecanismo seguro (um processo pode sair da prisão se ele se tornar raiz e, às vezes, mesmo que não). Cadeias reais podem ser aplicadas com cadeias freebsd e similares. Veja isto en.wikipedia.org/wiki/FreeBSD_jail#Similar_technologies
nc3b
3
O processo de instalação do Gentoo usa um chroot para que você possa configurar seu novo sistema operacional antes de instalar o GRUB e o kernel Linux etc.
Chris Huang-Leaver
3
Dê uma olhada no firejail para obter um shell preso completo usando todos os namespaces do Linux. Existem pacotes deb e rpm disponíveis. Geralmente, eu recomendaria o kernel 3.18 ou posterior, devido a um problema conhecido por não conseguir instalar um novo software ou gerenciar o usuário quando firejailestiver em execução.
CivFan
Ótima resposta! - embora alguns exemplos básicos sejam bons de se ver.
Gabriel Staples
Um usuário sob prisão chroot pode chamar arquivos binários localizados abaixo do /binque é instalado pelo usuário raiz? @Ben Combee
alper
50

"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 em 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ê chroot foofaz ls /, verá:

-- bar
-- baz

No que diz respeito ls(e quaisquer outras ferramentas 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 chrootnão se destina a forçar um programa a 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 chrootcomo medida de segurança para impedir que um programa modifique arquivos fora do sistema de arquivos simulado

Michael Mrozek
fonte
16
Seria útil ter um exemplo de como escapar de uma chroot"prisão". O caso que vi requer escalonamento para obter privilégios de root. É difícil impedir que um processo se expanda para obter privilégios de root?
CivFan
4
Ainda é "confinamento", então "prisão" é um bom atalho. "O campo de contenção de nível 3" seria melhor ?!
10136 MikeW
4
O termo vem das cadeias do FreeBSD. As cadeias são construídas no chroot. O Jails foi criado para resolver os problemas de segurança chrootnão. Por esse motivo, as pessoas geralmente se confundem chroote jailsquerem dizer a mesma coisa. Eles não. O termo "prisão" é dito ser cunhado por Bill Cheswick quando ele montou um honeypot para pegar um biscoito: csrc.nist.gov/publications/secpubs/berferd.pdf
BugHunterUK
Então você pensa, não está usando chroot jailuma boa ideia no meu caso ?
Shafizadeh 12/0318
10

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 da / some-jail /, assim você sabe que não acessará mais nada na sua máquina. É uma maneira muito simples de dizer 'ei, você só pode acessar essas coisas que estou dando a você e não pode acessar mais nada no sistema.

jacksonh
fonte
6

"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 danificado)

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 de shell que não esteja presente na "prisão chroot".

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

MikeW
fonte