Eu tenho trela do shell do navegador e estou executando comandos do shell no php e pressionando-os novamente para o navegador. Acabei de descobrir o comando chroot e quero executar, por exemplo, ls
no diretório raiz do diretório alterado, na verdade, preciso executar bash -c "ls /"
. Eu tentei isso (tentei sem o sudo, mas não estava funcionando):
sudo chroot ~/projects/jcubic/leash ls
mas obteve erro:
chroot: failed to run command ‘ls’: No such file or directory
eu uso esse comando corretamente? É possível executar ls em um diretório raiz diferente?
quando tento executar chroot sem sudo, recebo este erro:
chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted
chroot
é suposto fazer?/
diretório para outro. Preciso terbin
nesse diretório para executar comandos?chroot
prisão antecipadamente com todos os binários que deseja executar, todas as bibliotecas necessárias e o carregador dinâmico (se o seu sistema operacional usar uma). Além disso, apenas o root pode ser executadochroot
, como você descobriu.Respostas:
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
/
sistema de arquivos.A maneira mais simples é copiar o
/usr/bin/ls
de para/home/kuba/projects/jcubic/leash/usr/bin/
(você também precisará das bibliotecas compartilhadas dependentes:)ldd /usr/bin/ls
.fonte
chroot lucid /bin/bash -c "ls /"
ouchroot /var/chroot /bin/bash -c "ls /"
chroot
é um bom lugar para começar quando você tiver dúvidas sobre a sintaxe. O mesmo para outros comandos (bash
).É possível executar
ls
em uma raiz diferente, mas ols
comando e todos os arquivos dos quais depende devem estar presentes nessa raiz. Não há como iniciar ols
comando e, nesse processo, altere a raiz:ls
não possui esse recurso.O objetivo de um chroot é limitar a visibilidade dos arquivos àqueles em um determinado diretório. Quando você executa
chroot ~/projects/jcubic/leash ls
, ochroot
comando altera a raiz de seu próprio processo (alterar o diretório raiz afeta apenas o processo que faz isso e qualquer processo que é executado posteriormente) e tenta executar um arquivo executável chamadols
em um diretório no caminho de pesquisa. Como a raiz está agora~/projects/jcubic/leash
, o executável deve estar presente em um diretório como~/projects/jcubic/leash/bin
.Se você deseja ter um sistema normal com os comandos usuais no chroot, é necessário instalar um. Ferramentas como debootstrap (para instalar um sistema Debian) ou ferramentas de provisionamento como o Docker (que configura um ambiente que é chroot e está confinado de outras maneiras) podem ajudar.
Se você deseja apenas o
ls
comando, ainda precisará copiar mais dels
. Para executarls
, você precisará copiar ols
comando e todos os arquivos dos quais depende. Comols
é um programa vinculado dinamicamente, você precisa do seu carregador dinâmico, bem como de todas as bibliotecas dinâmicas das quais depende. Executeldd /bin/ls
para listar as bibliotecas dinâmicas necessárias. Por exemplo:Como alternativa, uma maneira mais simples de explorar é obter um binário vinculado estaticamente, por exemplo, do BusyBox (disponível no Debian e derivados como o
busybox-static
pacote).fonte