chroot falha - não é possível executar o comando `/ bin / bash ': esse arquivo ou diretório não existe

16

Eu sou um novato em chroot tentando fazer uma prisão chroot simples, mas estou batendo a cabeça contra o mesmo problema várias vezes ... Qualquer ajuda seria apreciada em massa

Criei um diretório /usr/chrootque quero usar como prisão e criei subdiretórios sob ele e copiei as dependências /bin/bashdele:

[root@WIG001-001 ~]# cd /usr/chroot/
[root@WIG001-001 chroot]# ls
[root@WIG001-001 chroot]# mkdir bin etc lib var home


[root@WIG001-001 chroot]# ldd /bin/bash        
linux-vdso.so.1 =>  (0x00007fff99dba000)        
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00000037a2000000)        
libdl.so.2 => /lib64/libdl.so.2 (0x000000379fc00000)        
libc.so.6 => /lib64/libc.so.6 (0x000000379f800000)        
/lib64/ld-linux-x86-64.so.2 (0x000000379f400000)

[root@WIG001-001 chroot]# cp /lib64/libtinfo.so.5 /usr/chroot/lib/  
[root@WIG001-001 chroot]# cp /lib64/libdl.so.2 /udr/csr/chroot/lib/  
[root@WIG001-001 chroot]# cp /lib64/libc.so.6 /usr/chroot/lib/  
[root@WIG001-001 chroot]# cp /lib64/ld-linux-x86-64.so.2 /usr/chroot/lib/  
[root@WIG001-001 chroot]# cp /bin/bash bin  
[root@WIG001-001 chroot]# pwd  
/usr/chroot  
[root@WIG001-001 chroot]# /usr/sbin/chroot .  
/usr/sbin/chroot: cannot run command `/bin/bash': No such file or directory  


it looks like the /bin/bash created under /usr/chroot is fine as the below works:  
[root@WIG001-001 chroot]# su - nobody -s /usr/chroot/bin/bash  
-bash-4.0$ 

Alguém pode me dar alguma idéia para onde ir a partir daqui?

Mike Atkinson
fonte
Isso é um erro de digitação na pergunta ou um erro nas etapas que você executou? cp /lib64/libdl.so.2 /udr/csr/chroot/lib/(deve estar em /usrvez de /udr)
pausado até novo aviso.
É um artefato usar o Putty para registrar a sessão de telnet, desculpe. Como você sugere, o comando real entrou foi cp /lib64/libdl.so.2 / usr / chroot / lib /
Mike Atkinson

Respostas:

30

A mensagem de erro é enganosa : /bin/bash: No such file or directorypode significar que /bin/bashnão existe ou que o carregador dinâmico usado por /bin/bashnão existe. (Você também receberá esta mensagem para um script se o intérprete na #!linha não existir.)

/bin/bashestá procurando, /lib64/ld-linux-x86-64.so.2mas você forneceu /lib/ld-linux-x86-64.so.2. Faça /usr/chroot/lib64um simbólico libou vice-versa.

Gilles 'SO- parar de ser mau'
fonte
Desculpe, eu realmente aprecio a ajuda e tenho certeza que você está certo, mas ainda estou confuso! Não tenho certeza de onde você vê / bin / bash está sendo fornecido com /lib/ld-linux-x86-64.so.2 e ainda estou confuso porque / usr / chroot / lib64 não existe. Seria atrevido pedir uma lista de comandos? Entendo links simbólicos e como criá-los, mas estou realmente confuso com o que está acontecendo aqui e com o que você está sugerindo para corrigi-lo. Muito obrigado pela sua ajuda!
21810 Mike Atkinson
11
@ Mike: Olhe para seus cpcomandos: você copiou arquivos do /lib64sistema básico para /libo chroot. Mas o binário festa ainda está procurando ld-linux-x86-64.so.2em /lib64(que você não tenha criado), não /lib. Você vai economizar dores de cabeça fazendo /libe /lib64equivalente no chroot, então corra ln -s lib /usr/chroot/lib64. Quanto ao motivo pelo qual a mensagem de erro é sobre bashe não sobre ld-linux-x86-64.so.2, veja o meu primeiro parágrafo.
Gilles 'SO- stop be evil'
Isso funciona perfeitamente, muito obrigado por reservar um tempo, é muito apreciado!
21410 Mike Atkinson
Ótima resposta. No meu caso, o problema foi causado por rsync sem a preservar bandeira ligações
gtsouk
11
@miyalys Se /libé um link simbólico para /usr/libcolocar um arquivo, /usr/libcoloca-o /lib, pois esses são o mesmo diretório! Em um palpite, ele não funcionou no início porque o carregador mantém um cache do conteúdo de /libe /usr/libe começou a funcionar quando o cache foi reconstruído. A execução ldconfigrecria o cache e isso pode ter sido feito por você ou automaticamente, por exemplo, por um gerenciador de pacotes quando você instalou uma atualização de software.
Gilles 'SO- stop be evil' '' -
1

Apenas faça o seguinte: mv /usr/chroot/lib /usr/chroot/lib64

Mark Wagner
fonte
-1

Eu também enfrentei o mesmo erro. A melhor maneira é encontrar a diferença entre o conteúdo da imagem de recuperação (CD ao vivo) "/" e o conteúdo "/ mnt / sysimage".

O problema foi resolvido copiando / bin e / sbin do diretório "/" para "/ mnt / sysimage", onde foi excluído acidentalmente.

#cp -r /bin /sbin /mnt/sysimage
#reboot
mayur
fonte
-4

você deve copiar o arquivo .bashrc no diretório inicial. e isso vai ajudar com certeza.

Rohit Mittal
fonte
3
Isso não faz sentido.
Sven