chroot gagal - tidak dapat menjalankan perintah `/ bin / bash ': Tidak ada file atau direktori seperti itu

16

Saya seorang pemula chroot yang mencoba membuat penjara chroot sederhana tetapi saya membenturkan kepala saya terhadap masalah yang sama berulang kali ... Bantuan apa pun akan sangat dihargai

Saya telah membuat direktori /usr/chrootyang ingin saya gunakan sebagai jail dan membuat subdirektori di bawahnya dan menyalin dependensi /bin/bashke dalamnya:

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

Adakah yang bisa memberi saya ide ke mana harus pergi dari sini?

Mike Atkinson
sumber
Apakah ini salah ketik dalam pertanyaan atau kesalahan dalam langkah-langkah yang Anda lakukan? cp /lib64/libdl.so.2 /udr/csr/chroot/lib/(seharusnya /usrbukan /udr)
Dijeda sampai pemberitahuan lebih lanjut.
Itu artefak dari menggunakan Putty untuk mencatat sesi telnet, maaf. Seperti yang Anda sarankan, perintah yang sebenarnya dimasukkan adalah cp /lib64/libdl.so.2 / usr / chroot / lib /
Mike Atkinson

Jawaban:

30

Pesan kesalahan menyesatkan : /bin/bash: No such file or directorybisa berarti itu /bin/bashtidak ada, atau bahwa loader dinamis yang digunakan oleh /bin/bashtidak ada. (Anda juga akan mendapatkan pesan ini untuk skrip jika penerjemah di #!telepon tidak ada.)

/bin/bashsedang mencari /lib64/ld-linux-x86-64.so.2tetapi Anda berikan /lib/ld-linux-x86-64.so.2. Buat /usr/chroot/lib64simbolis untuk libatau sebaliknya.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Maaf, saya sangat menghargai bantuannya & saya yakin Anda benar, tetapi saya masih bingung! Saya tidak yakin di mana Anda melihat / bin / bash sedang disediakan dengan /lib/ld-linux-x86-64.so.2 & Saya selanjutnya bingung karena / usr / chroot / lib64 tidak ada. Apakah terlalu nakal untuk meminta daftar perintah? Saya mengerti tautan sym & cara membuatnya, tetapi saya benar-benar bingung dengan apa yang terjadi di sini dan apa yang Anda sarankan untuk memperbaikinya. Terima kasih banyak atas bantuan Anda!
Mike Atkinson
1
@ Mike: Lihatlah cpperintah Anda: Anda menyalin file dari /lib64dalam sistem dasar ke /libdalam chroot. Tapi biner bash masih mencari ld-linux-x86-64.so.2di /lib64(yang belum Anda buat), bukan /lib. Anda akan menyelamatkan diri dari sakit kepala dengan membuat /libdan /lib64menyamakannya di chroot, jadi jalankan ln -s lib /usr/chroot/lib64. Mengenai mengapa pesan kesalahannya adalah tentang bashdan bukan tentang ld-linux-x86-64.so.2, lihat paragraf pertama saya.
Gilles 'SANGAT berhenti menjadi jahat'
Itu bekerja dengan sempurna, terima kasih banyak telah meluangkan waktu, itu sangat dihargai!
Mike Atkinson
Jawaban yang bagus Dalam kasus saya masalahnya disebabkan oleh rsync tanpa flag tautan pertahankan
gtsouk
1
@miyalys If /libadalah symlink untuk /usr/libmeletakkan file di /usr/libdalamnya /lib, karena itu adalah direktori yang sama! Pada firasat, itu tidak berhasil pada awalnya karena loader menyimpan cache dari konten /libdan /usr/lib, dan mulai bekerja ketika cache dibangun kembali. Menjalankan ldconfigmembangun kembali cache, dan itu mungkin telah dilakukan oleh Anda atau secara otomatis misalnya oleh manajer paket ketika Anda menginstal pembaruan perangkat lunak.
Gilles 'SO- stop being evil'
1

Lakukan saja ini: mv /usr/chroot/lib /usr/chroot/lib64

Mark Wagner
sumber
-1

Saya juga menghadapi kesalahan yang sama. Cara terbaik adalah menemukan perbedaan antara konten gambar rescue (live CD) "/" dan "/ mnt / sysimage".

Masalah diselesaikan dengan mengatasi / bin dan / sbin dari direktori "/" ke "/ mnt / sysimage" di mana ia dihapus secara tidak sengaja.

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

Anda harus mencoba menyalin file .bashrc di direktori home. dan itu pasti akan membantu.

Rohit Mittal
sumber
3
Ini tidak masuk akal.
Sven