Apache設定 · 1 min read · Dec 26, 2025
Debian Squeeze における mod_chroot を使用した Apache2 の Chroot
Debian Squeeze における mod_chroot を使用した Apache2 の Chroot
Version 1.0
Author: Falko Timme
Follow me on Twitter
このガイドでは、Debian Squeeze システム上で Apache2 に mod_chroot を設定する方法を説明します。mod_chroot を使用すると、Apache2 を安全な chroot 環境で実行でき、Apache2 やインストールされた Web アプリケーションの脆弱性を悪用しようとする侵入試行に対してサーバーをより安全に保つことができます。
私はこれがあなたにとって機能するという保証を出しません!
1 前提条件
稼働中の Debian Squeeze システムがあり、動作する Apache2 があると仮定します。例えば、このチュートリアルに示されているように: Debian Squeeze に PHP5 と MySQL サポートを持つ Apache2 をインストールする (LAMP)。さらに、/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 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 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/lib/suphp/suphp など) をインタープリターに必要なすべてのライブラリと共に chroot 刑務所にコピーする必要があります。必要なライブラリについては ldd コマンドで確認できます。例えば:
ldd /usr/lib/suphp/suphproot@server1:~# ldd /usr/lib/suphp/suphp
linux-vdso.so.1 => (0x00007f3fdcc6e000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f3fdc953000)
libm.so.6 => /lib/libm.so.6 (0x00007f3fdc6d1000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f3fdc4ba000)
libc.so.6 => /lib/libc.so.6 (0x00007f3fdc158000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3fdcc6f000)
root@server1:~#すべての必要なファイルをコピーしたが、ページがまだ機能しない場合は、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/
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。