Bagaimana cara menjalankan perintah "ls" di chroot?

8

Saya memiliki leash browser dan saya menjalankan perintah shell di php dan menyimpannya di browser dan saya baru saja menemukan perintah chroot dan saya ingin menjalankan misalnya lspada direktori root pada root yang diubah, Sebenarnya saya perlu menjalankan bash -c "ls /". Saya sudah mencoba ini (Saya sudah mencoba tanpa sudo tetapi tidak berhasil):

sudo chroot ~/projects/jcubic/leash ls

tapi ada kesalahan:

chroot: failed to run command ‘ls’: No such file or directory

saya menggunakan perintah ini dengan benar? Apakah mungkin menjalankan ls pada direktori root yang berbeda?

ketika saya mencoba menjalankan chroot tanpa sudo, saya mengalami kesalahan ini:

chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted
jcubic
sumber
3
Apakah Anda mengerti apa chrootyang seharusnya dilakukan?
Satō Katsura
1
@ SatoKatsura Jika saya mengerti benar saya mengubah /direktori ke yang berbeda. Apakah saya perlu ada bindi direktori itu untuk menjalankan perintah?
jcubic
8
Ya: Anda harus mengisi chrootjail terlebih dahulu dengan semua binari yang ingin Anda jalankan, semua perpustakaan yang mereka butuhkan, dan pemuat dinamis (jika OS Anda menggunakannya). Juga hanya root yang dapat berjalan chroot, seperti yang Anda ketahui.
Satō Katsura

Jawaban:

12
chroot: failed to run command ‘ls’: No such file or directory

Untuk menjalankan perintah apa pun di dalam chroot, Anda harus memiliki program ini tersedia di chroot (karena tidak dapat menggunakan program yang diinstal di /sistem file.

Cara paling sederhana adalah menyalin dari /usr/bin/lsdari /home/kuba/projects/jcubic/leash/usr/bin/(Anda juga akan memerlukan pustaka bersama yang tergantung:) ldd /usr/bin/ls.

Jakuje
sumber
Saya telah menemukan artikel ini di help.ubuntu.com, bagaimana saya harus menjalankan chroot, karena saya tidak dapat menemukan informasi itu. Haruskah saya menjalankan chroot lucid /bin/bash -c "ls /"atauchroot /var/chroot /bin/bash -c "ls /"
jcubic
@ jcubic sangat tergantung apa yang ingin Anda capai. Halaman manual chrootadalah tempat yang baik untuk memulai ketika Anda ragu tentang sintaksis. Hal yang sama untuk perintah lain ( bash).
Jakuje
5

Dimungkinkan untuk berjalan lsdi root yang berbeda, tetapi lsperintah dan semua file yang bergantung padanya harus ada di dalam root itu. Tidak ada cara untuk memulai lsperintah, dan kemudian di dalam proses itu ubah root: lstidak memiliki fitur ini.

Inti dari chroot adalah membatasi visibilitas file ke file di bawah direktori tertentu. Ketika Anda menjalankan chroot ~/projects/jcubic/leash ls, chrootperintah mengubah root dari prosesnya sendiri (mengubah direktori root hanya memengaruhi proses yang melakukannya dan proses apa pun yang kemudian dijalankannya), kemudian mencoba menjalankan file yang dapat dieksekusi yang dipanggil lsdalam direktori di jalur pencarian. Karena root sekarang ~/projects/jcubic/leash, executable harus ada di direktori seperti ~/projects/jcubic/leash/bin.

Jika Anda ingin memiliki sistem normal dengan perintah biasa di chroot, Anda harus menginstalnya. Alat seperti debootstrap (untuk menginstal sistem Debian) atau alat penyediaan seperti Docker (yang mengatur lingkungan yang chroot dan dibatasi dengan cara lain) dapat membantu.

Jika Anda hanya menginginkan lsperintah, Anda masih perlu menyalin lebih dari ls. Untuk menjalankannya ls, Anda harus menyalin lsperintah dan juga semua file yang bergantung padanya. Karena lsini adalah program yang terhubung secara dinamis, Anda memerlukan pemuat dinamisnya serta semua pustaka dinamis yang bergantung padanya. Jalankan ldd /bin/lsuntuk mendaftar pustaka dinamis yang diperlukan. Sebagai contoh:

mkdir -p bin lib/x86_64-linux-gnu
rsync -a /bin/ls bin/
rsync -a /lib/x86_64-linux-gnu/ lib/x86_64-linux-gnu/
chroot . ls

Atau, cara yang lebih mudah untuk dijelajahi adalah dengan mendapatkan biner yang terhubung secara statis, misalnya BusyBox (tersedia di Debian dan turunannya sebagai busybox-staticpaket).

cp /bin/busybox .
chroot . ./busybox ls
Gilles 'SANGAT berhenti menjadi jahat'
sumber