GNU/Linux >> Belajar Linux >  >> Debian

Chroot Apache 2.4 dengan mod_unixd di Debian 8 (Jessie)

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.

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.

  • mod_unixd:https://httpd.apache.org/docs/2.4/mod/mod_unixd.html
  • Apache:http://httpd.apache.org/
  • Debian:http://www.debian.org/

Debian
  1. Cara menginstal WebDAV dengan Lighttpd di Debian 8 (Jessie)

  2. Instal phpMyAdmin dengan Apache di Debian 9 - Proses Langkah demi Langkah?

  3. Setup Apache dan Php dengan mod_fcgid di Ubuntu/Debian

  1. Percepat Apache dengan mod_pagespeed dan Memcached di Debian 8

  2. Menyiapkan Replikasi Master-Master dengan MySQL di Debian 8 (Jessie)

  3. Instal phpMyAdmin di Debian 11 dengan Apache

  1. Cara Menginstal dan Mengamankan phpMyAdmin dengan Apache di Debian 9

  2. Amankan Apache dengan Lets Encrypt di Debian 9

  3. Amankan Apache dengan Lets Encrypt di Debian 10