it-swarm-id.com

chroot "jail" - apa itu dan bagaimana cara menggunakannya?

Saya telah mendengar/membaca banyak tentang chroot jail di linux tetapi belum pernah menggunakannya (saya menggunakan Fedora sehari-hari), jadi apa itu chroot "jail"? Kapan dan mengapa saya bisa menggunakannya/tidak menggunakannya dan apakah ada hal lain yang harus saya ketahui? Bagaimana cara saya membuatnya?

107
user119

Penjara chroot adalah cara untuk mengisolasi suatu proses dan anak-anaknya dari sisa sistem. Seharusnya hanya digunakan untuk proses yang tidak berjalan sebagai root, karena pengguna root dapat keluar dari penjara dengan sangat mudah.

Idenya adalah Anda membuat pohon direktori tempat Anda menyalin atau menautkan semua file sistem yang diperlukan agar proses dapat berjalan. Anda kemudian menggunakan chroot() system call untuk mengubah direktori root menjadi di dasar pohon baru ini dan memulai proses yang berjalan di lingkungan chroot. Karena sebenarnya tidak dapat mereferensikan jalur di luar root yang dimodifikasi, ia tidak dapat melakukan operasi (baca/tulis dll.) Dengan jahat di lokasi tersebut.

Di Linux, menggunakan bind mounts adalah cara yang bagus untuk mengisi chroot tree. Dengan menggunakan itu, Anda dapat menarik folder seperti /lib dan /usr/lib sambil tidak menarik /usr, sebagai contoh. Ikat saja pohon direktori yang Anda inginkan ke direktori yang Anda buat di direktori jail.

97
Ben Combee

"chroot jail" adalah istilah yang keliru sehingga harus benar-benar mati, tetapi orang-orang tetap menggunakannya. chroot adalah alat yang memungkinkan Anda mensimulasikan direktori pada sistem file Anda sebagai root dari sistem file. Itu berarti Anda dapat memiliki struktur folder seperti:

-- foo
    -- bar
    -- baz
-- bazz

Jika kamu chroot foo dan lakukan ls /, Anda akan melihat:

-- bar
-- baz

Sejauh ls (dan alat lain yang Anda jalankan) terkait, itu adalah satu-satunya direktori pada sistem file. Alasan "jail" adalah nama yang salah adalah chroot tidak dimaksudkan untuk memaksa program untuk tetap berada dalam sistem file yang disimulasikan; sebuah program yang tahu bahwa ia berada di chroot "jail" dapat dengan mudah lolos, jadi Anda tidak boleh menggunakan chroot sebagai langkah keamanan untuk mencegah program memodifikasi file di luar sistem file yang disimulasikan.

53
Michael Mrozek

Pada dasarnya Anda hanya mengubah direktori root dari lingkungan Anda. Begitu

/

menjadi

/some-jail/ (or whatever directory you want)

Ketika suatu aplikasi mengakses/mereka akan mendapatkan/beberapa-penjara /. Juga aplikasi tidak dapat keluar dari/beberapa-penjara/sehingga Anda tahu itu tidak akan mengakses apa pun di mesin Anda. Ini cara yang sangat sederhana untuk mengatakan 'hei, Anda hanya dapat mengakses hal-hal yang saya berikan kepada Anda, dan Anda tidak dapat mengakses hal lain di sistem.

12
jacksonh

"Kapan dan mengapa aku menggunakannya?"

Salah satu penggunaannya adalah dalam skrip pengujian (waktu booting dan lainnya) yang membuat referensi path absolut, atau yang menjalankan perintah yang Anda mungkin ingin intersep dan log (dan mungkin no-op mereka) - di lingkungan di mana Anda tidak ingin perintah-perintah itu untuk sebenarnya beroperasi di lingkungan Anda berjalan.

Misalnya saya memiliki perangkat tertanam yang menjalankan Linux, saya ingin memeriksa operasi beberapa bash tanpa a) menjalankannya di perangkat nyata (karena saya memiliki alat yang lebih baik di desktop saya dan tidak ingin merusak perangkat) b) menjalankan itu nyata di desktop saya (karena saya tidak ingin sistem desktop saya berantakan)

Selain itu, Anda kemudian dapat menemukan perintah atau file skrip lain yang digunakan karena proses akan keluar dengan kesalahan setiap kali mencoba menjalankan perintah atau skrip Shell yang tidak ada di "chroot jail".

(Tentu saja, untuk menjalankan keseluruhan babi, Anda dapat menjalankan di dalam QEMU atau Docker, atau VM, tetapi itu akan melibatkan pembuatan VM gambar dll. - lebih banyak pekerjaan)

6
MikeW