Como usar o comando chroot no Linux

Conteúdo

Um indicador de terminal na tela de um laptop Linux.

a chroot O comando pode mandá-lo para a prisão, mantenha seus ambientes de desenvolvimento ou teste isolados, ou simplesmente melhore a segurança do seu sistema. Mostramos a maneira mais fácil de usá-lo.

O que é um chroot?

Se você tentar medir a utilidade de um comando, você deve prestar atenção à funcionalidade que ele oferece e sua facilidade de uso. Se for muito complicado para as pessoas usarem ou muito longo para que queiram tentar usá-lo, a funcionalidade também pode ser zero. Se ninguem usa, não fornece nenhuma funcionalidade.

Em discussões com usuários Linux, pessoalmente e em fóruns, parece que o chroot O comando é considerado difícil de usar ou muito exigente e tedioso de configurar. Parece que este utilitário fantástico não é usado tanto quanto deveria.

Com chroot você pode configurar e executar programas interativos ou shells como o Bash em um sistema de arquivos encapsulado que não pode interagir com o seu sistema de arquivos frequente. Tudo dentro do chroot o ambiente é fechado e contido. Nada no chroot O ambiente pode ver além de seu próprio diretório raiz especial sem escalar para privilégios de raiz. Isso rendeu a este tipo de ambiente o apelido de um chroot célula. O fim “prisão” não ser confundido com FreeBSD's jail comando, que cria um chroot meio Ambiente isso é mais seguro do frequente chroot meio Ambiente.

Mas, na realidade, existe uma maneira muito simples de usar chroot, o que vamos estudar. Estamos usando comandos regulares do Linux que funcionarão em todas as distros. Algumas distribuições Linux têm ferramentas dedicadas para configurar chroot ambientes, O que debootstrap para Ubuntu, mas aqui estamos sendo independentes da distribuição.

Quando devo fazer chroot?

UMA chroot O ambiente oferece funcionalidade equivalente à de uma máquina virtual, mas é uma solução mais leve. O sistema cativo não precisa de um hipervisor para ser instalado e configurado, O que VirtualBox o Virtual Machine Manager. Você também não precisa ter um kernel instalado no sistema cativo. O sistema cativo compartilha seu kernel existente.

Em algumas formas, chroot ambientes estão mais próximos de contêineres como LXC do que máquinas virtuais. São leves, rápido para implementar e criar e ativar um pode ser automatizado. Da mesma forma que os contêineres, uma maneira conveniente de configurá-los é instalar o suficiente do sistema operacional para que ele possa realizar o que é necessário. A pergunta “o que é necessário” você responde olhando para como você vai usar o seu chroot meio Ambiente.

Alguns usos comuns são:

Desenvolvimento de software e verificação de produto. Os desenvolvedores escrevem software e equipe de verificação de produto (PV) prove isso. As vezes, PV detecta problemas que não podem ser replicados no computador do desenvolvedor. O desenvolvedor tem todos os tipos de ferramentas e bibliotecas instaladas em seu computador de desenvolvimento do que o usuário médio. (y PV) não terá. Frequentemente, novo software que funciona para o desenvolvedor, mas não para outros, acaba usando um recurso no PC do desenvolvedor que não foi incluído na versão de teste do software. chroot permite que os desenvolvedores tenham um ambiente cativo simples em seu computador no qual eles podem mergulhar o software antes de entregá-lo ao PV. O ambiente cativo pode ser configurado com dependências mínimas exigidas pelo software.

Reduz o risco de desenvolvimento. O desenvolvedor pode criar um ambiente de desenvolvimento dedicado para que nada do que aconteça possa estragar seu PC real.

Executando software desatualizado. Às vezes, você só precisa ter uma versão antiga de algo em execução. Se o software mais antigo tiver requisitos que entrem em conflito ou sejam incompatíveis com a sua versão do Linux, poderia chroot um ambiente para software problemático.

Recuperação e atualizações do sistema de arquivos: Se uma instalação do Linux parar de funcionar, Você pode usar chroot montar o sistema de arquivos corrompido em um ponto de montagem em um Live CD. Isso permite que você trabalhe no sistema danificado e tente consertá-lo como se ele fosse montado regularmente na raiz. /. Isso significa que os caminhos de arquivo esperados no sistema corrompido serão referenciados corretamente a partir do diretório raiz e não do ponto de montagem do Live CD.. Uma técnica equivalente foi usada no post que descreve como migrar o sistema de arquivos Linux de ext2 ou ext3 para ext4.

Aplicativos de ringfencing. Execute um servidor FTP ou outro dispositivo conectado à Internet em um chroot O ambiente limita os danos que um invasor externo pode causar. Esta pode ser uma etapa valiosa no fortalecimento da segurança do seu sistema..

RELACIONADO: Como migrar sistemas de arquivos Ext2 ou Ext3 para Ext4 no Linux

Crie um ambiente chroot

Precisamos de um diretório que atue como o diretório raiz do chroot meio Ambiente. Para que tenhamos uma forma abreviada de se referir a esse diretório, vamos criar uma variável e armazenar o nome do diretório nela. Aqui estamos configurando uma variável para salvar um caminho para o diretório “testroot”. Não importa se este diretório ainda não existe, vamos criar em breve. Se o diretório existir, deveria estar vazio.

chr = / home / dave / testroot

Se o diretório não existe, devemos criá-lo. Podemos fazer isso com este comando. a -p Opção (pais) garante que diretórios pessoais ausentes sejam criados ao mesmo tempo:

mkdir -p $ chr

Precisamos criar diretórios para conter as partes do sistema operacional chroot o ambiente vai exigir isso. Vamos configurar um ambiente Linux minimalista que usa o Bash como um shell interativo. Também incluiremos o touch, rm, e ls comandos. Isso nos permitirá usar todos os comandos internos do Bash e touch, rm, e ls. Seremos capazes de criar, listar e remover arquivos e usar o bash. E, neste exemplo simples, isso é tudo.

Liste os diretórios que você precisa criar dentro do {} expansão espartilho.

mkdir -p $ chr /{bin,lib,lib64}

Agora vamos mudar o diretório para o nosso novo diretório raiz.

cd $ chr

Vamos copiar os binários que precisamos em nosso ambiente Linux minimalista de seu diretório “/ bin” frequente em nosso chroot diretório “/ bin”. a -v Opção (detalhado) faz cp diga-nos o que você está fazendo ao fazer cada ação de cópia.

cp -v / bin /{bash,tocar,ls,rm} $chr / am

Os arquivos são copiados para nós:

Esses binários terão dependências. Precisamos descobrir o que são e copiar Essa arquivos em nosso ambiente também, caso contrário bash, touch, rm, e ls não vai poder funcionar. Precisamos fazer isso por sua vez para cada um de nossos comandos escolhidos. Primeiro vamos bater. a ldd o comando será listar dependências para nós.

ldd / bin / bash

As dependências são identificadas e listadas na janela do terminal:

Precisamos copiar esses arquivos em nosso novo ambiente. Escolher os detalhes dessa lista e copiá-los um ao mesmo tempo será demorado e sujeito a erros.

Por sorte, podemos semi-automatizar isso. Vamos listar as dependências novamente, e desta vez vamos formar uma lista. Então vamos percorrer a lista copiando os arquivos.

Aqui estamos usando ldd para listar as dependências e alimentar os resultados por meio de um tubo em egrep. Usando egrep é o mesmo que usar grep com ele -E (expressões regulares estendidas). a -o Opção (apenas coincidência) restringe a saída às partes correspondentes das linhas. Estamos procurando por arquivos de biblioteca correspondentes terminados em um número [0-9].

lista ="$(ldd / bin / bash | egrep -o '/lib.*.[0-9]')"

Podemos verificar o conteúdo da lista usando echo:

echo $ list

Agora que temos a lista, podemos passar por isso com o ciclo seguinte, copiando arquivos um por um. Estamos usando a variável i para percorrer a lista. Para cada membro da lista, copiamos o arquivo para o nosso chroot diretório raiz que é o valor contido em $chr.

a -v (detalhado) opção causa cp para anunciar cada cópia à medida que você a faz. a --parents A opção garante que diretórios pessoais ausentes sejam criados no chroot meio Ambiente.

para i em $ list; fazer cp -v --parents "$eu" "${chr}"; feito

E esta é a saída:

Usaremos essa técnica para capturar as dependências de cada um dos outros comandos. E vamos usar a técnica de loop para fazer a cópia real. A boa notícia é que só precisamos fazer uma pequena edição no comando que reúne as dependências.

Podemos recuperar o comando de nosso histórico de comandos pressionando o botão Up Arrow tecle algumas vezes e depois faça a edição. O comando loopback não precisa ser alterado.

Aqui nós usamos o Up Arrow para encontrar o comando, e nós editamos para dizer touch ao invés de bash.

lista ="$(ldd / bin / touch | egrep -o '/lib.*.[0-9]')"

Agora podemos repetir exatamente o mesmo comando de loop de antes:

para i em $ list; fazer cp -v --parents "$eu" "${chr}"; feito

E nossos arquivos são copiados para nós:

Agora podemos editar o list linha de comando para ls:

lista ="$(ldd / bin / ls | egrep -o '/lib.*.[0-9]')"

Novamente, vamos usar o mesmo comando de loop. Não importa quais arquivos estão na lista. Trabalhe cegamente na lista, copiando arquivos para nós.

para i em $ list; fazer cp -v --parents "$eu" "${chr}"; feito

E as dependências para ls eles são copiados para nós:

Nós editamos o list linha de comando da última vez, o que o faz funcionar para rm:

lista ="$(ldd / bin / ls | egrep -o '/lib.*.[0-9]')"

Usamos o comando loop copy uma última vez:

para i em $ list; fazer cp -v --parents "$eu" "${chr}"; feito

A última de nossas dependências é copiada para nosso chroot meio Ambiente. Finalmente, estamos prontos para usar o chroot comando. Este comando define a raiz do chroot ambiente e especificar qual aplicativo executar como shell.

sudo chroot $ chr / bin / bash

Nosso chroot o ambiente agora está ativo. O prompt da janela do terminal mudou e o shell interativo está sendo tratado pelo bash shell em nosso ambiente.

Podemos testar os comandos que trouxemos para o ambiente.

ls
ls / home / dave / Documentos

a ls O comando funciona como esperamos quando o usamos dentro do ambiente. Quando tentamos entrar em um diretório fora do ambiente, comando falha.

Podemos usar touch para criar um arquivo, ls para listar, e rm para removê-lo.

toque em sample_file.txt
ls
rm sample_file.txt
ls

De qualquer forma, também podemos usar os comandos integrados fornecidos pelo shell Bash. Se você escrever help na linha de comando, Bash irá listá-los para você.

ajuda

Use a saída para sair do chroot meio Ambiente:

saída

Se você deseja remover o chroot ambiente, você pode simplesmente excluí-lo:

rm -r testroot /

Isso removerá recursivamente os arquivos e diretórios no chroot meio Ambiente.

Automatize para sua conveniência

Se você está pensando que chroot Ambientes podem ser úteis para você, mas são um pouco complicados de configurar, lembre-se de que você sempre pode eliminar o estresse e o risco de tarefas repetitivas por meio do uso de apelidos, funções e scripts.

RELACIONADO: Como criar aliases e funções de shell no Linux

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.