chroot échoue - ne peut pas exécuter la commande `/ bin / bash ': aucun fichier ou répertoire de ce type

16

Je suis un novice chroot essayant de faire une simple prison chroot mais je me cogne la tête contre le même problème maintes et maintes fois ... Toute aide serait grandement appréciée

J'ai créé un répertoire /usr/chrootque je veux utiliser comme prison et créé des sous-répertoires sous celui-ci et copié les dépendances de /bin/bashcelui-ci:

[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$ 

Quelqu'un peut-il me donner une idée d'où aller d'ici?

Mike Atkinson
la source
Est-ce une faute de frappe dans la question ou une erreur dans les étapes que vous avez effectuées? cp /lib64/libdl.so.2 /udr/csr/chroot/lib/(devrait être /usrau lieu de /udr)
pause jusqu'à nouvel ordre.
C'est un artefact de l'utilisation de Putty pour enregistrer la session telnet, désolé. Comme vous le suggérez, la commande réelle entrée était cp /lib64/libdl.so.2 / usr / chroot / lib /
Mike Atkinson

Réponses:

30

Le message d'erreur est trompeur : /bin/bash: No such file or directorypeut signifier soit qu'il /bin/bashn'existe pas, soit que le chargeur dynamique utilisé par /bin/bashn'existe pas. (Vous obtiendrez également ce message pour un script si l'interpréteur sur la #!ligne n'existe pas.)

/bin/bashcherche /lib64/ld-linux-x86-64.so.2mais vous avez fourni /lib/ld-linux-x86-64.so.2. Faites /usr/chroot/lib64un symbolique libou vice versa.

Gilles 'SO- arrête d'être méchant'
la source
Désolé, j'apprécie vraiment l'aide et je suis sûr que vous avez raison, mais je suis toujours confus! Je ne sais pas où vous voyez / bin / bash est fourni avec /lib/ld-linux-x86-64.so.2 et je suis encore plus confus car / usr / chroot / lib64 n'existe pas. Serait-il trop insolent de demander une liste de commandes? Je comprends les liens sym et comment les créer, mais je suis vraiment confus par ce qui se passe ici et ce que vous proposez de le corriger. Merci beaucoup pour votre aide!
Mike Atkinson
1
@Mike: Regardez vos cpcommandes: vous avez copié des fichiers du /lib64système de base /libdans le chroot. Mais le binaire bash cherche toujours ld-linux-x86-64.so.2dans /lib64(que vous n'avez pas créé), non /lib. Vous vous épargnerez des maux de tête en créant /libet /lib64équivalent dans le chroot, alors exécutez ln -s lib /usr/chroot/lib64. Quant à savoir pourquoi le message d'erreur est sur bashet non sur ld-linux-x86-64.so.2, voir mon premier paragraphe.
Gilles 'SO- arrête d'être méchant'
Cela fonctionne parfaitement, merci beaucoup d'avoir pris le temps, c'est massivement apprécié!
Mike Atkinson
Très bonne réponse. Dans mon cas, le problème a été causé par rsync sans l'indicateur de liens de conservation
gtsouk
1
@miyalys If /libest un lien symbolique vers /usr/libpuis mettre un fichier dans le /usr/libmet dedans /lib, car ce sont le même répertoire! À un moment donné, cela n'a pas fonctionné au début parce que le chargeur conserve un cache du contenu de /libet /usr/lib, et il a commencé à fonctionner lorsque le cache a été reconstruit. L'exécution ldconfigreconstruit le cache, et cela peut avoir été fait par vous ou automatiquement par exemple par un gestionnaire de packages lorsque vous avez installé une mise à jour logicielle.
Gilles 'SO- arrête d'être méchant'
1

Faites juste ceci: mv /usr/chroot/lib /usr/chroot/lib64

Mark Wagner
la source
-1

J'ai également fait face à la même erreur. Le meilleur moyen est de trouver la différence entre le contenu de l'image de secours (live CD) "/" et le contenu "/ mnt / sysimage".

Le problème a été résolu en copiant / bin et / sbin du répertoire "/" vers "/ mnt / sysimage" où il a été accidentellement supprimé.

#cp -r /bin /sbin /mnt/sysimage
#reboot
mayur
la source
-4

vous devez essayer de copier le fichier .bashrc dans le répertoire personnel. et cela vous aidera sûrement.

Rohit Mittal
la source
3
Ça n'a pas de sens.
Sven