Di bagian pertama, Cara menyiapkan chroot jail Linux, saya telah membahas chroot perintah dan Anda belajar menggunakan pembungkus chroot di sshd untuk mengisolasi sftpusers kelompok. Saat Anda mengedit sshd_config untuk memanggil pembungkus chroot dan memberinya karakteristik yang cocok, sshd mengeksekusi perintah tertentu di dalam chroot jail atau wrapper. Anda melihat bagaimana teknik ini berpotensi berguna untuk menerapkan akses yang terkandung, bukan aman, untuk pengguna jarak jauh.
Contoh yang diperluas
Saya akan mulai dengan memperluas apa yang saya lakukan sebelumnya, sebagian sebagai ulasan. Mulailah dengan menyiapkan direktori khusus untuk pengguna jarak jauh. Saya akan menggunakan sftpusers grup lagi.
Mulailah dengan membuat direktori khusus yang ingin Anda gunakan, dan atur kepemilikannya:
# mkdir -p /sftpusers/chroot
# chown root:root /sftpusers/chroot
Kali ini, jadikan root sebagai pemilik, bukan sftpusers kelompok. Dengan cara ini, saat Anda menambahkan pengguna, mereka tidak memulai dengan izin untuk melihat seluruh direktori.
Selanjutnya, buat pengguna yang ingin Anda batasi (dalam hal ini Anda perlu melakukan ini untuk setiap pengguna), tambahkan pengguna baru ke sftpusers grup, dan tolak shell login karena ini adalah sftp pengguna:
# useradd sanjay -g sftpusers -s /sbin/nologin
# passwd sanjay
Kemudian, buat direktori untuk sanjay dan atur kepemilikan dan izin:
# mkdir /sftpusers/chroot/sanjay
# chown sanjay:sftpusers /sftpusers/chroot/sanjay
# chmod 700 /sftpusers/chroot/sanjay
Selanjutnya, edit sshd_config mengajukan. Pertama, komentari permintaan subsistem yang ada dan tambahkan yang internal:
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp Kemudian tambahkan entri kasus pertandingan kami:
Match Group sftpusers
ChrootDirectory /sftpusers/chroot/
ForceCommand internal-sftp
X11Forwarding no
AllowTCPForwarding no
Perhatikan bahwa Anda kembali menentukan direktori, tetapi kali ini, Anda telah menyetel kepemilikan untuk mencegah sanjay dari melihat barang orang lain. / . yang tertinggal itu juga penting.
Kemudian, mulai ulang sshd dan uji:
[skipworthy@milo ~]$ sftp sanjay@showme
sanjay@showme's password:
Connected to sanjay@showme.
sftp> ls
sanjay
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> ls
sanjay
sftp> touch test
Invalid command.
Jadi. Sanjay hanya dapat melihat foldernya sendiri dan perlu cd ke dalamnya untuk melakukan sesuatu yang berguna.
Mengisolasi layanan atau pengguna tertentu
Sekarang, bagaimana jika Anda ingin menyediakan lingkungan shell yang dapat digunakan untuk pengguna jarak jauh, atau membuat lingkungan jail chroot untuk layanan tertentu? Untuk melakukannya, buat direktori jail dan sistem file root, lalu buat link ke alat dan library yang Anda butuhkan. Melakukan semua ini sedikit rumit, tetapi Red Hat menyediakan skrip dan petunjuk dasar yang membuat prosesnya lebih mudah.
Catatan: Saya telah menguji yang berikut ini di Red Hat Enterprise Linux 7 dan 8, meskipun pemahaman saya adalah bahwa kemampuan ini tersedia di Red Hat Enterprise Linux 6. Saya tidak punya alasan untuk berpikir bahwa skrip ini tidak akan berfungsi di Fedora, CentOS atau lainnya distro Red Hat, tetapi jarak tempuh Anda (seperti biasa) mungkin berbeda.
Pertama, buat direktori chroot Anda:
# mkdir /chroot
Kemudian jalankan skrip dari yum yang menginstal bit yang diperlukan:
# yum --releasever=/ --installroot=/chroot install iputils vim python
--releasever=/ flag meneruskan info rilis lokal saat ini untuk menginisialisasi repo di --installroot new yang baru , menentukan lokasi pemasangan baru. Secara teori, Anda dapat membuat chroot jail yang didasarkan pada versi mana pun dari repo yum atau dnf (namun, skrip akan tetap dimulai dengan repo sistem saat ini).
Dengan alat ini, Anda menginstal utilitas jaringan dasar seperti editor VIM dan Python. Anda dapat menambahkan hal lain pada awalnya jika ingin, termasuk layanan apa pun yang ingin Anda jalankan di dalam jail ini. Ini juga salah satu hal keren tentang yum dan dependensi. Sebagai bagian dari resolusi ketergantungan, yum membuat penambahan yang diperlukan ke pohon sistem file bersama dengan perpustakaan. Namun, itu meninggalkan beberapa hal yang perlu Anda tambahkan selanjutnya. Saya akan akan membahasnya sebentar lagi.
Saat ini, paket dan dependensi telah diinstal, dan kunci GPG baru telah dibuat untuk repositori baru ini sehubungan dengan sistem file root baru ini. Selanjutnya, pasang sistem file singkat Anda:
# mount -t proc proc /chroot/proc/
# mount -t sysfs sys /chroot/sys/ Dan atur dev binding Anda:
# mount -o bind /dev/pts /chroot/dev/pts
# mount -o bind /dev/pts /chroot/dev/pts Perhatikan bahwa tunggangan ini tidak selamat dari reboot dengan cara ini, tetapi penyiapan ini akan memungkinkan Anda menguji dan bermain dengan lingkungan chroot jail.
Sekarang, uji untuk memeriksa apakah semuanya berfungsi seperti yang Anda harapkan:
# chroot /chroot
bash-4.2# ls
bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr Anda dapat melihat bahwa sistem file dan pustaka berhasil ditambahkan:
bash-4.2# pwd
/
bash-4.2# cd .. Dari sini, Anda melihat root yang benar dan tidak dapat menavigasi ke atas:
bash-4.2# exit
exit
#
Sekarang Anda telah keluar dari pembungkus chroot, yang diharapkan karena Anda memasukkannya dari shell login lokal sebagai root. Biasanya, pengguna jarak jauh seharusnya tidak dapat melakukan ini, seperti yang Anda lihat di sftp contoh:
[skipworthy@milo ~]$ ssh root@showme
root@showme's password:
[root@showme1 ~]# chroot /chroot
bash-4.2#
Perhatikan bahwa semua direktori ini dibuat oleh root, jadi itulah pemiliknya. Sekarang, tambahkan chroot ini ke sshd_config , karena kali ini Anda hanya akan mencocokkan pengguna ini:
Match User leo
ChrootDirectory /chroot
Kemudian, mulai ulang sshd .
Anda juga perlu menyalin /etc/passwd dan /etc/group file dari sistem host ke /chroot direktori:
[root@showme1 ~]# cp -vf /etc/{passwd,group} /chroot/etc/ Catatan: Jika Anda melewati langkah di atas, Anda dapat login, tetapi hasilnya tidak dapat diandalkan dan Anda akan rentan terhadap error terkait login yang bentrok
Sekarang untuk pengujian:
[skipworthy@milo ~]$ ssh leo@showme
leo@showme's password:
Last login: Thu Jan 30 19:35:36 2020 from 192.168.0.20
-bash-4.2$ ls
-bash-4.2$ pwd
/home/leo Itu terlihat bagus. Sekarang, dapatkah Anda menemukan sesuatu yang berguna untuk dilakukan? Mari bersenang-senang:
[root@showme1 ~]# yum --releasever=/ --installroot=/chroot install httpd
Anda bisa lepaskan releasever=/ , tetapi saya suka membiarkannya karena memberikan lebih sedikit peluang untuk hasil yang tidak diharapkan.
[root@showme1 ~]# chroot /chroot
bash-4.2# ls /etc/httpd
conf conf.d conf.modules.d logs modules run
bash-4.2# python
Python 2.7.5 (default, Aug 7 2019, 00:51:29)
Jadi, httpd ada jika Anda menginginkannya, tetapi hanya untuk menunjukkan Anda dapat menggunakan one-liner cepat dari Python, yang juga Anda instal:
bash-4.2# python -m SimpleHTTPServer 8000
Serving HTTP on 0.0.0.0 port 8000 ... Dan sekarang Anda memiliki server web sederhana yang berjalan di chroot jail. Secara teori, Anda dapat menjalankan sejumlah layanan dari dalam chroot jail dan menjaganya tetap 'tertampung' dan jauh dari layanan lain, sehingga Anda hanya dapat mengekspos sebagian dari lingkungan resource yang lebih besar tanpa mengorbankan pengalaman pengguna Anda.
Baru mengenal container Linux? Unduh Containers Primer dan pelajari dasar-dasarnya.