Perintah chroot dapat mengirim Anda ke jail, menjaga lingkungan pengembangan atau pengujian Anda tetap terisolasi, atau sekadar meningkatkan keamanan sistem Anda . Kami tunjukkan cara termudah untuk menggunakannya.
Apa itu chroot, dan Apa itu Jail chroot?
Anda dapat menggunakan chroot untuk mengatur dan menjalankan program atau shell interaktif seperti Bash dalam sistem file yang dienkapsulasi yang dicegah untuk berinteraksi dengan sistem file biasa Anda. Segala sesuatu di dalam lingkungan chroot ditulis dan ditampung. Tidak ada apa pun di lingkungan chroot yang dapat melihat melewati direktori root khusus miliknya sendiri tanpa meningkatkan ke hak akses root. Lingkungan seperti ini mendapat julukan jail chroot. Istilah “jail” tidak sama dengan perintah jail FreeBSD, yang menciptakan lingkungan chroot yang lebih aman daripada lingkungan chroot biasa.
Jika Anda mencoba mengukur kegunaan suatu perintah, Anda harus memperhitungkan fungsionalitasnya menyediakan dan kemudahan penggunaannya. Jika terlalu rumit untuk digunakan orang atau terlalu bertele-tele sehingga membuat mereka ingin mencoba menggunakannya, fungsinya mungkin sama saja dengan nol. Jika tidak ada yang menggunakannya, itu tidak menyediakan fungsionalitas apa pun.
Dalam diskusi dengan pengguna Linux — secara langsung dan di forum — tampaknya perintah chroot adalah salah satu yang dianggap sulit digunakan, atau terlalu gigih dan membosankan untuk diatur . Tampaknya utilitas hebat ini tidak digunakan sesering mungkin.
Tetapi sebenarnya, ada cara yang sangat mudah untuk menggunakan chroot, dan kami akan memberi Anda contoh spesifik tentang cara menggunakan chroot. Kami menggunakan perintah Linux biasa yang dapat digunakan pada semua distribusi. Beberapa distribusi Linux memiliki alat khusus untuk menyiapkan lingkungan chroot, seperti debootstrap untuk Ubuntu, tetapi kami bersikap distro-agnostik di sini.
Kapan Anda Harus Menggunakan chroot?
Lingkungan chroot menyediakan fungsionalitas yang mirip dengan mesin virtual, tetapi ini merupakan solusi yang lebih ringan. Sistem captive tidak memerlukan hypervisor untuk diinstal dan dikonfigurasi, seperti VirtualBox atau Virtual Machine Manager. Juga tidak perlu menginstal kernel di sistem captive. Sistem captive membagikan kernel Anda yang ada.
Dalam beberapa hal, lingkungan chroot lebih dekat dengan container seperti LXC daripada mesin virtual. Mereka ringan, cepat diterapkan, dan pembuatan serta peluncurannya dapat dilakukan secara otomatis. Seperti halnya container, salah satu cara mudah untuk mengonfigurasinya adalah dengan menginstal sistem operasi secukupnya agar Anda dapat menyelesaikan apa yang diperlukan. Pertanyaan “apa yang diperlukan” dijawab dengan melihat bagaimana Anda akan menggunakan lingkungan chroot Anda.
Beberapa kegunaan umum adalah:
- Pengembangan Perangkat Lunak dan Verifikasi Produk. Pengembang menulis perangkat lunak dan tim verifikasi produk (PV) mengujinya. Terkadang masalah ditemukan oleh PV yang tidak dapat direplikasi di komputer pengembang. Pengembang memiliki segala macam alat dan perpustakaan yang terinstal di komputer pengembangan mereka yang tidak dimiliki oleh rata-rata pengguna — dan PV —. Seringkali, perangkat lunak baru yang berfungsi untuk pengembang tetapi tidak untuk yang lain ternyata menggunakan sumber daya di PC pengembang yang belum disertakan dalam rilis uji perangkat lunak tersebut. chroot memungkinkan para pengembang untuk memiliki lingkungan captive vanilla biasa di komputer mereka sehingga mereka dapat memasukkan perangkat lunaknya sebelum memberikannya ke PV. Lingkungan captive dapat dikonfigurasi dengan ketergantungan minimum yang diperlukan perangkat lunak.
- Mengurangi Risiko Pengembangan. Pengembang dapat membuat lingkungan pengembangan khusus sehingga tidak ada apa pun yang terjadi di dalamnya yang dapat mengacaukan PC sebenarnya.
- Menjalankan Perangkat Lunak yang Tidak Digunakan Lagi. Terkadang Anda hanya perlu menjalankan versi lama. Jika perangkat lunak lama memiliki persyaratan yang akan berbenturan atau tidak kompatibel dengan versi Linux Anda, Anda dapat melakukan chroot pada lingkungan untuk perangkat lunak yang bermasalah tersebut.
- Pemulihan dan Peningkatan Sistem File: Jika instalasi Linux tidak dapat dioperasikan, Anda dapat menggunakan chroot untuk memasang sistem file yang rusak ke a titik pemasangan pada Live CD. Hal ini memungkinkan Anda untuk bekerja pada sistem yang rusak dan mencoba memperbaikinya seolah-olah sistem tersebut dipasang secara normal di root /. Ini berarti jalur file yang diharapkan dalam sistem yang rusak akan direferensikan dengan benar dari direktori root, dan bukan dari titik pemasangan Live CD. Teknik serupa digunakan dalam artikel yang menjelaskan cara memigrasi sistem file Linux dari ext2 atau ext3 ke ext4.
- Ringfencing Aplikasi. Menjalankan server FTP atau alat lain yang terhubung ke internet di dalam lingkungan chroot membatasi kerusakan yang dapat dilakukan oleh penyerang eksternal. Ini bisa menjadi langkah berharga dalam memperkuat keamanan sistem Anda.
Membuat Lingkungan chroot
Kita memerlukan direktori untuk bertindak sebagai direktori root dari lingkungan chroot. Agar kita memiliki cara singkat untuk merujuk ke direktori tersebut, kita akan membuat variabel dan menyimpan nama direktori di dalamnya. Di sini kita menyiapkan variabel untuk menyimpan jalur ke direktori “testroot”. Tidak masalah jika direktori ini belum ada, kami akan segera membuatnya. Jika direktori memang ada, seharusnya kosong.
chr=/home/dave/testroot
Jika direktori tidak ada, kita perlu membuatnya. Kita bisa melakukannya dengan perintah ini. Opsi -p (parents) memastikan direktori induk yang hilang dibuat pada saat yang sama:
mkdir -p $chr
Kita perlu membuat direktori untuk menampung bagian-bagian sistem operasi yang diperlukan oleh lingkungan chroot kita. Kami akan menyiapkan lingkungan Linux minimalis yang menggunakan Bash sebagai shell interaktif. Kami juga akan menyertakan perintah touch, rm, dan ls. Itu akan memungkinkan kita untuk menggunakan semua perintah bawaan Bash dan touch, rm, dan ls. Kami akan dapat membuat, membuat daftar dan menghapus file, dan menggunakan Bash. Dan — dalam contoh sederhana ini — itu saja.
Daftarkan direktori yang perlu Anda buat dalam {}brace extension.
mkdir -p $chr/{bin,lib,lib64}
Sekarang kita akan mengubah direktori menjadi direktori root baru .
cd $chr
Mari salin biner yang kita perlukan di lingkungan Linux minimalis dari direktori “/bin” biasa ke direktori chroot “/bin” kita. Opsi -v (verbose) membuat cp memberi tahu kita apa yang dilakukannya saat melakukan setiap tindakan penyalinan.
cp -v /bin/{bash,touch,ls,rm} $chr/bin
File-file tersebut disalin untuk kita:
Biner ini akan memiliki ketergantungan. Kita perlu menemukan apa itu dan menyalin file-file itu ke lingkungan kita juga, jika tidak, bash, touch, rm, dan ls tidak akan dapat berfungsi. Kita perlu melakukan ini secara bergantian untuk setiap perintah yang kita pilih. Kami akan melakukan Bash terlebih dahulu. Perintah ldd akan mencantumkan dependensi untuk kita.
ldd /bin/bash
Dedependensi diidentifikasi dan dicantumkan di jendela terminal:
Kita perlu menyalin file-file itu ke lingkungan baru kita. Memilih detail dari daftar itu dan menyalinnya satu per satu akan memakan waktu dan rawan kesalahan.
Untungnya, kami dapat mengotomatiskannya secara semi-otomatis. Kita akan membuat daftar dependensinya lagi, dan kali ini kita akan membuat daftarnya. Kemudian kita akan menelusuri daftar dengan menyalin file.
Di sini kita menggunakan ldd untuk membuat daftar dependensi dan memasukkan hasilnya melalui pipa ke egrep. Menggunakan egrep sama dengan menggunakan grep dengan opsi -E (extend regular ekspresi). Opsi -o (hanya yang cocok) membatasi keluaran ke bagian garis yang cocok. Kami sedang mencari file perpustakaan yang cocok yang diakhiri dengan angka [0-9].
list=”$(ldd /bin/bash | egrep -o ‘/lib.*.[0-9]’)”
Kami bisa periksa isi daftar menggunakan echo:
echo $list
Sekarang kita memiliki daftarnya, kita dapat menelusurinya dengan loop berikut, menyalin file satu per satu. Kami menggunakan variabel i untuk menelusuri daftar. Untuk setiap anggota daftar, kami menyalin file ke direktori root chroot kami yang merupakan nilai yang disimpan di $chr.
Opsi -v (verbose) menyebabkan cp mengumumkan setiap salinan saat ia menjalankannya. Opsi –parents memastikan direktori induk yang hilang dibuat di lingkungan chroot.
for i in $list; lakukan cp -v –parents “$i” “${chr}”; selesai
Dan ini adalah outputnya:
Kami akan menggunakan teknik itu untuk menangkap dependensi dari masing-masing perintah lainnya. Dan kita akan menggunakan teknik loop untuk melakukan penyalinan sebenarnya. Kabar baiknya adalah kita hanya perlu melakukan sedikit pengeditan pada perintah yang mengumpulkan dependensi.
Kita dapat mengambil perintah dari riwayat perintah dengan menekan tombol Panah Atas beberapa kali lalu melakukan pengeditan. Perintah penyalinan perulangan tidak perlu diubah sama sekali.
Di sini kami menggunakan tombol Panah Atas untuk menemukan perintah, dan kami telah mengeditnya menjadi touch alih-alih bash.
list=”$(ldd /bin/touch | egrep -o ‘/lib.*.[0-9]’)”
Kita sekarang dapat mengulangi perintah loop yang sama persis seperti sebelumnya:
for i di $list; lakukan cp -v –parents “$i” “${chr}”; selesai
Dan file kita disalin untuk kita:
Sekarang kita dapat mengedit baris perintah daftar untuk ls:
list=”$(ldd /bin/ls | egrep -o ‘/lib.*.[0-9]’)”
Lagi, kita akan menggunakan perintah loop yang sama. Tidak peduli file apa yang ada dalam daftar. Ini bekerja secara membabi buta melalui daftar menyalin file untuk kami.
untuk saya di $list; lakukan cp -v –parents “$i” “${chr}”; selesai
Dan dependensi untuk ls disalin untuk kita:
Kami mengedit baris perintah daftar untuk terakhir kalinya, membuatnya berfungsi untuk rm:
list=”$(ldd /bin/ls | egrep -o ‘/lib.*.[ 0-9]’)”
Kami menggunakan perintah looping copy untuk terakhir kalinya:
for i in $list; lakukan cp -v –parents “$i” “${chr}”; selesai
Ketergantungan kita yang terakhir disalin ke lingkungan chroot kita. Kami akhirnya siap menggunakan perintah chroot. Perintah ini menetapkan root lingkungan chroot, dan menentukan aplikasi mana yang akan dijalankan sebagai shell.
sudo chroot $chr /bin/bash
Lingkungan chroot kami sekarang aktif. Prompt jendela terminal telah berubah, dan shell interaktif sedang ditangani oleh bash shell di lingkungan kita.
Kita dapat mencoba perintah yang telah kita bawa ke lingkungan.
ls
ls /home/dave/Documents
Perintah ls berfungsi saat kita` yang kita harapkan ketika kita menggunakannya dalam lingkungan. Saat kami mencoba mengakses direktori di luar lingkungan, perintahnya gagal.
Kita dapat menggunakan touch untuk membuat file, ls untuk mencantumkannya, dan rm untuk menghapusnya.
touch sample_file.txt
ls
rm sample_file.txt
ls
Tentu saja, kita juga dapat menggunakan perintah bawaan yang disediakan oleh shell Bash. Jika Anda mengetik bantuan di baris perintah, Bash akan mencantumkannya untuk Anda.
help
Gunakan exit untuk meninggalkan lingkungan chroot:
exit
Jika Anda ingin menghapus lingkungan chroot, Anda cukup menghapusnya:
rm -r testroot/
Ini akan menghapus file secara rekursif dan direktori di lingkungan chroot.