Panduan ini menjelaskan cara menyiapkan mod_unixd dengan Apache 2.4 pada sistem Debian Jessie. Dengan mod_unixd, Anda dapat menjalankan Apache di lingkungan chroot yang aman dan membuat server Anda tidak terlalu rentan terhadap upaya pembobolan yang mencoba mengeksploitasi kerentanan di Apache atau aplikasi web yang Anda instal. Modul mod_unixd adalah pengganti modul mod_chroot, yang digunakan di Apache 2.2 yang lama.
1 Catatan Awal
Saya berasumsi bahwa Anda memiliki sistem Debian 8 yang berjalan dengan Apache yang berfungsi, mis. seperti yang ditunjukkan dalam tutorial ini:Tutorial server Debian 8 Jessie LAMP dengan Apache 2, PHP 5 dan MariaDB. Selain itu, saya berasumsi bahwa Anda memiliki satu atau lebih situs web yang diatur dalam direktori /var/www (misalnya jika Anda menggunakan ISPConfig).
Server yang saya gunakan di sini memiliki alamat IP 192.168.1.100 dan nama host server1.example.com . Harap ganti nilai ini dengan alamat IP dan nama host server Anda di mana pun nilai tersebut muncul dalam tutorial.
2 Konfigurasi Apache
Modul apache mod_unixd yang menawarkan fungsi Chroot di Apache 2.4 adalah bagian dari modul inti Apache dan dikompilasi secara statis ke dalam biner Apache di Debian 8, jadi kita tidak perlu menginstal perangkat lunak tambahan untuk menggunakannya.
Saya ingin menggunakan direktori /var/www sebagai direktori yang berisi jail chroot. Apache Debian menggunakan file PID /var/run/apache2.pid; ketika Apache di-chroot ke /var/www, /var/run/Apache2.pid diterjemahkan ke /var/www/var/run/Apache2.pid. Oleh karena itu kami membuat direktori itu sekarang:
mkdir -p /var/www/var/run
chown -R root:root /var/www/var/run
Sekarang kita harus memberitahu Apache bahwa kita ingin menggunakan /var/www sebagai direktori chroot kita. Kita buka /etc/apache2/apache2.conf, dan tepat di bawah baris PidFile, kita tambahkan baris ChrootDir:
nano /etc/apache2/apache2.conf
[...] # # PidFile: The file in which the server should record its process # identification number when it starts. # This needs to be set in /etc/apache2/envvars # PidFile ${APACHE_PID_FILE} ChrootDir /var/www [...]
Selanjutnya, kita harus memberi tahu vhosts bahwa root dokumen telah berubah (misalnya, DocumentRoot /var/www sekarang diterjemahkan menjadi DocumentRoot /). Kita dapat melakukannya dengan mengubah direktif DocumentRoot dari setiap vhost, atau lebih mudah, dengan membuat symlink di sistem file.
2.1 Metode Pertama:Mengubah DocumentRoot
Mari kita asumsikan kita memiliki vhost dengan DocumentRoot /var/www. Kita sekarang harus membuka konfigurasi vhost dari vhost itu dan mengubah DocumentRoot /var/www menjadi DocumentRoot /. Dengan demikian, DocumentRoot /var/www/web1/web sekarang akan menerjemahkan ke DocumentRoot /web1/web, dan seterusnya. Jika Anda ingin menggunakan metode ini, Anda harus mengubah DocumentRoot untuk setiap vhost.
2.2 Metode Kedua:Membuat Symlink di Sistem File
Cara ini lebih mudah, karena Anda hanya perlu melakukannya sekali dan tidak perlu mengubah konfigurasi vhost apa pun. Kami membuat symlink yang menunjuk dari /var/www/var/www ke /var/www:
mkdir -p /var/www/var
cd /var/www/var
ln -s ../../ www
Terakhir, kita harus menghentikan Apache, membuat symlink dari /var/run/Apache2.pid ke /var/www/var/run/Apache2.pid, dan memulainya lagi:
service apache2 stop
ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid
service apache2 start
Itu dia. Anda sekarang dapat memanggil halaman web Anda seperti sebelumnya, dan halaman tersebut akan disajikan tanpa masalah, selama itu adalah file HTML statis atau menggunakan mod_php.
Saya akan menguji ini sekarang dengan halaman phpinfo(). Buka file info.php baru dengan nano di root dokumen situs web default:
nano /var/www/html/info.php
dan tambahkan konten berikut:
<php
phpinfo();
Simpan file dan buka nama host server atau alamat IP Anda di browser, diikuti oleh /info.php. Contoh:
http://192.168.1.100/info.php
Halaman berikut akan muncul sekarang ketika PHP bekerja dengan benar:
Sejauh ini bagus, tapi bagaimana kita tahu jika Apache benar-benar di-chroot? Mari kita coba mengakses file yang berada di luar chroot, saya akan menggunakan /etc/hosts di sini misalnya.
nano /var/www/html/testchroot.php
dengan konten ini:
<?php
$var = file_get_contents('/etc/hosts');
echo 'The content of /etc/hosts is: <br />' . $var;
dan buka URL ke file uji di browser. Hasilnya adalah:
Seperti yang Anda lihat, konten file /etc/hosts tidak dapat diakses lagi dari skrip PHP ini.
Hapus file uji jika Anda tidak membutuhkannya lagi:
rm /var/www/html/testchroot.php
rm /var/www/html/info.php
Jika Anda menggunakan CGI, mis. Perl, Ruby, dll., maka Anda harus menyalin interpreter (mis. /usr/bin/perl, dll.) ke chroot jail bersama dengan semua library yang dibutuhkan oleh interpreter. Anda dapat mengetahui tentang perpustakaan yang diperlukan dengan perintah ldd, mis.
ldd /usr/bin/perl
[email protected]:/var/www/html# ldd /usr/bin/perl
linux-vdso.so.1 (0x00007ffe951f4000)
libperl.so.5.20 => /usr/lib/x86_64-linux-gnu/libperl.so.5.20 (0x00007f1dafe54000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1dafc50000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1daf94f000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1daf732000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1daf387000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f1daf150000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1db0214000)
[email protected]:/var/www/html#
atau gunakan alat jailkit untuk membangun lingkungan penjara. Jika Anda telah menyalin semua file yang diperlukan, tetapi halaman masih tidak berfungsi, Anda harus melihat log kesalahan Apache /var/log/apache2/error.log . Biasanya ini memberi tahu Anda di mana masalahnya.
3 Tautan
- mod_unixd:https://httpd.apache.org/docs/2.4/mod/mod_unixd.html
- Apache:http://httpd.apache.org/
- Debian:http://www.debian.org/