Chrooting Apache and PHP
Created: 06/01/2005
General Information
Chrooting has been around for a long time now. Chrooting makes a program believe that the root of the file system is higher up in the hierarchy. For example, if I wanted to create a chroot in /chroot/httpd, a program executed from within the chroot would believe that "/chroot/httpd" was actually "/". There in lies the beauty as the program can't reach any files outside "/chroot/httpd". Security of the server as a whole is increased due to the fact that the system binaries are off limits. In addition, chroots usually only have the bare minimum files inside, so exploits have a harder time breaking in.Installation
Lets start off by installing apache with mod_ssl and create our SSL certificates.|
# # # # |
cd /usr/ports/www/apache13-modssl make make certificate TYPE=custom make install |
| # | TGT=/chroot/httpd |
Configuration
Now we need to prepare our directory structure for the chroot.|
# # # # # # # # # # # # # # # # |
cd $TGT mkdir dev mkdir etc mkdir tmp mkdir -p var/run mkdir -p usr/lib mkdir usr/libexec mkdir -p usr/local/www/ mkdir usr/local/lib mkdir -p usr/local/etc/apache mkdir -p usr/local/libexec/apache mkdir -p usr/local/www/data mkdir usr/local/www/vhosts mkdir usr/local/sbin mkdir -p usr/X11R6/lib mkdir var/log |
mknod for this task.|
# # # # # # # # # |
mknod $TGT/dev/null c 2 2 chown root:sys $TGT/dev/null chmod 666 $TGT/dev/null mknod $TGT/dev/random c 2 3 chown root:wheel $TGT/dev/random chmod 755 $TGT/dev/random cd $TGT/dev ln -s random urandom vi /etc/rc.conf |
|
syslogd_flags="-l /chroot/httpd/dev/log" # Or Where your target resides |
ldd, truss, and strings are amongst the most commonly used. I'll go over ldd and strings here.|
# ldd /usr/local/sbin/httpd /usr/local/sbin/httpd: libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x280c6000) libmm.so.13 => /usr/local/lib/libmm.so.13 (0x280df000) libc.so.5 => /usr/lib/libc.so.5 (0x280e3000) # strings /usr/local/sbin/httpd | grep lib /usr/libexec/ld-elf.so.1 libcrypt.so.2 libmm.so.13 libc.so.5 |
|
# # # # # # # # # # # |
install -C /usr/local/sbin/httpd $TGT/usr/local/sbin install -C /var/run/ld-elf.so.hints $TGT/var/run/ install -C /usr/lib/libcrypt.so.2 $TGT/usr/lib/ install -C /usr/lib/libc.so.5 $TGT/usr/lib/ install -C /usr/libexec/ld-elf.so.1 $TGT/usr/libexec/ install -C /usr/local/lib/libexpat.so.4 $TGT/usr/local/lib/ install -C /usr/local/lib/libmm.so.13 $TGT/usr/local/lib/ cp /etc/hosts $TGT/etc/ cp /etc/resolv.conf $TGT/etc/ cp /etc/group $TGT/etc/ cp /etc/master.passwd $TGT/etc/passwords |
|
# # # # # # |
vi $TGT/etc/group vi $TGT/etc/passwords cd $TGT/etc pwd_mkdb -p -d $TGT/etc passwords rm -f $TGT/etc/master.passwd cp -Rvp /usr/local/etc/apache/* $TGT/usr/local/etc/apache/ |
| # | cp -Rvp /usr/local/libexec/apache/* $TGT/usr/local/libexec/apache/ |
|
# ldd /usr/local/libexec/apache/libphp4.so /usr/local/libexec/apache/libphp4.so: libcrypto.so.3 => /usr/local/lib/libcrypto.so.3 (0x2833d000) libssl.so.3 => /usr/local/lib/libssl.so.3 (0x28441000) libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x28472000) libc-client4.so.8 => /usr/local/lib/libc-client4.so.8 (0x2848b000) libzzip.so.10 => /usr/local/lib/libzzip.so.10 (0x28542000) |
|
# # # # # |
install -C /usr/local/lib/libcrypto.so.3 $TGT/usr/local/lib/ install -C /usr/local/lib/libssl.so.3 $TGT/usr/local/lib/ install -C /usr/lib/libcrypt.so.2 $TGT/usr/lib/ install -C /usr/local/lib/libc-client4.so.8 $TGT/usr/local/lib/ install -C /usr/local/lib/libzzip.so.10 $TGT/usr/local/lib/ |
|
# # # # # # |
ldd /usr/local/libexec/apache/libphp4.so | awk {' print $3 '} | \ grep '/usr/lib' | xargs -J % install -C % $TGT/usr/lib/ ldd /usr/local/libexec/apache/libphp4.so | awk {' print $3 '} | \ grep '/usr/local/lib' | xargs -J % install -C % $TGT/usr/local/lib/ ldd /usr/local/libexec/apache/libphp4.so | awk {' print $3 '} | \ grep '/usr/X11R6' | xargs -J % install -C % $TGT/usr/X11R6/lib/ |
|
# # # # # # |
ldd /usr/local/libexec/apache/* | grep '=>' | awk {' print $3 '} | \ grep '/usr/lib' | xargs -J % install -C % $TGT/usr/lib/ ldd /usr/local/libexec/apache/* | grep '=>' | awk {' print $3 '} | \ grep '/usr/local/lib' | xargs -J % install -C % $TGT/usr/local/lib/ ldd /usr/local/libexec/apache/* | grep '=>' | awk {' print $3 '} | \ grep '/usr/X11R6/lib' | xargs -J % install -C % $TGT/usr/X11R6/lib/ |
| # | chroot $TGT /usr/local/sbin/httpd |
|
# # |
cp /etc/my.cnf $TGT/etc/ ln /chroot/mysql/tmp/mysql.sock $TGT/tmp/mysql.sock |
Author: Leigh Renfrow
soup4you2 at mac dot com