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

Debian Lennyでのmod_chrootを使用したApache2のChroot

Debian Lennyでのmod_chrootを使用したApache2のChroot

バージョン 1.0
著者: Falko Timme
Twitterでフォローしてください

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

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

1 予備ノート

稼働中のDebian Lennyシステムがあり、動作するApache2があることを前提としています。例えば、このチュートリアルに示されているように: 完璧なサーバー - Debian Lenny (Debian 5.0) [ISPConfig 2]。さらに、/var/wwwディレクトリ内に1つ以上のWebサイトが設定されていることを前提としています(例えば、ISPConfigを使用している場合)。

2 mod_chrootのインストール

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

aptitude install libapache2-mod-chroot

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

a2enmod mod_chroot  
/etc/init.d/apache2 restart

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: サーバーが起動時にプロセス識別番号を記録するファイル # これは/etc/apache2/envvarsで設定する必要があります # PidFile ${APACHE_PID_FILE} 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

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

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