chroot schlägt fehl - Befehl `/ bin / bash 'kann nicht ausgeführt werden: Keine solche Datei oder kein solches Verzeichnis

16

Ich bin ein Chroot-Neuling, der versucht, ein einfaches Chroot-Gefängnis zu bauen, aber ich stoße immer wieder mit dem Kopf gegen das gleiche Problem ... Jede Hilfe wäre sehr dankbar

Ich habe ein Verzeichnis erstellt /usr/chroot, das ich als Gefängnis verwenden möchte, und Unterverzeichnisse darunter erstellt und die Abhängigkeiten von /bin/bashdarin kopiert :

[root@WIG001-001 ~]# cd /usr/chroot/
[root@WIG001-001 chroot]# ls
[root@WIG001-001 chroot]# mkdir bin etc lib var home


[root@WIG001-001 chroot]# ldd /bin/bash        
linux-vdso.so.1 =>  (0x00007fff99dba000)        
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00000037a2000000)        
libdl.so.2 => /lib64/libdl.so.2 (0x000000379fc00000)        
libc.so.6 => /lib64/libc.so.6 (0x000000379f800000)        
/lib64/ld-linux-x86-64.so.2 (0x000000379f400000)

[root@WIG001-001 chroot]# cp /lib64/libtinfo.so.5 /usr/chroot/lib/  
[root@WIG001-001 chroot]# cp /lib64/libdl.so.2 /udr/csr/chroot/lib/  
[root@WIG001-001 chroot]# cp /lib64/libc.so.6 /usr/chroot/lib/  
[root@WIG001-001 chroot]# cp /lib64/ld-linux-x86-64.so.2 /usr/chroot/lib/  
[root@WIG001-001 chroot]# cp /bin/bash bin  
[root@WIG001-001 chroot]# pwd  
/usr/chroot  
[root@WIG001-001 chroot]# /usr/sbin/chroot .  
/usr/sbin/chroot: cannot run command `/bin/bash': No such file or directory  


it looks like the /bin/bash created under /usr/chroot is fine as the below works:  
[root@WIG001-001 chroot]# su - nobody -s /usr/chroot/bin/bash  
-bash-4.0$ 

Kann mir jemand eine Idee geben, wohin ich von hier aus gehen soll?

Mike Atkinson
quelle
Ist dies ein Tippfehler in der Frage oder ein Fehler in den Schritten, die Sie ausgeführt haben? cp /lib64/libdl.so.2 /udr/csr/chroot/lib/(sollte /usrstatt sein /udr)
Bis auf weiteres angehalten.
Das ist ein Artefakt von der Verwendung von Putty, um die Telnet-Sitzung zu protokollieren, sorry. Wie Sie vermuten, war der tatsächlich eingegebene Befehl cp /lib64/libdl.so.2 / usr / chroot / lib /
Mike Atkinson

Antworten:

30

Die Fehlermeldung ist irreführend : Dies/bin/bash: No such file or directory kann bedeuten, dass /bin/bashsie entweder nicht vorhanden ist oder dass der von verwendete dynamische Loader /bin/bashnicht vorhanden ist. (Diese Meldung wird auch für ein Skript angezeigt, wenn der Interpreter in der #!Zeile nicht vorhanden ist.)

/bin/bashist auf der Suche nach /lib64/ld-linux-x86-64.so.2aber Sie zur Verfügung gestellt /lib/ld-linux-x86-64.so.2. Machen Sie /usr/chroot/lib64ein Symbol liboder umgekehrt.

Gilles 'SO - hör auf böse zu sein'
quelle
Tut mir leid, ich weiß die Hilfe sehr zu schätzen und bin mir sicher, dass Sie Recht haben, aber ich bin immer noch verwirrt! Ich bin mir nicht sicher, wo / bin / bash mit /lib/ld-linux-x86-64.so.2 bereitgestellt wird und ich bin weiter verwirrt, da / usr / chroot / lib64 nicht existiert. Wäre es zu frech, nach einer Liste von Befehlen zu fragen? Ich verstehe sym-Links und wie man sie erstellt, bin aber wirklich verwirrt von dem, was hier passiert und was Sie vorschlagen, um es zu korrigieren. Vielen Dank für Ihre Hilfe!
Mike Atkinson
1
@Mike: Schau dir deine cpBefehle an: Du hast Dateien aus /lib64dem Basissystem /libin die Chroot kopiert . Aber die Bash-Binärdatei sucht immer noch ld-linux-x86-64.so.2in /lib64(die Sie nicht erstellt haben), nicht /lib. Sie sparen sich Kopfschmerzen , indem sie /libund /lib64in der chroot - Äquivalent, so laufen ln -s lib /usr/chroot/lib64. In meinem ersten Absatz wird erläutert, warum die Fehlermeldung ungefähr bashund nicht ungefähr ld-linux-x86-64.so.2ist.
Gilles 'SO- hör auf böse zu sein'
Das funktioniert perfekt, vielen Dank, dass Sie sich die Zeit genommen haben, es wird sehr geschätzt!
Mike Atkinson
Gute Antwort. In meinem Fall wurde das Problem durch rsync ohne die
Preserve-
1
@miyalys If /libist ein Symlink zum Einfügen /usr/libeiner Datei /usr/libin /lib, da dies dasselbe Verzeichnis ist! Zu Beginn hat es nicht funktioniert, da der Loader einen Cache mit dem Inhalt von /libund /usr/libführt und es funktioniert, als der Cache neu erstellt wurde. Beim Ausführen wird ldconfigder Cache neu erstellt. Dies wurde möglicherweise von Ihnen oder automatisch durchgeführt, z. B. von einem Paketmanager, als Sie ein Softwareupdate installiert haben.
Gilles 'SO - hör auf böse zu sein'
1

Mach einfach folgendes: mv /usr/chroot/lib /usr/chroot/lib64

Mark Wagner
quelle
-1

Ich war auch mit dem gleichen Fehler konfrontiert. Der beste Weg ist, den Unterschied zwischen dem Inhalt von "/" rescue image (live CD) und dem Inhalt von "/ mnt / sysimage" zu finden.

Das Problem wurde behoben, indem / bin und / sbin aus dem Verzeichnis "/" nach "/ mnt / sysimage" kopiert wurden, wo es versehentlich gelöscht wurde.

#cp -r /bin /sbin /mnt/sysimage
#reboot
Mayur
quelle
-4

Sie sollten versuchen, die .bashrc-Datei in das Ausgangsverzeichnis zu kopieren. und es wird sicherlich helfen.

Rohit Mittal
quelle
3
Das ist Unsinn.
Sven