Сбой chroot - не может выполнить команду `/ bin / bash ': такого файла или каталога нет

16

Я новичок в chroot, пытающийся сделать простую тюрьму для chroot, но я снова и снова бьюсь головой об одной и той же проблеме ... Любая помощь будет высоко цениться

Я создал каталог, /usr/chrootкоторый хочу использовать в качестве тюрьмы, создал подкаталоги в нем и скопировал в него зависимости /bin/bash:

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

Кто-нибудь может дать мне какую-либо идею, куда идти отсюда?

Майк Аткинсон
источник
Это опечатка в вопросе или ошибка в выполненных вами шагах? cp /lib64/libdl.so.2 /udr/csr/chroot/lib/(должно быть /usrвместо /udr)
Приостановлено до дальнейшего уведомления.
Это артефакт использования Putty для регистрации сессии telnet, извините. Как вы предполагаете, фактически введенная команда была cp /lib64/libdl.so.2 / usr / chroot / lib /
Майк Аткинсон

Ответы:

30

Сообщение об ошибке вводит в заблуждение : /bin/bash: No such file or directoryможет означать, что /bin/bashон не существует, или что используемый динамический загрузчик /bin/bashне существует. (Вы также получите это сообщение для скрипта, если интерпретатор в #!строке не существует.)

/bin/bashищет, /lib64/ld-linux-x86-64.so.2но вы предоставили /lib/ld-linux-x86-64.so.2. Сделать /usr/chroot/lib64символическое libили наоборот.

Жиль "ТАК - перестань быть злым"
источник
Извините, я действительно ценю помощь, и я уверен, что вы правы, но я все еще в замешательстве! Я не уверен, где вы видите / bin / bash предоставляется с /lib/ld-linux-x86-64.so.2, и я еще больше запутался, поскольку / usr / chroot / lib64 не существует. Было бы слишком дерзко просить список команд? Я понимаю символические ссылки и как их создавать, но меня действительно смущает то, что здесь происходит, и что вы предлагаете исправить. Большое спасибо за вашу помощь!
Майк Аткинсон
1
@Mike: Посмотрите на ваши cpкоманды: вы скопировали файлы из /lib64базовой системы в /libchroot. Но бинарный бинар все еще ищет ld-linux-x86-64.so.2в /lib64(который вы не создали), нет /lib. Вы избавите себя от головной боли, создавая /libи /lib64эквивалентные в chroot, так что бегите ln -s lib /usr/chroot/lib64. Что касается того, почему сообщение об ошибке примерно, bashа не о ld-linux-x86-64.so.2, см. Мой первый абзац.
Жиль "ТАК - перестань быть злым"
Это работает отлично, спасибо большое, что нашли время, это очень ценится!
Майк Аткинсон
Отличный ответ. В моем случае проблема была вызвана rsync без флага сохранения ссылок
gtsouk
1
@miyalys If /lib- это символическая ссылка для /usr/libразмещения файла /usr/libв /lib, так как это один и тот же каталог! Вначале это не сработало, потому что загрузчик хранит кэш содержимого /libи /usr/lib, и он начал работать, когда кэш был перестроен. Выполнение ldconfigперестраивает кэш, и это может быть сделано вами или автоматически, например, менеджером пакетов при установке обновления программного обеспечения.
Жиль "ТАК - прекрати быть злым"
1

Просто сделай это: mv /usr/chroot/lib /usr/chroot/lib64

Марк Вагнер
источник
-1

Я также столкнулся с той же ошибкой. Лучший способ - найти разницу между содержимым образа восстановления (live CD) "/" и содержимым "/ mnt / sysimage".

Проблема была решена путем копирования / bin и / sbin из каталога / в каталог / mnt / sysimage, где он был случайно удален.

#cp -r /bin /sbin /mnt/sysimage
#reboot
Mayur
источник
-4

Попробуйте скопировать файл .bashrc в домашнюю директорию. и это обязательно поможет.

Рохит Миттал
источник
3
Это нонсенс.
Свен