Um chroot na UNIX Operating Systems é uma operação que altera o diretório raiz aparente para o processo de execução atual e seus filhos. Os programas executados neste ambiente modificado não podem acessar os arquivos fora da árvore de diretório designada. Isso limita essencialmente seu acesso a uma árvore de diretório e, portanto, eles recebem o nome 'CHROOT CHRANE'.
A idéia é que você crie uma árvore de diretório na qual copie ou vincule em todos os arquivos do sistema necessários para que um processo seja executado. Em seguida, você usa a chamada do sistema chroot para alterar o diretório raiz para estar na base desta nova árvore e inicia o processo em execução nesse ambiente de Krooted. Como não pode realmente fazer referência a caminhos fora da raiz modificada, não pode ler ou escrever maliciosamente para esses locais.
Por que é necessário e como é diferente das máquinas virtuais?
Isso é virtualização no nível do sistema operacional e é frequentemente usado em vez de máquinas virtuais para criar várias instâncias isoladas do sistema operacional host. Esta é uma virtualização no nível do kernel e praticamente não possui despesas gerais em comparação com máquinas virtuais, que são a virtualização da camada de aplicação, como resultado, fornece um método muito bom para criar várias instâncias isoladas no mesmo hardware. Uma máquina virtual (VM) é uma implementação de software de uma máquina e eles geralmente exploram o que é conhecido como virtualização de hardware para renderizar uma imagem virtual de um sistema operacional em funcionamento.
Como usar a prisão de chroot
O comando básico para criar uma prisão de chroot é o seguinte:
chroot /path/to/new/root command
OR
chroot /path/to/new/root /path/to/server
OR
chroot [options] /path/to/new/root /path/to/server
Nota: Somente um usuário raiz/privilegiado pode usar a chamada do sistema chroot. Um usuário não privilegiado com o acesso ao comando pode ignorar a cadeia de chroot.
Passos para criar um mini-jail para o comando 'Bash' e 'LS'
1. Crie um diretório que atue 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 a Etapa 4.
$ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu
3.Run o comando 'que': Execute o comando 'que' para encontrar a localização do comando ls e bash.fter em execução que comanda cópia esses binários no diretório 'bin' de nossa prisão. Certifique -se de não ter nenhum desses comandos alias. A partir de agora estaríamos nos referindo ao nosso diretório como 'Preso' Diretório 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. Copie bibliotecas/objetos apropriados : Para os executáveis em nosso Preso Diretório para trabalhar, precisamos copiar as bibliotecas/objetos apropriados no diretório preso. Por padrão, o executável analisa os locais que começam com '/'. 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 diretórios apropriados.
$ 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/
Da mesma forma 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-linux-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 este
5. Sudo Chroot: Execute este comando para alterar a raiz para o diretório preso junto com o caminho para o shell. Por padrão, ele tentará carregar '/bin/sh' shell.
$ cd ..
$ sudo chroot jailed /bin/bash
Você pode enfrentar esse 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 pelas quais o arquivo não existe (o que é óbvio) ou quando a biblioteca de carregamento falha ou não está disponível. Verifique duas vezes se as bibliotecas estiverem no local correto.
bytes python para string
6. Uma nova concha deve aparecer: É a nossa festa presa. Atualmente, temos apenas 2 comandos instalados Bash e LS. Felizmente, CD e PWD são comandos incorporados no Bash Shell e, portanto, você pode usá -los também.
Voar ao redor do diretório, tente acessar 'CD /../' ou algo semelhante. Tente quebrar a prisão provavelmente você não será capaz. :)
Para sair da prisão
$ exit
A parte mais importante e interessante é que quando você corre
$ ps aux
E encontre o processo que você descobrirá que existe apenas um processo
root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bash
Curiosamente, os processos na concha presa são executados como um processo infantil simples dessa concha. Todos os processos dentro do ambiente preso são apenas um processo simples de nível de usuário no sistema operacional host e são isolados pelos espaços para nome fornecidos pelo kernel, portanto, há uma sobrecarga mínima e, como um benefício adicional, obtemos isolamento.
Da mesma forma, você pode adicionar mais comandos ao seu ambiente virtual preso. Para adicionar programas mais complexos, pode ser necessário criar mais diretórios como '/proc' e '/dev'. Isso aumenta a complexidade do processo. Espero que não exijam isso para o nosso propósito.
Isso é tudo o que você precisa saber sobre Chroot e a prisão de diretórios. Nosso objetivo final é entender o que são contêineres e como os serviços como a AWS (Amazon Web Services) Google Cloud e Docker são capazes de fornecer tantas instâncias virtuais de sistemas operacionais sob demanda. Além disso, como o sys-admin executa vários servidores da web para vários domínios em uma única máquina física. Isso foi apenas um passo para entender