Wenn ich den chroot
Befehl ausführe, wird ein Fehler ausgegeben:
failed to run command ‘/bin/bash’: No such file or directory
executable
chroot
USER3254789
quelle
quelle
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
quelle
/root/.bashrc
oder/root/.bash_profile
in Ihrem Computer verursacht werdenchroot
. Können Sie diese Dateien vorübergehend umbenennen? Kannst du auch sicherstellen, dassbash
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 kannldd /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.quelle
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:
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
quelle
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
Es wurde behoben, indem Folgendes ausgeführt wurde:
quelle
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)Sie müssen ldd gegen bash ausführen
ldd $(which bash)
, dann finden Sie möglicherweise eine fehlende Abhängigkeit. Wenn Sie beispielsweise lib64 für 64-Systeme nicht bereitstellen / kopieren, wird dies durch diesen Fehler verursacht.quelle
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
quelle