Apache設定 · 1 min read · Dec 26, 2025

Debian Etch における mod_chroot を使用した Apache2 の Chroot

Debian Etch における mod_chroot を使用した Apache2 の Chroot

Version 1.0
Author: Falko Timme

このガイドでは、Debian Etch システムで Apache2 と mod_chroot を設定する方法を説明します。mod_chroot を使用すると、Apache2 を安全な chroot 環境で実行でき、Apache2 やインストールされた Web アプリケーションの脆弱性を悪用しようとする侵入試行に対してサーバーをより安全に保つことができます。

私はこれがあなたにとって機能するという保証を出すものではありません!

1 予備ノート

私は、あなたが動作している Debian Etch システムを持っており、作業中の Apache2 があると仮定しています。例えば、このチュートリアルに示されているように: The Perfect Setup - Debian Etch (Debian 4.0)。さらに、/var/www ディレクトリ内に 1 つ以上の Web サイトが設定されていると仮定します(例えば、ISPConfig を使用している場合)。

2 mod_chroot のインストール

mod_chroot をインストールするには、単に次のコマンドを実行します:

apt-get install libapache2-mod-chroot

次に、mod_chroot を有効にし、Apache を再起動します:

a2enmod mod_chroot  
/etc/init.d/apache2 force-reload

3 Apache の設定

私は /var/www ディレクトリを chroot 刑務所を含むディレクトリとして使用したいと思います。Debian の Apache は PID ファイル /var/run/apache2.pid を使用します。Apache が /var/www に chroot されると、/var/run/apache2.pid は /var/www/var/run/apache2.pid に変換されます。したがって、今そのディレクトリを作成します:

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

今、Apache に /var/www を chroot ディレクトリとして使用したいことを伝えなければなりません。/etc/apache2/apache2.conf を開き、PidFile 行のすぐ下に ChrootDir 行を追加します:

vi /etc/apache2/apache2.conf

| [...] # # PidFile: サーバーが起動するときにプロセス識別番号を記録するファイル。 # PidFile /var/run/apache2.pid ChrootDir /var/www [...] |

次に、ドキュメントルートが変更されたことを vhosts に伝えなければなりません(例えば、DocumentRoot /var/www は今や DocumentRoot / に変換されます)。これを行うには、各 vhost の DocumentRoot 指令を変更するか、より簡単に、ファイルシステムにシンボリックリンクを作成します。


3.1 最初の方法: DocumentRoot の変更

DocumentRoot /var/www を持つ vhost があると仮定しましょう。その vhost の vhost 設定を開き、DocumentRoot /var/www を DocumentRoot / に変更する必要があります。それに応じて、DocumentRoot /var/www/web1/web は DocumentRoot /web1/web に変換されます。もしこの方法を使用したい場合は、すべての vhost の DocumentRoot を変更する必要があります。

3.2 第二の方法: ファイルシステムにシンボリックリンクを作成

この方法は簡単です。なぜなら、一度だけ行えばよく、vhost 設定を変更する必要がないからです。/var/www/var/www から /var/www へのシンボリックリンクを作成します:

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

最後に、Apache を停止し、/var/run/apache2.pid から /var/www/var/run/apache2.pid へのシンボリックリンクを作成し、再度起動します:

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

これで完了です。以前と同様に Web ページを呼び出すことができ、静的 HTML ファイルまたは mod_php を使用している限り、問題なく提供されるはずです。

CGI(例: Perl, suPHP, Ruby など)を使用している場合は、インタープリター(例: /usr/bin/perl, /usr/sbin/suphp など)をインタープリターに必要なすべてのライブラリと共に chroot 刑務所にコピーする必要があります。必要なライブラリについては ldd コマンドで確認できます。例えば:

ldd /usr/sbin/suphp
server2:/var/www/web1/log# ldd /usr/sbin/suphp  
        linux-gate.so.1 =>  (0xffffe000)  
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e34000)  
        libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7e0f000)  
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7e03000)  
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7cd2000)  
        /lib/ld-linux.so.2 (0xb7f23000)  
server2:/var/www/web1/log#

必要なファイルをすべてコピーしたが、ページがまだ機能しない場合は、Apache エラーログを確認する必要があります。通常、問題の場所を教えてくれます。また、http://core.segfault.pl/~hobbit/mod_chroot/caveats.html を読んで、既知の問題と解決策を確認してください。

4 リンク

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。