Wenn ich den chroot
Befehl ausführe, wird ein Fehler ausgegeben:
failed to run command ‘/bin/bash’: No such file or directory
Wenn ich den chroot
Befehl ausführe, wird ein Fehler ausgegeben:
failed to run command ‘/bin/bash’: No such file or directory
Antworten:
Dieser Fehler bedeutet, dass sich in chroot kein /bin/bash
Verzeichnis befindet . Stellen Sie sicher, dass Sie darauf verweisen, wo sich die ausführbare Datei (oder die Datei einer anderen Shell) im Verzeichnis befindet.bash
chroot
Wenn Sie /mnt/somedir/usr/bin/bash
dann ausgeführt habenchroot /mnt/somedir /usr/bin/bash
/root/.bashrc
oder /root/.bash_profile
in Ihrem Computer verursacht werden chroot
. Können Sie diese Dateien vorübergehend umbenennen? Kannst du auch sicherstellen, dass bash
das ausführbar ist ( chmod +x /chroot/bin/bash
)?
Ich hatte ein /bin/bash
chrooted-Verzeichnis, aber ich hatte nicht / lib und / lib64 darin. Die Nachricht von chroot könnte aussagekräftiger sein. "Keine solche Datei oder kein solches Verzeichnis" bedeutet wirklich "Ich kann das nicht ausführen ...".
/bin/bash
hängt natürlich von libc, ld-linux, libdl usw. ab, mit denen man sehen kann ldd /bin/bash
, welche bibliotheken es benötigt.
1) Sie können mount -o bind
diese Verzeichnisse unter chroot speichern. 2) Oder Sie können diese Bibliotheken nach chroot kopieren, wenn Sie der chroot-Umgebung nicht vertrauen, sie nicht zu beschädigen.
cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
chroot
versucht, die Shell zu starten, die $SHELL
standardmäßig in Ihrer Umgebungsvariablen festgelegt ist, sucht sie jedoch in Ihrem neuen Stammverzeichnis, das scheinbar keine enthält /bin/bash
, sodass sie nicht gestartet werden kann.
Sie können chroot anweisen, ein anderes Programm im neuen Stammverzeichnis zu starten, indem Sie es einfach als Parameter hinzufügen:
chroot /your/new/root /bin/foo --options...
Beachten Sie, dass der Pfad des Befehls in Ihrem neuen Stammverzeichnis interpretiert wird. In diesem Beispiel befindet sich das aufgerufene Programm also in/your/new/root/bin/foo
Beim Versuch, eine Verbindung zu einem chroot-Konto auf einem Remote-Server herzustellen, trat derselbe Fehler auf. In meinem Fall fehlte mir die folgende Datei im entfernten lib64-Verzeichnis. Server ist Centos6.9
ld-linux-x86-64.so.2
Es wurde behoben, indem Folgendes ausgeführt wurde:
cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/
cp -r /lib /lib64 /secure/jail
es repariert habe , brauchte ich etwas von lib und lib64, und ich habe mir nicht die Mühe gemacht, genau herauszufinden, was. (wahrscheinlich, weil ich Multiarch aktiviert hatte)
Wenn Sie eine Cross-Kompilierung durchführen, müssen Sie einen QEMU-Simulator verwenden, der / mnt / somedir / bin / bash ausführen kann, sobald Sie die QEMU-Arm-Static (ich mache dies für armhf) in das Verzeichnis / mnt / somedir / usr kopieren / bin Du wirst in der Lage sein, Chroot zu machen.
Weitere Informationen hierzu finden Sie unter https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html