Apache 設定 · 1 min read · Dec 26, 2025
Debian 8 (Jessie) での mod_unixd を使用した Apache 2.4 の Chroot
このガイドでは、Debian Jessie システムで Apache 2.4 と mod_unixd を設定する方法を説明します。mod_unixd を使用すると、Apache を安全な chroot 環境で実行でき、Apache やインストールされた Web アプリケーションの脆弱性を悪用しようとする侵入試行に対してサーバーの脆弱性を低減できます。mod_unixd モジュールは、古い Apache 2.2 で使用されていた mod_chroot モジュールの代替です。
1 予備ノート
稼働中の Debian 8 システムがあり、動作する Apache があると仮定します。例えば、このチュートリアルに示されているように: Debian 8 Jessie LAMP サーバー チュートリアル (Apache 2、PHP 5、MariaDB)。さらに、/var/www ディレクトリ内に 1 つ以上の Web サイトが設定されていると仮定します (例: ISPConfig を使用している場合)。
私がここで使用しているサーバーの IP アドレスは 192.168.1.100 で、ホスト名は server1.example.com です。チュートリアル内でこれらの値が発生するたびに、あなたのサーバーの IP アドレスとホスト名に置き換えてください。
2 Apache の設定
Apache 2.4 で Chroot 機能を提供する Apache モジュール mod_unixd は、Apache コアモジュールの一部であり、Debian 8 の 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 行を追加します:
nano /etc/apache2/apache2.conf[...]
#
# PidFile: サーバーが起動するときにプロセス識別番号を記録するファイル
# これは /etc/apache2/envvars で設定する必要があります
#
PidFile ${APACHE_PID_FILE}
ChrootDir /var/www
[...] 次に、ドキュメントルートが変更されたことを vhosts に伝える必要があります (例えば、DocumentRoot /var/www は現在 DocumentRoot / に変換されます)。これを行うには、各 vhost の DocumentRoot ディレクティブを変更するか、より簡単に、ファイルシステムにシンボリックリンクを作成します。
2.1 最初の方法: DocumentRoot の変更
DocumentRoot /var/www の vhost があると仮定しましょう。その vhost の vhost 設定を開き、DocumentRoot /var/www を DocumentRoot / に変更する必要があります。それに応じて、DocumentRoot /var/www/web1/web は DocumentRoot /web1/web に変換されます。もしこの方法を使用したい場合は、すべての vhost の DocumentRoot を変更する必要があります。
2.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 へのシンボリックリンクを作成し、再度起動します:
service apache2 stopln -s /var/www/var/run/apache2.pid /var/run/apache2.pid
service apache2 startこれで完了です。以前と同様に Web ページを呼び出すことができ、静的 HTML ファイルまたは mod_php を使用している限り、問題なく提供されるはずです。
これを phpinfo() ページでテストします。デフォルトのウェブサイトのドキュメントルートに nano で新しい info.php ファイルを開きます:
nano /var/www/html/info.php次の内容を追加します:
ファイルを保存し、ブラウザでサーバーのホスト名または IP アドレスを開き、/info.php を続けて入力します。例:
PHP が正しく動作している場合、次のページが表示されるはずです:

ここまで順調ですが、Apache が本当に chroot されているかどうかはどうやって確認できますか?chroot の外にあるファイルにアクセスしてみましょう。ここでは /etc/hosts を使用します。
nano /var/www/html/testchroot.php次の内容を追加します:
' . $var;ブラウザでテストファイルの URL を開きます。結果は:

ご覧のとおり、この PHP スクリプトから /etc/hosts ファイルの内容にはアクセスできなくなりました。
もう必要ない場合は、テストファイルを削除してください:
rm /var/www/html/testchroot.php
rm /var/www/html/info.phpCGI を使用している場合 (例: Perl、Ruby など)、インタープリター (例: /usr/bin/perl など) を必要なすべてのライブラリと共に chroot 刑務所にコピーする必要があります。必要なライブラリについては ldd コマンドで確認できます。例えば:
ldd /usr/bin/perlroot@server1:/var/www/html# ldd /usr/bin/perl
linux-vdso.so.1 (0x00007ffe951f4000)
libperl.so.5.20 => /usr/lib/x86_64-linux-gnu/libperl.so.5.20 (0x00007f1dafe54000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1dafc50000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1daf94f000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1daf732000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1daf387000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f1daf150000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1db0214000)
root@server1:/var/www/html#または jailkit ツールを使用して刑務所環境を構築します。必要なファイルをすべてコピーしたが、ページがまだ動作しない場合は、Apache エラーログ /var/log/apache2/error.log を確認してください。通常、問題の場所を教えてくれます。
3 リンク
- mod_unixd: https://httpd.apache.org/docs/2.4/mod/mod_unixd.html
- Apache: http://httpd.apache.org/
- Debian: http://www.debian.org/
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。