chroot: Befehl '/ bin / bash' konnte nicht ausgeführt werden: Keine solche Datei oder kein solches Verzeichnis

54

Wenn ich den chrootBefehl ausführe, wird ein Fehler ausgegeben:

failed to run command ‘/bin/bash’: No such file or directory 
USER3254789
quelle
1
Kann die Frage als ein reines Duplikat von unix.stackexchange.com/questions/76490/… betrachtet werden ? Die Antworten auf die Fragen stellen eine mögliche Lösung für das Problem dar, die definitiv einen Link wert ist, aber das macht die Frage nicht zu einem Duplikat davon.
Karl Richter
1
Das Problem für mich war, dass ich eine 32-Bit-Live-CD zum Mounten einer 64-Bit-Betriebssystemdiskette und zum Chrooten verwendet habe. Ein 32-Bit-Kernel kann keine 64-Bit-Bash ausführen. Die Lösung bestand darin, eine 64-Bit-Live-CD zu erhalten. (Das verknüpfte Duplikat hat keinerlei Beziehung.)
Leons
Dies ist kein Duplikat, obwohl die Erklärung der Problemursache für beide Fragen gilt. Die Frage, die als Duplikat markiert ist, bezieht sich auf fehlende Bibliotheken in einer generischen Installation, wohingegen es sich bei dieser Frage speziell um einen Fehler handelt, der in einer Chroot-Umgebung auftritt.
bschlueter

Antworten:

33

Dieser Fehler bedeutet, dass sich in chroot kein /bin/bashVerzeichnis befindet . Stellen Sie sicher, dass Sie darauf verweisen, wo sich die ausführbare Datei (oder die Datei einer anderen Shell) im Verzeichnis befindet.bashchroot

Wenn Sie /mnt/somedir/usr/bin/bashdann ausgeführt habenchroot /mnt/somedir /usr/bin/bash

phoops
quelle
2
Es gibt eine / bin / bash-Datei im rootfs-Ordner
USER3254789
2
Dies kann durch einen Fehler in der Befehlszeile /root/.bashrcoder /root/.bash_profilein Ihrem Computer verursacht werden chroot. Können Sie diese Dateien vorübergehend umbenennen? Kannst du auch sicherstellen, dass bashdas ausführbar ist ( chmod +x /chroot/bin/bash)?
Phoops
aspade @ home-ba: ~ / DebianArm $ sudo chmod + x rootfs / bin / bash. aspade @ home-ba: ~ / DebianArm $ sudo chroot rootfs. chroot: Befehl '/ bin / bash' konnte nicht ausgeführt werden: Keine solche Datei oder kein solches Verzeichnis
USER3254789
37
Ich habe es herausgefunden. bin / bash ist da, aber ich hatte nicht / lib und / lib64 drin. / bin / bash hängt (von c) von libc, ld-linux, libdl usw. ab. Es hat also gereicht, cp -a / usr rootfs /, cp -a / lib rootfs / und cp -a / lib64 rootfs / zu verwenden. (Sie können diese ofc einbinden, aber ich habe sie kopiert, weil ich etwas Gefährliches ausführen möchte, das diese Dateien in rootfs beschädigen könnte.) Die Nachricht von chroot könnte aussagekräftiger sein. "Keine solche Datei oder kein solches Verzeichnis" bedeutet wirklich "Ich kann diese Datei nicht ausführen ...".
Dalibor Filus
1
@EmilVatai hinzugefügt :-)
Dalibor Filus
13

Ich hatte ein /bin/bashchrooted-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/bashhä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 binddiese 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/
Dalibor Filus
quelle
Dies wird Duplikate erzeugen. Dies ist nicht optimiert, wenn wir viele Setups haben
yellowandred
1
Dies erzeugt keine Duplikate, wenn Sie die erste Methode verwenden (markiert als 1). Der zweite ist nützlich, wenn Sie in eine nicht vertrauenswürdige Umgebung wechseln. Zum Beispiel haben Sie eine Partition mit einem Trojaner oder so.
Dalibor Filus
4

chrootversucht, die Shell zu starten, die $SHELLstandardmäß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

crater2150
quelle
2
Es gibt eine / bin / bash-Datei in der rootfs-Datei, also was ist das Problem
USER3254789
1
an wen auch immer das runtergestimmt wurde: obwohl dies nicht das problem im fall des posters war, ist dies eine gültige und nicht unwahrscheinliche erklärung des fehlers in der frage. Wenn Sie ein anderes Problem bemerken, hinterlassen Sie bitte einen Kommentar, wenn Sie etwas ablehnen.
crater2150
2

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/
shawn
quelle
Ich habe es nicht für mich repariert, aber da ich cp -r /lib /lib64 /secure/jailes 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)
Hanshenrik
0

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.

Error
quelle
0

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

Jainam MJ
quelle
1
Es gibt keinen Hinweis darauf, dass der Benutzer dies versucht.
Kusalananda
Die Fehler sind in beiden Fällen gleich. Wenn jemand, der Cross-Compilation macht, mit diesem Problem konfrontiert ist, kann er die Antwort hier finden.
Jainam MJ