Apache設定 · 4 min read · Jan 02, 2026

Debian EtchでApache2 mpm-peruserを使用してVhostsを別々のUID/GIDで実行する

Debian EtchでApache2 mpm-peruserを使用してVhostsを別々のUID/GIDで実行する

バージョン 1.0
著者: Falko Timme

この記事では、Debian Etchサーバーにapache2-mpm-peruserをインストールして構成する方法を説明します。apache2-mpm-peruserは、Apache 2ウェブサーバー用のMPM(マルチプロセッシングモジュール)で、apache2-mpm-itkに非常に似ていますが、より高速です(ほぼapache2-mpm-preforkと同じ速度です)。mpm-peruserを使用すると、各vhostを別々のUIDおよびGIDで実行できるため、1つのvhostのスクリプトや構成ファイルが他のすべてのvhostから読み取れる必要がなくなります。これは、perchild MPMの作業実装であるmetuxmpmに基づいています。その結果、PHPのsafe_modeのようなクルージを使用せずに、ユーザーのための健全で安全なウェブサーバー環境が得られます。

この文書には、いかなる種類の保証もありません!これがあなたにとって機能するという保証はありません!

1 前提条件

速度を考慮して、http://blog.stuartherbert.com/php/2008/03/20/using-mpm-peruser-to-secure-a-shared-server/を参照してください。

Debian Etchサーバーにmod_phpを使用した動作するApache2インストールがあると仮定します。例えば、次のようにインストールされます:

apt-get install apache2-mpm-prefork libapache2-mod-php5

phpinfo();関数を使用してPHPファイルを作成すると、例えば次のように…

vi /var/www/info.php

| |

…ブラウザで呼び出すと、preforkがapache2handlerの下のLoaded Modules行に表示されます:

2 apache2-mpm-peruserのインストール

apache2-mpm-itkとは異なり、apache2-mpm-peruserはDebianパッケージとしては利用できないため、自分のDebianパッケージを作成します(apache2-mpm-itkソースパッケージを基にしてapache2-mpm-peruser Debianパッケージを構築します)。

パッケージの構築を開始する前に、いくつかの前提条件をインストールします:

apt-get install build-essential dpkg-dev fakeroot debhelper dpatch apache2-prefork-dev libcap-dev apache2-src autoconf

次に、/usr/srcに移動し、apache2-mpm-itkソースパッケージをダウンロードします:

cd /usr/src  
apt-get source apache2-mpm-itk
ls -l
server1:/usr/src# ls -l  
total 52  
drwxr-xr-x 3 root root  4096 2008-08-16 13:29 apache2-mpm-itk-2.2.3-01  
-rw-r--r-- 1 root src  11392 2007-10-03 19:02 apache2-mpm-itk_2.2.3-01-2.diff.gz  
-rw-r--r-- 1 root src    664 2007-10-03 19:02 apache2-mpm-itk_2.2.3-01-2.dsc  
-rw-r--r-- 1 root src  29071 2006-10-31 00:04 apache2-mpm-itk_2.2.3-01.orig.tar.gz  
server1:/usr/src#

次に、apache2-mpm-itkディレクトリの名前をapache2-mpm-peruserに変更します:

mv apache2-mpm-itk-2.2.3-01 apache2-mpm-peruser-2.2.3-01

そのディレクトリに移動し、mpm-peruserパッチをダウンロードし、すでにディレクトリにあるmpm-itkパッチを削除します:

cd apache2-mpm-peruser-2.2.3-01/  
wget http://www.telana.com/files/httpd-2.2.3-peruser-0.3.0.patch  
rm -f apache2.2-mpm-itk.patch

次に、debian/サブディレクトリに移動します:

cd debian/  
ls -l
server1:/usr/src/apache2-mpm-peruser-2.2.3-01/debian# ls -l  
total 64  
-rw-r--r-- 1 root root    10 2008-08-15 16:21 apache2-mpm-itk.dirs  
-rw-r--r-- 1 root root   633 2008-08-15 16:21 apache2-mpm-itk.postinst  
-rw-r--r-- 1 root root   561 2008-08-15 16:21 apache2-mpm-itk.preinst  
-rw-r--r-- 1 root root   342 2008-08-15 16:21 apache2-mpm-itk.prerm  
-rw-r--r-- 1 root root   438 2008-08-15 16:21 changelog  
-rw-r--r-- 1 root root     2 2008-08-15 16:21 compat  
-rw-r--r-- 1 root root   980 2008-08-15 16:21 control  
-rw-r--r-- 1 root root 31777 2008-08-15 16:21 copyright  
-rwxr-xr-x 1 root root  1328 2008-08-15 16:21 rules  
server1:/usr/src/apache2-mpm-peruser-2.2.3-01/debian#

itkを含むファイル名のすべてのファイルの名前を変更します:

mv apache2-mpm-itk.dirs apache2-mpm-peruser.dirs  
mv apache2-mpm-itk.postinst apache2-mpm-peruser.postinst  
mv apache2-mpm-itk.preinst apache2-mpm-peruser.preinst  
mv apache2-mpm-itk.prerm apache2-mpm-peruser.prerm

次に、changelogファイルを修正する必要があります。例えば、次のようにします:

cat /dev/null > changelog  
vi changelog

| apache2-mpm-peruser (2.2.3-01-1) stable; urgency=low * Apache 2.2への初期移植。 -- Falko Timme <[email protected]> Fri, 15 Aug 2008 14:29:36 +0100 |

最後の行の先頭に正確に1つのスペースがあり(–の前)、メールアドレスと日付の間に2つのスペースがあることを確認してください!

次にcontrolファイルを開き、apache2-mpm-itkのすべての出現をapache2-mpm-peruserに置き換えます。説明はそのままにしておきますが、ITKをPeruserに置き換えます。Conflicts行にはapache2-mpm-itkを追加します:

vi control

| Source: apache2-mpm-peruser Section: net Priority: extra Build-Depends: apache2-src, apache2-prefork-dev, libcap-dev, autoconf, debhelper (>> 5.0.0) Maintainer: Falko Timme <[email protected]> Standards-Version: 3.7.2 Package: apache2-mpm-peruser Provides: apache2-modules, apache2, httpd, httpd-cgi Conflicts: apache2-mpm-prefork, apache2-mpm-itk, apache2-mpm-worker, apache2-mpm-perchild, apache2-mpm-event, apache2-common Depends: ${apache:Depends}, ${shlibs:Depends} Architecture: any Description: multiuser MPM for Apache 2.2 The Peruser Multi-Processing Module (MPM) works in about the same way as the classical "prefork" module (that is, without threads)、ただし、各個別のvhostを特定のシステムユーザーに制約することができます。これにより、単一のサーバーで複数の異なるウェブサイトを実行でき、相互にファイルを読み取ることができる心配がありません。 . このMPMは非常に実験的であり、他のMPMとは同じツリーからではないことに注意してください。 |

次に、rulesファイルを修正します:

vi rules

次の行を置き換えます:

| cd apache2.2/ && patch -p1 < ../apache2.2-mpm-itk.patch |

| cd apache2.2/ && patch -p1 < ../httpd-2.2.3-peruser-0.3.0.patch |

に置き換えます。

次の行を置き換えます:

| sed 's,prefork,itk,;s,^".*/configure",../apache2.2/configure,;s,^"--srcdir=.*",--srcdir=../apache2.2/,' < /usr/share/apache2/build/config.nice > build-tree/config.nice |

| sed 's,prefork,peruser,;s,^".*/configure",../apache2.2/configure,;s,^"--srcdir=.*",--srcdir=../apache2.2/,' < /usr/share/apache2/build/config.nice > build-tree/config.nice |

に置き換えます。

次の行を置き換えます:

| install -m 0755 build-tree/apache2 debian/apache2-mpm-itk/usr/sbin/ |

| install -m 0755 build-tree/apache2 debian/apache2-mpm-peruser/usr/sbin/ |

に置き換えます。

次の行を置き換えます:

| echo "apache:Depends=apache2.2-common (= `dpkg -s apache2.2-common | grep ^Version: | cut -d" " -f2`)") >> debian/apache2-mpm-itk.substvars |

| echo "apache:Depends=apache2.2-common (= `dpkg -s apache2.2-common | grep ^Version: | cut -d" " -f2`)") >> debian/apache2-mpm-peruser.substvars |

に置き換えます。

完全なファイルは次のようになります:

| #! /usr/bin/make -f clean: dh_testdir dh_testroot dh_clean $(RM) -r build-tree/ $(RM) -r apache2.2/ $(RM) build-stamp build: build-stamp build-arch: build-stamp build-stamp: dh_testdir mkdir build-tree/ mkdir apache2.2/ cd apache2.2/ && tar zxf /usr/src/apache2.tar.gz # workaround for apache2-src 2.2.3-3 if [ -d apache2.2/apache2 ]; then \ mv apache2.2/apache2/* apache2.2/; \ rmdir apache2.2/apache2/; \ fi cd apache2.2/ && patch -p1 < ../httpd-2.2.3-peruser-0.3.0.patch cd apache2.2/ && autoconf sed 's,prefork,peruser,;s,^".*/configure",../apache2.2/configure,;s,^"--srcdir=.*",--srcdir=../apache2.2/,' < /usr/share/apache2/build/config.nice > build-tree/config.nice chmod +x build-tree/config.nice cd build-tree/ && ./config.nice cd build-tree/ && $(MAKE) touch build-stamp binary: binary-arch binary-indep: binary-arch: build-arch dh_testdir dh_testroot dh_installdirs install -m 0755 build-tree/apache2 debian/apache2-mpm-peruser/usr/sbin/ dh_fixperms dh_strip dh_installdocs README dh_installchangelogs dh_installdeb dh_compress dh_shlibdeps echo "apache:Depends=apache2.2-common (= `dpkg -s apache2.2-common | grep ^Version: | cut -d" " -f2`)") >> debian/apache2-mpm-peruser.substvars dh_gencontrol dh_md5sums dh_builddeb .PHONY: clean build build-arch binary binary-arch binary-indep |

これで必要な変更はすべて完了しました - パッケージを構築できます:

cd ..  
dpkg-buildpackage

パッケージは/usr/srcディレクトリに利用可能になります:

cd /usr/src  
ls -l
server1:/usr/src# ls -l  
total 6512  
-rw-r--r-- 1 root src    11392 2007-10-03 19:02 apache2-mpm-itk_2.2.3-01-2.diff.gz  
-rw-r--r-- 1 root src      664 2007-10-03 19:02 apache2-mpm-itk_2.2.3-01-2.dsc  
-rw-r--r-- 1 root src    29071 2006-10-31 00:04 apache2-mpm-itk_2.2.3-01.orig.tar.gz  
drwxr-xr-x 5 root root    4096 2008-08-16 13:40 apache2-mpm-peruser-2.2.3-01  
-rw-r--r-- 1 root src      353 2008-08-16 13:36 apache2-mpm-peruser_2.2.3-01-1.dsc  
-rw-r--r-- 1 root src      710 2008-08-16 13:40 apache2-mpm-peruser_2.2.3-01-1_i386.changes  
-rw-r--r-- 1 root src   165438 2008-08-16 13:40 apache2-mpm-peruser_2.2.3-01-1_i386.deb  
-rw-r--r-- 1 root src    50282 2008-08-16 13:36 apache2-mpm-peruser_2.2.3-01-1.tar.gz  
-rw-r--r-- 1 root root 6364431 2008-03-22 10:35 apache2.tar.gz  
server1:/usr/src#

私たちが構築したmpm-peruserパッケージはapache2-mpm-peruser_2.2.3-01-1_i386.debという名前です。これをインストールする前に、apache2-mpm-preforkをアンインストールする必要があります。これはapache2-mpm-peruserと競合するためです(controlファイルを思い出してください):

apt-get remove apache2-mpm-prefork

server1:/usr/src# apt-get remove apache2-mpm-prefork
Reading package lists… Done
Building dependency tree… Done
The following packages will be REMOVED:
apache2-mpm-prefork libapache2-mod-php5
0 upgraded, 0 newly installed, 2 to remove and 68 not upgraded.
Need to get 0B of archives.
After unpacking 6115kB disk space will be freed.
Do you want to continue [Y/n]? <– Y
(Reading database … 29620 files and directories currently installed.)
Removing libapache2-mod-php5 …
Module php5 disabled; run /etc/init.d/apache2 force-reload to fully disable.
Removing apache2-mpm-prefork …
Stopping web server (apache2)….
server1:/usr/src#

残念ながら、これによりlibapache2-mod-php5パッケージも削除されるため、PHPはもう動作しません。これについては後で対処します。

これでapache2-mpm-peruserパッケージをインストールできます:

dpkg -i apache2-mpm-peruser_2.2.3-01-1_i386.deb

今、libapache2-mod-php5パッケージを再インストールしようとすると、aptはapache2-mpm-peruserを削除し、apache2-mpm-preforkを再インストールしようとすることがわかります。これは望ましくないため、これを中止します:

server1:/usr/src# apt-get install libapache2-mod-php5
Reading package lists… Done
Building dependency tree… Done
The following extra packages will be installed:
apache2-mpm-prefork
Suggested packages:
php-pear
The following packages will be REMOVED:
apache2-mpm-peruser
The following NEW packages will be installed:
apache2-mpm-prefork libapache2-mod-php5
0 upgraded, 2 newly installed, 1 to remove and 61 not upgraded.
Need to get 0B/2833kB of archives.
After unpacking 5681kB of additional disk space will be used.
Do you want to continue [Y/n]? <– n
Abort.
server1:/usr/src#

これは、libapache2-mod-php5パッケージが構築されたときに、メンテナがそれがapache2-mpm-preforkまたはapache2-mpm-itkのいずれかに依存すると指示したために発生します。これは、libapache2-mod-php5をソースから再構築し、apache2-mpm-peruserパッケージをそのパッケージの依存関係に追加する必要があることを意味します(他のパッケージでも同じ問題がある場合は、これを行うことができます)。これについては後で説明します。

Share: X/Twitter LinkedIn

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

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