При запуске chroot
команды выдается ошибка:
failed to run command ‘/bin/bash’: No such file or directory
решение1
/bin/bash
Эта ошибка означает, что каталог отсутствует.внутри chroot. Убедитесь, что вы указали ему местонахождение bash
исполняемого файла (или другой оболочки) в chroot
каталоге.
Если у вас есть, /mnt/somedir/usr/bin/bash
то выполните chroot /mnt/somedir /usr/bin/bash
.
Помимо вышесказанного, вам также необходимо добавить libc
зависимости каталогов, как указано в ответе.здесь.
решение2
У меня был /bin/bash
внутренний chrooted каталог, но у меня не было /lib
и /lib64
внутри него. Сообщение от chroot
могло бы быть более описательным. "нет такого файла или каталога" на самом деле означает "Я не могу запустить это...".
/bin/bash
зависит, конечно libc
, от ld-linux
, libdl
и т. д., вы можете использовать ldd /bin/bash
, чтобы увидеть, какие библиотеки требуются.
- Вы можете найти
mount -o bind
эти каталоги в разделеchroot
- Или вы можете скопировать эти библиотеки в
chroot
, если вы не уверены, что chrooted-окружение не повредит их, например так:cp -a /usr rootfs/ cp -a /lib rootfs/ cp -a /lib64 rootfs/
решение3
chroot
пытается запустить оболочку, установленную в $SHELL
переменной окружения по умолчанию, но ищет ее в новом корневом каталоге, который, похоже, не содержит /bin/bash
, поэтому она не может запуститься.
Вы можете указать chroot запустить другую программу внутри нового корня, просто добавив ее в качестве параметра:
chroot /your/new/root /bin/foo --options...
Обратите внимание, что путь команды интерпретируетсявнутриваш новый корень, поэтому в этом примере вызываемая программа на самом деле находится в/your/new/root/bin/foo
решение4
Я получал ту же ошибку при попытке ssh к chrooted-аккаунту на удаленном сервере. В моем случае в удаленном каталоге lib64 отсутствовал следующий файл.Сервер Centos6.9
ld-linux-x86-64.so.2
Это было исправлено путем выполнения следующего:
cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/