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 ls
pada 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
chroot
yang seharusnya dilakukan?/
direktori ke yang berbeda. Apakah saya perlu adabin
di direktori itu untuk menjalankan perintah?chroot
jail 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 berjalanchroot
, seperti yang Anda ketahui.Jawaban:
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/ls
dari/home/kuba/projects/jcubic/leash/usr/bin/
(Anda juga akan memerlukan pustaka bersama yang tergantung:)ldd /usr/bin/ls
.sumber
chroot lucid /bin/bash -c "ls /"
atauchroot /var/chroot /bin/bash -c "ls /"
chroot
adalah tempat yang baik untuk memulai ketika Anda ragu tentang sintaksis. Hal yang sama untuk perintah lain (bash
).Dimungkinkan untuk berjalan
ls
di root yang berbeda, tetapils
perintah dan semua file yang bergantung padanya harus ada di dalam root itu. Tidak ada cara untuk memulails
perintah, dan kemudian di dalam proses itu ubah root:ls
tidak memiliki fitur ini.Inti dari chroot adalah membatasi visibilitas file ke file di bawah direktori tertentu. Ketika Anda menjalankan
chroot ~/projects/jcubic/leash ls
,chroot
perintah 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 dipanggills
dalam 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
ls
perintah, Anda masih perlu menyalin lebih darils
. Untuk menjalankannyals
, Anda harus menyalinls
perintah dan juga semua file yang bergantung padanya. Karenals
ini adalah program yang terhubung secara dinamis, Anda memerlukan pemuat dinamisnya serta semua pustaka dinamis yang bergantung padanya. Jalankanldd /bin/ls
untuk mendaftar pustaka dinamis yang diperlukan. Sebagai contoh:Atau, cara yang lebih mudah untuk dijelajahi adalah dengan mendapatkan biner yang terhubung secara statis, misalnya BusyBox (tersedia di Debian dan turunannya sebagai
busybox-static
paket).sumber