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 restart3 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 stopln -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/suphpserver2:/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 リンク
- mod_chroot: http://core.segfault.pl/~hobbit/mod_chroot/
- Apache: http://httpd.apache.org/
- Debian: http://www.debian.org/
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。