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.