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


99

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?

chroot 

jawaban di sini tampaknya singkat pada "bagaimana saya menggunakannya kategori?" :(
Alexander Mills

Jawaban:


88

Penjara chroot adalah cara untuk mengisolasi 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()pemanggilan sistem untuk mengubah direktori root agar berada 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 /libdan /usr/libsaat tidak menarik /usr, misalnya. Ikat saja pohon direktori yang Anda inginkan ke direktori yang Anda buat di direktori jail.


10
Jawaban Anda bagus. Satu hal lagi yang disebutkan, chroot bukanlah mekanisme yang aman (sebuah proses dapat keluar dari penjara jika menjadi root dan kadang-kadang bahkan jika tidak). Penjara nyata dapat ditegakkan dengan penjara freebsd dan sejenisnya. Lihat ini en.wikipedia.org/wiki/FreeBSD_jail#Similar_technologies
nc3b

3
Proses instalasi Gentoo menggunakan chroot sehingga Anda dapat mengatur OS baru Anda sebelum menginstal GRUB dan kernel Linux, dll.
Chris Huang-Leaver

3
Lihatlah firejail untuk shell yang sepenuhnya dipenjara menggunakan semua ruang nama Linux. Ada paket deb dan rpm yang tersedia. Secara umum, saya akan merekomendasikan kernel 3.18 atau lebih baru, karena masalah yang diketahui dengan tidak dapat menginstal perangkat lunak baru atau melakukan manajemen pengguna ketika firejailsedang berjalan.
CivFan

Jawaban yang bagus! - meskipun beberapa contoh dasar akan menyenangkan untuk dilihat.
Gabriel Staples

Bisakah seorang pengguna di bawah chroot jail file panggilan biner terletak di bawah /binyang diinstal oleh pengguna root? @Ben Combee
alper

50

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

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

Jika Anda chroot foomelakukannya ls /, Anda akan melihat:

-- bar
-- baz

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


16
Akan sangat membantu untuk memiliki contoh bagaimana cara melarikan diri dari chroot"penjara". The kasus saya pernah melihat mengharuskan meningkat untuk hak akses root. Apakah sulit untuk mencegah proses yang meningkat dengan sendirinya untuk membasmi hak istimewa?
CivFan

4
Ini masih "kurungan" jadi "penjara" adalah istilah yang baik. Apakah "bidang penahanan Level 3" lebih baik?!
MikeW

4
Istilah ini berasal dari penjara FreeBSD. Penjara dibangun di atas chroot. Penjara dimaksudkan untuk memecahkan masalah keamanan chroottidak. Untuk alasan ini orang sering campur aduk chrootdan jailsbermaksud hal yang sama. Mereka tidak melakukannya. Istilah "penjara" dikatakan diciptakan oleh Bill Cheswick ketika ia membuat honeypot untuk menangkap seorang cracker: csrc.nist.gov/publications/secpubs/berferd.pdf
BugHunterUK

Jadi apa yang Anda lakukan, tidak menggunakan chroot jailide yang baik dalam kasus saya ?
Shafizadeh

10

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.


6

"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 login (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 ia 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 gambar VM dll. - lebih banyak pekerjaan)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.