Como executar o comando “ls” no chroot?

8

Eu tenho o shell do navegador leash e estou executando comandos do shell em php e returing-os para o navegador e acabei de descobrir o chroot comando e eu quero correr por exemplo ls no diretório raiz na raiz alterada, Na verdade eu preciso executar bash -c "ls /" . Eu tentei isso (eu tentei sem sudo mas não estava funcionando):

sudo chroot ~/projects/jcubic/leash ls

mas tem erro:

chroot: failed to run command ‘ls’: No such file or directory

eu uso este comando corretamente? É possível executar ls no diretório raiz diferente?

quando tento executar o chroot sem sudo, recebo este erro:

chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted
    
por jcubic 10.06.2017 / 10:20

2 respostas

12
chroot: failed to run command ‘ls’: No such file or directory

Para executar qualquer comando dentro do chroot, você precisa ter este programa disponível no chroot (já que ele não pode usar o programa instalado no / do sistema de arquivos.

A maneira mais simples é copiar o /usr/bin/ls para /home/kuba/projects/jcubic/leash/usr/bin/ (você também precisará das bibliotecas compartilhadas dependentes: ldd /usr/bin/ls ).

    
por 10.06.2017 / 10:30
5

É possível executar ls em uma raiz diferente, mas o comando ls e todos os arquivos dos quais ele depende devem estar presentes dentro dessa raiz. Não há como iniciar o comando ls e, em seguida, dentro desse processo, alterar a raiz: ls não possui esse recurso.

O ponto principal de um chroot é limitar a visibilidade dos arquivos àqueles sob um determinado diretório. Quando você executa chroot ~/projects/jcubic/leash ls , o comando chroot altera a raiz de seu próprio processo (a alteração do diretório raiz afeta apenas o processo que o realiza e qualquer processo executado subseqüentemente) e, em seguida, tenta executar um arquivo executável chamado ls em um diretório no caminho de pesquisa. Como a raiz agora é ~/projects/jcubic/leash , o executável deve estar presente em um diretório como ~/projects/jcubic/leash/bin .

Se você quer ter um sistema normal com os comandos usuais no chroot, você precisa instalar um. Ferramentas como debootstrap (para instalar um sistema Debian) ou ferramentas de provisionamento como o Docker (que configura um ambiente que é chrooted e está confinado de outras formas) pode ajudar.

Se você quiser apenas o comando ls , ainda precisará copiar mais de ls . Para executar ls , você precisará copiar o comando ls , assim como todos os arquivos dos quais ele depende. Como ls é um programa vinculado dinamicamente, você precisa do carregador dinâmico e de todas as bibliotecas dinâmicas das quais depende. Execute ldd /bin/ls para listar as bibliotecas dinâmicas necessárias. Por exemplo:

mkdir -p bin lib/x86_64-linux-gnu
rsync -a /bin/ls bin/
rsync -a /lib/x86_64-linux-gnu/ lib/x86_64-linux-gnu/
chroot . ls

Como alternativa, uma forma mais simples de explorar é obter um binário vinculado estaticamente, por exemplo, de BusyBox (disponível em Debian e derivados como o pacote busybox-static .

cp /bin/busybox .
chroot . ./busybox ls
    
por 11.06.2017 / 02:06

Tags