GeeksforGeeks

o que é uma cadeia chroot?

um chroot em sistemas operacionais Unix é uma operação que muda o diretório raiz aparente para o processo atual em execução e seus filhos. Os programas que correm neste ambiente modificado não podem acessar os arquivos fora da árvore de diretórios designada. Isso essencialmente limita o seu acesso a uma árvore de diretórios e, assim, eles recebem o nome “cadeia chroot”.

a idéia é que você crie uma árvore de diretórios onde você copia ou link em todos os arquivos do sistema necessários para um processo ser executado. Você então usa a chamada do sistema chroot para mudar o diretório raiz para estar na base desta nova árvore e iniciar o processo em execução nesse ambiente chrooted. Uma vez que ele não pode realmente referenciar caminhos fora da raiz modificada, ele não pode maliciosamente ler ou escrever para esses locais.

por que é necessário e como é diferente das máquinas virtuais?
esta é uma virtualização de nível de Sistema Operacional e é muitas vezes usado em vez de máquinas virtuais para criar várias instâncias isoladas do sistema operacional host. Esta é uma virtualização de nível de kernel e não tem praticamente nenhuma sobrecarga em comparação com máquinas virtuais, que são uma virtualização de camada de aplicação, como resultado que fornece um método muito bom para a criação de múltiplas instâncias isoladas no mesmo hardware. Uma máquina virtual (VM) é uma implementação de software de uma máquina e muitas vezes eles exploram o que é conhecido como a virtualização de Hardware para renderizar uma imagem virtual de um sistema operacional funcional.

como usá-lo?
o comando básico para criar uma prisão chroot é o seguinte::

 chroot /path/to/new/root command OR chroot /path/to/new/root /path/to/server OR chroot /path/to/new/root /path/to/server

Nota: Apenas um usuário root / privilegiado pode usar a chamada do sistema chroot. Um usuário não privilegiado com acesso ao comando pode contornar a cadeia chroot.

passos para criar uma mini-prisão para o comando’ bash ‘e’ ls ‘

1. Crie um diretório que atuará como a raiz do comando.

 $ mkdir jailed $ cd jailed

2. Crie todos os diretórios essenciais para o comando Executar: dependendo do seu sistema operacional, os diretórios necessários podem mudar. Logicamente, criamos todos esses diretórios para manter uma cópia das bibliotecas necessárias. Para ver o que todos os diretórios são necessários, consulte o Passo 4.

 $ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu

3.Execute o comando “qual”: execute o comando “qual” para encontrar a localização do comando ls e bash. Depois de executar qual comando, copie esses binários no diretório ‘bin’ da nossa prisão. Certifica-te de que não tens nenhuma destas ordens alijadas. A partir de agora, estaríamos nos referindo ao nosso diretório como diretório ‘preso’ por conveniência.

 $ unalias ls # Required only if you have aliased ls command $ unalias bash # Required only if you have aliased bash command $ cp $(which ls) ./bin/ $ cp $(which bash) ./bin/

4. Copiar as bibliotecas/objectos apropriados: para que os executáveis do nosso directório de cadeia funcionem, precisamos de copiar as bibliotecas/objectos apropriados no directório de cadeia. Por padrão, o executável olha para os locais começando por ‘/’. Para encontrar as dependências, usamos o comando ‘ldd’

$ ldd $(which bash) linux-vdso.so.1 => (0x00007ffc75dd4000) libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f6577768000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6577564000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f657719a000) /lib64/ld-linux-x86-64.so.2 (0x000055979f3fd000)

execute os seguintes comandos para criar pastas apropriadas.

$ cp /lib/x86_64-linux-gnu/libtinfo.so.5 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/$ cp /lib64/ld-linux-x86-64.so.2 lib64/

similarmente para ls,

$ ldd $(which ls) linux-vdso.so.1 => (0x00007fff4f05d000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9a2fd07000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9a2f93e000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9a2f6cd000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9a2f4c9000) /lib64/ld-liux-x86-64.so.2 (0x000055e836c69000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9a2f2ac000)
$ cp /lib/x86_64-linux-gnu/libselinux.so.1 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libpcre.so.3 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/$ cp /lib64/ld-linux-x86-64.so.2 lib64/$ cp /lib/x86_64-linux-gnu/libpthread.so.0 lib/x86_64-linux-gnu/

a estrutura final do Diretório deve ser semelhante a esta,

cadeia Chroot

5. Sudo chroot: execute este comando para mudar o root para o directório fechado, juntamente com a localização da linha de comandos. Por padrão, ele vai tentar carregar’ /bin/sh ‘ shell.

 $ cd .. $ sudo chroot jailed /bin/bash

poderá enfrentar este erro ao executar o comando chroot,

chroot: failed to run command `/bin/bash': No such file or directory

isso pode ser devido a 2 razões, ou o arquivo não existe (o que é óbvio), ou quando a biblioteca de carregamento falha ou não está disponível. Verifique novamente se os libários estão no local correto.

6. Uma nova concha deve aparecer: é a nossa festa de prisão. Atualmente temos apenas 2 comandos instalados, bash e ls. Felizmente cd e pwd são comandos builtin na shell bash, e assim você pode usá-los também.

vagueia pelo directório, tenta aceder ao ‘ cd /..ou algo parecido. Tenta fugir da cadeia, provavelmente não serás capaz. 🙂

Para sair da prisão,

 $ exit

O mais importante e interessante é que, quando você executar,

 $ ps aux

e encontrar o processo, você vai descobrir que não existe apenas um processo de,

root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bash

Curiosamente, os processos em que o preso shell executar como um simples processo filho deste shell. Todos os processos dentro do ambiente preso, são apenas um processo de nível de usuário simples no sistema operacional host e são isolados pelos espaços de nomes fornecidos pelo kernel, assim, há uma sobrecarga mínima e como um benefício adicional temos isolamento.

uma cópia do diretório da bash-prisão aqui explicado pode ser baixada a partir daqui.

da mesma forma, você pode adicionar mais comandos ao seu ambiente virtual de prisão. Para adicionar programas mais complexos, você pode precisar criar mais diretórios, como, ‘/proc’ e ‘/dev’. Estes aumentam a complexidade do processo. Esperemos que não o necessitemos para o nosso propósito.

isto é tudo o que você precisa saber sobre chroot e a prisão de diretórios. Nosso objetivo final é entender o que são containers e como são serviços como AWS (Amazon Web Services), Google Cloud e Docker capazes de fornecer tantas instâncias virtuais de sistemas operacionais sob demanda. Além disso, como é que o sys-admin executa vários servidores web para vários domínios em uma única máquina física. Este foi apenas um passo para o entendimento,🙂

  • https://help.ubuntu.com/community/DebootstrapChroot
  • https://wiki.archlinux.org/index.php/Install_from_existing_Linux
  • http://serverfault.com/questions/162362/chroot-fails-cannot-run-command-bin-bash-no-such-file-or-directory
  • https://wiki.archlinux.org/index.php/change_root

Sobre o Autor:
Pinkesh Badjatiya vem de IIIT Hyderabad. Ele é um geek no coração com projetos amplos que vale a pena procurar. Seu trabalho de projeto pode ser visto aqui.

se também quiser mostrar o seu blog aqui, por favor veja GBlog para escrever em blogues convidados em GeeksforGeeks.

Deixe uma resposta

O seu endereço de email não será publicado.