chroot falla: no se puede ejecutar el comando `/ bin / bash ': no ​​existe tal archivo o directorio


16

Soy un novato chroot tratando de hacer una simple cárcel chroot pero me golpeo la cabeza contra el mismo problema una y otra vez ... Cualquier ayuda sería enormemente apreciada

Creé un directorio /usr/chrootque quiero usar como cárcel y creé subdirectorios debajo de él y copié las dependencias de /bin/bashél:

[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$ 

¿Alguien puede darme alguna idea de a dónde ir desde aquí?


¿Es esto un error tipográfico en la pregunta o un error en los pasos que realizó? cp /lib64/libdl.so.2 /udr/csr/chroot/lib/(debe ser en /usrlugar de /udr)
— pausa hasta nuevo aviso.

Eso es un artefacto de usar Putty para registrar la sesión de telnet, lo siento. Como sugiere, el comando real ingresado fue cp /lib64/libdl.so.2 / usr / chroot / lib /
— Mike Atkinson el

Respuestas:


30

El mensaje de error es engañoso : /bin/bash: No such file or directorypuede significar que /bin/bashno existe o que el cargador dinámico utilizado por /bin/bashno existe. (También recibirá este mensaje para un script si el intérprete en la #!línea no existe).

/bin/bashestá buscando /lib64/ld-linux-x86-64.so.2pero usted proporcionó /lib/ld-linux-x86-64.so.2. Hacer /usr/chroot/lib64un simbólico libo viceversa.


Lo siento, realmente aprecio la ayuda y estoy seguro de que tienes razón, ¡pero todavía estoy confundido! No estoy seguro de dónde ves que / bin / bash se proporciona con /lib/ld-linux-x86-64.so.2 y estoy aún más confundido ya que / usr / chroot / lib64 no existe. ¿Sería demasiado descarado pedir una lista de comandos? Entiendo los enlaces de Sym y cómo crearlos, pero estoy realmente confundido por lo que está sucediendo aquí y lo que está sugiriendo para corregirlo. ¡Muchas gracias por su ayuda!
— Mike Atkinson

1
@ Mike: Mira tus cpcomandos: copiaste archivos del /lib64sistema base /liben el chroot. Pero el binario bash todavía está buscando ld-linux-x86-64.so.2en /lib64(que no ha creado), no /lib. Se ahorrará dolores de cabeza al hacer /liby /lib64equivalentes dentro del chroot, por lo ejecute ln -s lib /usr/chroot/lib64. En cuanto a por qué el mensaje de error se trata bashy no se trata ld-linux-x86-64.so.2, consulte mi primer párrafo.
— Gilles 'SO- deja de ser malvado'

Eso funciona perfectamente, muchas gracias por tomarse el tiempo, ¡es enormemente apreciado!
— Mike Atkinson

Gran respuesta. En mi caso, el problema fue causado por rsync sin la bandera de preservar enlaces
— gtsouk

1
@miyalys If /libes un enlace simbólico para /usr/libluego poner un archivo en /usr/libél /lib, ¡ya que esos son el mismo directorio! Al principio, no funcionó al principio porque el cargador mantiene un caché del contenido de /liby /usr/lib, y comenzó a funcionar cuando se reconstruyó el caché. La ejecución ldconfigreconstruye el caché, y puede haberlo hecho usted o automáticamente, por ejemplo, un administrador de paquetes cuando instaló una actualización de software.
— Gilles 'SO- deja de ser malvado'


-1

También me enfrenté al mismo error. La mejor manera es encontrar la diferencia entre el contenido "/" de imagen de rescate (CD en vivo) y el contenido "/ mnt / sysimage".

El problema se resolvió copiando / bin y / sbin del directorio "/" a "/ mnt / sysimage", donde se eliminó accidentalmente.

#cp -r /bin /sbin /mnt/sysimage
#reboot

-4

debe intentar copiar el archivo .bashrc en el directorio de inicio. Y seguramente ayudará.


3
Esto no tiene sentido.
— Sven
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.