O que é o chroot ?

Uma dúvida que é meio comum é entender o que é o chroot e, acaba, que em um mundo feito de uma realidade hoje baseada em containers, não é lá muito difícil. Então, aproveitando este espaço, vamos falar um pouco sobre o chroot.

Entendendo os conceitos básicos

Em um sistema operacional temos, principalmente quando falamos de um sistema operacional baseado no Unix, dois espaços de usuário. Um é o kernel e o outro o Userspace ( em qualquer Unix ou, caso esteja em um android pode ser o busybox ).

Como sabemos o kernel é o componente de um sistema operacional que conversa diretamente com o hardware.

E, além disto, ele é responsável por lhe fornecer APIs que permitem que você consiga acesso aos arquivos, redes, e, até, manipulação de dispositivos. Ou seja, caso você carregue somente o kernel em seu sistema operacional, ele, sozinho não lhe mostrará nada mais que uma tela preta. Para que você possa interagir com o sistema, é necessário o userspace.

E, sim, o userspace é todo o resto. Qualquer coisa carregada após o primeiro processo ( seja o init ou o systemd ) fazem parte do userspace. O espaço do usuário também inclui bibliotecas, que geralmente começam com a libc, sobre as quais todas as outras bibliotecas são construídas.

E o chroot, quem ele é ?

Portanto, com todas as informações anteriores em mente é fácil entender o chroot. O chroot somente altera o diretório raiz do sistema de arquivos Unix para outro diferente.

E isto somente para aquele processo em específico. Ou seja, aquele shell que está executando aquele binário.

E neste novo contexto você pode ter um conjunto diferente de programas e bibiliotecas, mas, o kernel, aquele que fala com o hardware continua

sendo o mesmo. Portanto este chroot continua compartilhando o kernel, mas, exceto caso você use um exploit para ganhar superusuário, o seu processo dentro do chroot não consegue acessar NADA do sistema de arquivos principal.

Portanto, você verá que ele tem uma árvore própria de diretórios como /lib, /bin, /etc e outros. Como dito acima, o chroot compartilha o hardware, ou seja, o mesmo kernel. Portanto, deve ser lembrado que o diretório /dev onde ficam as abstrações dos hardwares presentes no computador. Assim, nunca faça uma mudança por exemplo em uma tabela de partições dentro de um chroot, pois o dispositivo que você estiver manipulando é o mesmo dispositivo do sistema operacional principal.

Outro ponto interessante é lembrar que o sistema operacional principal acessa tudo dentro de um chroot. Portanto, você consegue criar chroots dentro de pontos de montagem, mas, ao mesmo tempo, também é bom que você tenha em mente que qualquer mudança feita dentro do chroot, também está sendo feita no sistema de arquivos principal. Assim, se você muda um arquivo dentro de um ponto de montagem /mnt/exemplo que tem um chroot, e for acessá-lo no sistema operacional principal, você terá acesso aquela mudança.

O chroot é uma ótima camada adicional para proteção do sistema operacional. Ela te dá uma sensação maior de segurança, mas, mesmo assim, caso

o seu sistema operacional não esteja realmente atualizado e com os hardenings necessários para sua proteção, ainda assim, o invasor só terá um passo a mais para fazer antes de ter acesso completo ao seu sistema.

Originalmente postado em me.aplic.com.br

comments powered by Disqus