GNU/Linux >> Belajar Linux >  >> Linux

Menyelam lebih dalam ke penjara chroot Linux

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.


Linux
  1. Cara mengatur jail chroot Linux

  2. Cara memindahkan Pelacak Permintaan ke dalam wadah Linux

  3. Contoh Perintah sftp di Linux

  1. Cara memindahkan MediaWiki ke dalam wadah Linux

  2. Cara memindahkan WordPress ke wadah Linux

  3. Linux:proses menjadi layanan

  1. Termux mengubah Android menjadi lingkungan pengembangan Linux

  2. Bagaimana Melakukan Chroot Dengan Ruang Nama Linux?

  3. Cara Setup Chroot SFTP di Linux (Izinkan Hanya SFTP, bukan SSH)