Wenn ich den chroot
Befehl ausführe, wird ein Fehler angezeigt:
failed to run command ‘/bin/bash’: No such file or directory
Antwort1
/bin/bash
Dieser Fehler bedeutet, dass kein Verzeichnis vorhanden istinnerhalb von Chroot. Stellen Sie sicher, dass Sie es auf die Stelle bash
im Verzeichnis verweisen, an der sich die ausführbare Datei (oder eine andere Shell) befindet chroot
.
Wenn ja, /mnt/somedir/usr/bin/bash
führen Sie es aus chroot /mnt/somedir /usr/bin/bash
.
Abgesehen von den oben genannten müssen Sie auch libc
Verzeichnisabhängigkeiten hinzufügen, wie in der Antwort erwähntHier.
Antwort2
Ich hatte /bin/bash
ein chroot-Verzeichnis drin, aber kein /lib
und /lib64
drin. Die Nachricht von chroot
könnte aussagekräftiger sein. „Keine solche Datei oder kein solches Verzeichnis“ bedeutet eigentlich „Ich kann das nicht ausführen …“.
/bin/bash
hängt natürlich von libc
, ld-linux
, libdl
usw. ab. Sie können verwenden ldd /bin/bash
, um zu sehen, welche Bibliotheken erforderlich sind.
- Sie finden
mount -o bind
diese Verzeichnisse unterchroot
chroot
Wenn Sie nicht darauf vertrauen, dass die chroot-Umgebung sie nicht beschädigt, können Sie diese Bibliotheken auch nach kopieren. Gehen Sie dazu folgendermaßen vor:cp -a /usr rootfs/ cp -a /lib rootfs/ cp -a /lib64 rootfs/
Antwort3
chroot
versucht, die Shell zu starten, die $SHELL
standardmäßig in Ihrer Umgebungsvariable festgelegt ist, sucht jedoch in Ihrem neuen Stammverzeichnis danach, das anscheinend nichts enthält /bin/bash
, sodass es nicht gestartet werden kann.
Sie können chroot anweisen, ein anderes Programm innerhalb des neuen Stammverzeichnisses zu starten, indem Sie es einfach als Parameter hinzufügen:
chroot /your/new/root /bin/foo --options...
Beachten Sie, dass der Pfad des Befehls interpretiert wirdinnenIhr neues Stammverzeichnis, so dass in diesem Beispiel das aufgerufene Programm tatsächlich in/your/new/root/bin/foo
Antwort4
Ich habe denselben Fehler erhalten, als ich versucht habe, per SSH auf ein Chroot-Konto auf einem Remote-Server zuzugreifen. In meinem Fall fehlte die folgende Datei im Remote-Verzeichnis lib64.Server ist Centos6.9
ld-linux-x86-64.so.2
Das Problem wurde durch die Ausführung des Folgenden behoben:
cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/