Como usar o Chroot no Linux e consertar seu sistema quebrado

Chroot Linux
⏱️ 9 min read

Chroot é um utilitário Linux/Unix que pode alterar ou modificar o sistema de arquivos raiz. Com a ajuda do chroot comando, você pode criar facilmente um sistema de arquivos isolado dentro de seu sistema de arquivos primário. O Chroot é especialmente útil para separar seu ambiente de trabalho e doméstico ou se você deseja um ambiente de teste para testar o software isoladamente.

Diferença entre Chroot e Máquina Virtual

À primeira vista, você pode pensar em chroot como semelhante a uma máquina virtual ou a um sistema em contêiner como o docker. É meio parecido, mas o chroot é uma solução muito mais leve que uma máquina virtual. A máquina virtual precisa de um hypervisor para instalar e trabalhar em um kernel separado, que é diferente da máquina host. Ao contrário de uma máquina virtual, o chroot compartilha o mesmo kernel e processos, mas cria uma jaula no sistema de arquivos. Dentro da prisão, não é possível olhar para fora sem permissão de root. Portanto, o sistema de arquivos isolado também é chamado de chroot jail.

Diferentes Casos de Uso do Chroot

  1. Ambiente de compilação isolado no pipeline de CI/CD: Chroot é usado para criar um ambiente de compilação isolado para aplicativos no pipeline de CI/CD. Isso ajuda a construir seu aplicativo com dependências exclusivas e é completamente isolado de todos os outros ambientes de construção para remover possíveis conflitos.
  2. Ambiente de desenvolvimento e teste separado: Muitas vezes, o software que funciona na máquina do desenvolvedor não funciona no dispositivo do usuário final. Isso ocorre porque o desenvolvedor possui muitas ferramentas e dependências instaladas em seu sistema. Pessoas normais não têm todas essas dependências instaladas em suas máquinas. Para testar o software, se ele for executado em todos os dispositivos, o desenvolvedor ou testador pode facilmente criar um ambiente simples usando chroot para testar seu software.
  3. Reduza o risco para o desenvolvedor: Como desenvolvedor, geralmente fazemos alguns programas que interagem com nossos arquivos do sistema sem qualquer sandboxing adequado. Portanto, se cometermos um erro, nosso software pode limpar facilmente nossos dados importantes do nosso dispositivo. Para reduzir esse tipo de risco, o desenvolvedor geralmente usa o chroot para criar um novo ambiente de trabalho para reduzir o risco de perda de dados.
  4. Uma versão diferente do mesmo software: Às vezes você precisa instalar alguma versão muito antiga ou muito recente de um software ou dependência para fins de desenvolvimento. Mas usar uma dependência tão conflitante pode atrapalhar seu sistema. Esta situação pode ser facilmente superada usando chroot jail.
  5. Corrigir um sistema quebrado: Se você tiver um sistema quebrado, poderá repará-lo facilmente com a ajuda do chroot. Basta inicializar um ambiente Linux ao vivo no dispositivo e montar o sistema de arquivos. Usando este ponto de montagem, você pode executar comandos diferentes para corrigir seu problema. Isso é discutido mais adiante neste tutorial.
  6. Executando com segurança um servidor FTP: FTP significa protocolo de transferência de arquivos. A execução de um servidor FTP oferece o controle para compartilhar apenas os arquivos que você deseja. Portanto, nenhum peer remoto pode ver seu sistema de arquivos host e acessá-lo.

Criando um ambiente Chroot

Este é um guia rápido sobre como criar um ambiente chroot em seu sistema. Você pode obter informações detalhadas no arch wiki.

  1. Para criar um ambiente chroot, crie um novo diretório dentro de sua pasta pessoal. Dentro desta pasta, nosso sistema de arquivos isolado estará presente no futuro. Neste tutorial, nomeei a pasta “mte”.
mkdir ~/mte
  1. Estamos criando um ambiente Linux muito mínimo. Nós instalamos bash como um shell dentro do ambiente chroot e instale ls, rme touch para listar, remover e criar arquivos respectivamente. Vamos criar os diretórios necessários dentro do nosso diretório “mte”.
cd ~/mte
mkdir bin
mkdir lib
mkdir lib64
  1. Copie os binários necessários do diretório “/bin” regular para o ambiente chroot “~/mte”.
cp /bin/bash ~/mte/bin
cp /bin/touch ~/mte/bin
cp /bin/ls ~/mte/bin
cp /bin/rm ~/mte/bin
  1. Copiar os binários não é suficiente. Também temos que copiar suas dependências para a pasta “mte”. Para conhecer as dependências necessárias, usamos o ldd comando. Se você quiser saber a dependência do bash, execute:
ldd /bin/bash

Obtemos a seguinte saída do comando acima.

Chroot Ldd, auto-capturado
  1. Listar essas dependências e copiá-las uma a uma será meticulosamente lento e chato. Portanto, para automatizar esse processo, estamos usando um script bash. Crie um arquivo chamado “copydependancy.sh” e escreva esses comandos shell dentro dele.
#Setting the chroot directory
mte="~/mte"
 
# enter your binary name
echo -e "Please enter your binary name \n"
 
#Reading from terminal input
read binaryname
 
# Listing all the dependencies
list="$(ldd /bin/$binaryname | egrep -o '/lib.*\.[0-9]')"
 
# Looping through the dependency list
for i in $list; do cp -v --parents "$i" "${mte}"; done

Vamos examinar o que esse script faz. A princípio, esse shell script pede o nome do binário, depois pega esse nome do binário e encontra toda a dependência desse binário e o salva dentro de uma variável de lista. Em seguida, ele executa um loop for que é executado em todos os itens da lista e copia a dependência de nosso arquivo “/bin” normal para nosso diretório chroot “mte”.

Salve este script em outro lugar e consulte-o quando criar um novo ambiente chroot.

Em seguida, altere a permissão do script e execute-o dentro do terminal.

chmod +x copydependancy.sh
  1. Como todas as dependências estão instaladas em nosso sistema, vamos ativar nosso ambiente chroot. O comando chroot padrão se parece com isso:
chroot [-OPTION] [PATH FOR NEW ROOT] [PATH FOR SERVER]

Mas para cumprir nosso propósito, executamos o seguinte comando para ativar nosso ambiente chroot.

sudo chroot ~/mte /bin/bash

O comando acima ativa um ambiente chroot no diretório “~/mte” e especifica a execução de um shell bash. Você pode ver uma mudança no prompt do seu terminal e agora pode usar o touch, rme ls comandos para criar, remover e listar arquivos respectivamente.

Para sair do ambiente chroot, execute o exit comando.

Se você deseja remover completamente o ambiente chroot, exclua o diretório “mte” do seu sistema de arquivos.

rm -rf ~/mte

Corrigir um bootloader quebrado usando o Chroot

A coisa mais fascinante sobre o chroot é que você pode entrar em um sistema quebrado e executar um comando dentro dele. Portanto, usando o chroot, você pode instalar facilmente uma atualização crítica para corrigir um sistema ou reinstalar todo o carregador de inicialização para corrigir o problema.

Chroot Wikimedia
Fonte da imagem: Fundação Wikimedia

Mas para isso, você deve ter um ambiente Linux ativo. Faça um USB inicializável baixando um ISO do Linux e inicializando a partir do USB. Dá-lhe um ambiente ao vivo para trabalhar. Monte sua partição do sistema para trabalhar com chroot.

sudo mount -t ext4 /dev/sda /mnt

Altere o “/dev/sda” com o nome da partição de sistema pretendida com a qual deseja trabalhar e deixe o carregador de inicialização grub encontrar as informações necessárias para corrigir o problema do carregador de inicialização.

sudo mount --bind /dev /mnt/dev &&
sudo mount --bind /dev/pts /mnt/dev/pts &&
sudo mount --bind /proc /mnt/proc &&
sudo mount --bind /sys /mnt/sys

Vamos fazer chroot no diretório “/mnt” e entrar no sistema quebrado.

sudo chroot /mnt

Instale, verifique e atualize o bootloader grub em seu sistema. Certifique-se de usar o nome de unidade adequado e não copie e cole esses comandos às cegas.

grub-install /dev/sda
grub-install --recheck /dev/sda
update-grub

Saia do shell usando o comando exit mencionado anteriormente. Desvincule os diretórios vinculados anteriormente e desmonte o sistema de arquivos. Execute esses comandos um após o outro consecutivamente.

sudo umount /mnt/sys &&
sudo umount /mnt/proc &&
sudo umount /mnt/dev/pts &&
sudo umount /mnt/dev &&
sudo umount /mnt

Reinicie o seu PC e desconecte o USB ativo. Quando o computador inicializar, seu bootloader grub brilhará como novo e tudo deve funcionar perfeitamente bem.

perguntas frequentes

O Chroot é seguro?

Chroot não implica segurança. Nunca teve a intenção de se tornar um. Por segurança, você pode usar o SELinux. Se você colocar alguém dentro de um diretório chroot, ele não terá acesso ao sistema de arquivos raiz, mas isso não significa que isso torne seu sistema inquebrável. Chroot também não significa menos segurança – apenas representa uma quantidade de segurança igual ao seu sistema principal. Nada mais e nada menos.

Quais são as limitações dos sistemas Chroot?

Um sistema Chroot não se destina a proteger contra adulteração intencional pelo usuário root. Em alguns sistemas, programas chroot podem obter privilégios suficientes para criar seu próprio ambiente chroot e sair da prisão chroot. Chroot não significa isolamento completo. Normalmente, você pode fazer o que quiser no espaço do usuário. Você pode acessar dispositivos de hardware e montar e ler qualquer coisa, desde que não precise instalar nenhum outro programa, então precisará do privilégio de root que não possui.

Por que o Chroot é chamado de prisão?

Chroot é chamado de jail, pois parece que você está dentro de um ambiente isolado. Você pode fazer o que quiser dentro desta jaula, mas não pode sair sem a permissão do usuário root. Além disso, você tem um suprimento limitado de utilitários fornecidos pelo usuário root e não pode instalar nada sozinho. Para todas essas restrições, é chamado de chroot jail.

Join our Newsletter and receive offers and updates! ✅

0 0 votes
Article Rating
Avatar of Routech

Routech

Routech is a website that provides technology news, reviews and tips. It covers a wide range of topics including smartphones, laptops, tablets, gaming, gadgets, software, internet and more. The website is updated daily with new articles and videos, and also has a forum where users can discuss technology-related topics.

Você pode gostar...

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x