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?
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?
Respostas:
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 /lib
e /usr/lib
sem puxar /usr
, por exemplo. Basta vincular as árvores de diretórios que você deseja aos diretórios criados no diretório de prisão.
firejail
estiver em execução.
/bin
que é instalado pelo usuário raiz? @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 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 foo
faz 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 chroot
nã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 chroot
como medida de segurança para impedir que um programa modifique arquivos fora do sistema de arquivos simulado
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?
chroot
não. Por esse motivo, as pessoas geralmente se confundem chroot
e jails
querem 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
chroot jail
uma boa ideia no meu caso ?
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.
"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)