Header Ads

Como usar o comando chroot no Linux

O comando chroot pode enviar você para a cadeia, manter isolados os ambientes de desenvolvimento ou teste ou apenas melhorar a segurança do sistema.Nós mostramos a você a maneira mais fácil de usá-lo.

O que é um chroot?

Se você tentar medir a utilidade de um comando, leve em consideração a funcionalidade que ele fornece e a facilidade de uso. Se for muito complicado para as pessoas usarem ou for muito longo para fazer com que elas tentem usá-la, a funcionalidade também pode ser zero. Se ninguém o usa, ele não fornece nenhuma funcionalidade.

Em discussões com usuários do Linux pessoalmente e em fóruns, parece que o comando chroot é aquele que está vinculadocomo sendo difícil de usar, ou muito persnickety e tedioso para configurar. Parece que esse ótimo utilitário não é usado tanto quanto poderia ser. Com o chroot, você pode configurar e executar programas ou shells interativos, como o Bash, em um sistema de arquivos encapsulado, impedido de interagir com ele. seu sistema de arquivos regular. Tudo dentro do ambiente chroot é escrito e contido. Nada no ambiente chroot pode ver além de seu próprio diretório raiz especial, sem passar para privilégios de root. Isso deu a esse tipo de ambiente o apelido de uma prisão chroot.O termo "prisão" ”não deve ser confundido com o comando sjail do FreeBSD, que cria um ambiente chroot mais seguro do que o ambiente chroot usual.

Mas, na verdade, existe uma maneira muito direta de usarchroot, pelo qual vamos avançar. Estamos usando comandos regulares do Linux, que funcionarão em todas as distribuições. Algumas distribuições Linux possuem ferramentas dedicadas para configurar ambientes chroot, como o debootstrap para Ubuntu, mas estamos sendo agnósticos aqui.

Quando você deve usar um chroot?

Um ambiente chroot fornece funcionalidade semelhante à 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, como o VirtualBox ou o Virtual Machine Manager. Também não precisa ter um kernel instalado no sistema cativo.O sistema cativo compartilha seu kernel existente.

Em alguns sentidos, os ambientes chroot estão mais próximos de contêineres como o LXC do que de máquinas virtuais. Eles são leves, rápidos de implantar, e a criação e ativação de um podem ser automatizadas. Como os contêineres, uma maneira conveniente de configurá-los é instalar o suficiente do sistema operacional para que você possa realizar o que é necessário.O “ o que é necessário ”a pergunta é respondida, observando como você usará seu ambiente chroot.

Alguns usos comuns são:

Desenvolvimento de software e verificação de produto. Os desenvolvedores escrevem o software e a equipe de verificação do produto (PV) o testa.Às vezes, são encontrados problemas pelo PV que não podem ser replicados no computador do desenvolvedor.O desenvolvedor possui todos os tipos de ferramentas e bibliotecas instaladas no computador de desenvolvimento que o usuário médio e o PV não possuem. Freqüentemente, um 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.O chroot permite que os desenvolvedores tenham um ambiente simples de cativeiro de baunilha em seu computador, no qual eles podem instalar o software antes de entregá-lo ao PV.O ambiente cativo pode ser configurado com as dependências mínimas necessárias que o software exige.

Reduzindo o risco de desenvolvimento.O desenvolvedor pode criar um ambiente de desenvolvimento dedicado, para que nada que aconteça nele possa atrapalhar seu PC real.

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

Recuperação e atualizações do sistema de arquivos: Se uma instalação do Linux se tornar inoperante, você poderá usar o chrootpara montar o sistema de arquivos danificado em um ponto de montagem em um Live CD. Isso permite que você trabalhe no sistema danificado e tente corrigi-lo como se fosse montado normalmente no root /. Isso significa que os caminhos de arquivo esperados no sistema danificado serão referenciados corretamente no diretório raiz e não no ponto de montagem do Live CD. Uma técnica semelhante foi usada no artigo que descreve como migrar o sistema de arquivos Linux do ext2 ou ext3 para o ext4.

Aplicativos para cercar.A execução de um servidor FTP ou outro dispositivo conectado à Internet em um ambiente chroot limita o dano que um invasor externo pode causar. Esta pode ser uma etapa valiosa para fortalecer a segurança do seu sistema.

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

Criando um ambiente chroot

Precisamos de um diretório para atuar como o diretório raiz do ambiente chroot. Para que tenhamos uma maneira abreviada de nos referir a esse diretório, criaremos uma variável e armazenaremos o nome do diretório nele. Aqui estamos configurando uma variável para armazenar um caminho para o “ testroot ”diretório.Não importa se esse diretório ainda não existe, vamos criá-lo em breve. Se o diretório existir, ele deverá estar vazio.

 chr = / home / dave / testroot 

Se o diretório não estiver ’ existe, precisamos criá-lo. Podemos fazer isso com este comando.A opção -p (pais) garante que todos os diretórios-pai ausentes sejam criados ao mesmo tempo:

 mkdir -p $ chr 

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

Liste os diretórios que você precisa criar na expansão {} brace.

 mkdir-p $ chr / 

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

 cd $ chr 

Vamos copiar os binários de que precisamos em nosso ambiente minimalista do Linux a partir do seu arquivo / bin normal / bin ”diretório em nosso chroot “ / bin ”diretório.A opção -v (detalhada) faz com que o cp nos diga o que está fazendo ao executar cada ação de cópia.

 cp -v / bin / $ chr 

Os arquivos são copiados para nós:

Esses binários terão dependências. Precisamos descobrir o que são e copiar esses arquivos em nosso ambiente também, caso contrário, bash, touch, rm e ls não serão capazes de funcionar. Precisamos fazer isso por vez para cada um dos nossos comandos escolhidos. Faremos Bash primeiro.O comando ldd listará as 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 de cada vez será demorado e propenso a erros.

Felizmente, podemos semi-automatizá-lo. Vamos listar as dependências novamente e, desta vez, formaremos uma lista. Então, percorreremos a lista que copia os arquivos.

Aqui estamos usando o ldd para listar as dependências e alimentar os resultados através de um canal no egrep. Usar egrep é o mesmo que usar grep com a opção -E (expressões regulares estendidas).A opção -o (apenas correspondência) restringe a saída às partes correspondentes das linhas. Estamos procurando por arquivos de biblioteca correspondentes que terminem com um número [0-9].

 list = "$ (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 percorrê-la com o seguinte loop, copiando os arquivos um por vez. Estamos usando a variável i para percorrer a lista. Para cada membro da lista, copiamos o arquivo para o diretório raiz chroot, que é o valor contido em $ chr.

A opção -v (verbose) faz com que o cp anuncie cada cópia à medida que a executa.A opção --parents garante que todos os diretórios-pai ausentes sejam criados no ambiente chroot.

 para i na lista $;faça cp -v --parents "$ i" "$";done 

E esta é a saída:

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

Podemos recuperar o comando do nosso histórico de comandos pressionando a tecla Seta para cima algumas vezes e, em seguida, faça a edição.O comando de cópia em loop não precisa ser alterado.

Aqui nós usamos a tecla Seta para cima para encontrar o comando e nós o editamos para dizer toque em vez dissodo bash.

 list = "$ (ldd / bin / touch | egrep -o '/lib.*\.[0-9,95')"

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

 para i na lista $;faça cp -v --parents "$ i" "$";done 

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

Agora podemos editar a linha de comando da lista para ls:

 list = "$ (ldd / bin / ls | egrep -o '/lib.*\.[0-9,95')"

Novamente, usaremos o mesmo comando de loop. Ele não se importa com quais arquivos estão na lista. Ele funciona cegamente através da lista, copiando os arquivos para nós.

 para i na lista $;faça cp -v --parents "$ i" "$";done 

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

Editamos a linha de comando da lista para oda última vez, fazendo com que funcione para a rm:

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

Usamos o comando de cópia em loop uma última vez:

 para i na lista $;faça cp -v --parents "$ i" "$";done 

A última de nossas dependências é copiada em nosso ambiente chroot. Finalmente estamos prontos para usar o comando chroot. Este comando define a raiz do ambiente chroot e especifica qual aplicativo será executado como shell.

 sudo chroot $ chr / bin / bash 

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

Podemos experimentar os comandos que trouxemos para oambiente.

 ls 

 ls / home / dave / Documents 

O comando ls funciona comoesperávamos quando o usamos no ambiente. Quando tentamos acessar um diretório fora do ambiente, o comando falha.

Podemos usar o toque para criar um arquivo, ls para listá-lo e rm para removê-lo.

 toque em sample_file. txt 

 ls 

 rm sample_file. txt 

 ls 

Obviamente, também podemos usar os comandos internos que o shell Bash fornece. Se você digitar help na linha de comando, o Bash os listará para você.

 help 

Use exit para sair do ambiente chroot:

 exit 

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

 rm -r testroot / 

Isso excluirá recursivamente os arquivos e diretórios no ambiente chroot.

Automatize por conveniência

Se você está pensando que ambientes chroot podem ser úteis para você, mas eles são um pouco complicados de configurar, lembre-se de que você sempre pode aliviar a tensão e o risco de tarefas repetitivas usando aliases, funçõese scripts.

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

Via: How to Geek

Veja Também:

Nenhum comentário