(+84) 463.28.7979

Hướng dẫn Chroot Apache2 với mod_chroot trên Ubuntu 10.04


Trong bài viết sau, chúng tôi sẽ giới thiệu với các bạn cách thiết lập, cài đặt mod_chroot với Apache2 trên hệ thống Ubuntu 10.04. Và với mod_chroot, bạn có thể sử dụng Apache2 trong 1 môi trường chroot đảm bảo an toàn về bảo mật, an ninh và hạn chế tối đa lỗ hổng để tin tặc có thể khai thác và đột nhập trong Apache2, trong đó có bao gồm các ứng dụng web.

Lưu ý sơ bộ

Trong bài viết này sử dụng hệ thống Ubuntu 10.04 và web server Apache2, đồng thời có sẵn 1 hoặc nhiều hơn website local đã được thiết lập bên trong thư mục /var/www.

Cài đặt mod_chroot

Để cài đặt mod_chroot, chúng ta sử dụng lệnh sau:

aptitude install libapache2-mod-chroot

Sau đó, kích hoạt dịch vụ tương ứng và khởi động lại Apache:

a2enmod mod_chroot
/etc/init.d/apache2 restart

Cấu hình Apache

Tại đây, chúng ta cần sử dụng thư mục /var/www là thư mục gốc chứa các thành phần chroot jail. Apache của Ubuntu sẽ sử dụng file PID – /var/run/apache2.pid; khi Apache được trỏ tới /var/www, /var/run/apache2.pid và được dịch thành /var/www/var/run/apache2.pid. Do đó, tạo thư mục đó ngay tại bước này:

mkdir -p /var/www/var/run
chown -R root:root /var/www/var/run

Tiếp theo, ta phải “thông báo” với Apache rằng cần sử dụng /var/www thành thư mục chroot. Mở file /etc/apache2/apache2.conf, và ngay phía dưới dòng PidFile chúng ta thêm dòng ChrootDir:

vi /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
[…]

Sau đó, “nhắc nhở” hệ thống vhost rằng thư mục root đã thay đổi (trong ví dụ này là DocumentRoot /var/www chuyển thành DocumentRoot /). Thực chất, chúng ta có thể thay đổi giá trị này cho từng vhost riêng biệt hoặc đơn giản hơn, tạo symlink trong file hệ thống.

Thay đổi DocumentRoot

Giả sử rằng chúng ta có vhost với DocumentRoot /var/www. Việc cần làm bây giờ là phải mở file cấu hình của vhost đó và thay đổi tham số DocumentRoot /var/www thành DocumentRoot /. Tương ứng với đó, DocumentRoot /var/www/web1/web sẽ thay đổi thành DocumentRoot /web1/web, và tiếp tục … nếu bạn muốn sử dụng cách này, hãy thực hiện từng đó thay đổi tương ứng với mỗi vhost.

Tạo Symlink trong file hệ thống

Sử dụng phương pháp này thì đơn giản hơn rất nhiều vì bạn chỉ phải thực hiện 1 lần duy nhất, và không phải thay đổi file cấu hình của bất kỳ vhost nào. Tại đây, chúng ta sẽ tạo symlink trỏ từ /var/www/var/www tới /var/www:

mkdir -p /var/www/var
cd /var/www/var
ln -s ../ www

Cuối cùng, dừng hoạt động của Apache, tạo symlink từ /var/run/apache2.pid tới /var/www/var/run/apache2.pid, sau đó khởi động lại:

/etc/init.d/apache2 stop

ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid
/etc/init.d/apache2 start

Sau đó, tiến hành kiểm tra sơ bộ lại tình trạng của toàn bộ hệ thống bằng cách gọi file info.php bằng trình duyệt:

Nếu bạn đang sử dụng CGI ví dụ như Perl, suPHP, Ruby … thì phải copy file biên dịch (ví dụ usr/bin/perl, /usr/lib/suphp/suphp…) tới thư mục chroot jail cùng với tất cả các thư viện cần thiết. Các bạn có thể liệt kê tất cả các thư viện này với câu lệnh ldd, ví dụ như sau:

ldd /usr/lib/suphp/suphp

root@server1:~# ldd /usr/lib/suphp/suphp
linux-vdso.so.1 => (0x00007fff66dff000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fa9f4031000)
libm.so.6 => /lib/libm.so.6 (0x00007fa9f3dae000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fa9f3b96000)
libc.so.6 => /lib/libc.so.6 (0x00007fa9f3814000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa9f434b000)
root@server1:~#

Nếu sau khi copy tất cả các file cần thiết mà website vẫn không hoạt động được thì hãy xem lại file error log của Apache, và tham khảo thêm tại đây.

Chúc các bạn thành công!

Theo HowToForge

Leave a Reply

Your email address will not be published. Required fields are marked *