PHP5を使用して大規模な共有ホスティング用にDebian 6.0.4を構成しようとしています。パッケージApache2-mpm-worker libapache2-mod-fcgid Apache2-suexec
がインストールされます。
ドメインをディレクトリで管理するためにmod_vhost_alias
とsuexec
を正常にロードし、この構成を/etc/Apache2/sites-enabled/001-vhostalias
に配置しました。
NameVirtualHost *:80
ServerName web-test.mynet.lan
DocumentRoot /var/www/
SuexecUserGroup www-data www-data
UseCanonicalName Off
VirtualDocumentRoot /var/www/www.%2+/public_html/
VirtualScriptAlias /var/www.%2+/cgi-bin/
DirectoryIndex index.html index.htm index.shtml index.php
ScriptAlias /__php5-cgi/ "/usr/local/lib/custom-cgi/php5-cgi/"
Action php5-script /__php5-cgi/php5-cgi
AddHandler php5-script .php
上記で、p。たとえば、www.test-a.com
という名前のドメインをオンラインにする必要があります。
adduser test-a.com
(badnameを強制する)mkdir -p /var/www/www.test-a.com/public_html
とデータの入力chmod
およびchown
およびすべて正常に動作します .. ..SuEXECなしで、いくつかの簡単なPHPテストを行い、uid/gid www-data
として正常に機能します。しかし、今度は、分離ドメインに対してsuEXECを有効にする必要があります...
質問は:正しいuid/gidを自動的に取得するようにsuEXECにどのように伝えることができますか?
デフォルトのsuEXEC構成を使用しています。
root@web-test:/var/www# /usr/lib/Apache2/suexec -V
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="www-data"
-D AP_LOG_EXEC="/var/log/Apache2/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=100
-D AP_USERDIR_SUFFIX="public_html"
しかし、それはクラッシュします:
root@web-test:/var/www# tail /var/log/Apache2/suexec.log
[2012-05-05 18:31:48]: cannot run as forbidden uid (33/php5-cgi)
[2012-05-05 18:34:24]: uid: (33/www-data) gid: (33/www-data) cmd: php5-cgi
注:以前はApache2-mpm-itk
を使用していましたが、400〜500のVirtualHost定義の後は非常に不安定で、特にApache2ctl restart|graceful"
でクラッシュします。
ありがとう
Mpm-itkの使用をお勧めします
Package: Apache2-mpm-itk
Description: multiuser MPM for Apache 2.2
The ITK Multi-Processing Module (MPM) works in about the same way as the classical "prefork" module (that is, without threads),
except that it allows you to constrain each individual vhost to a particular system user. This allows you to run several different
web sites on a single server without worrying that they will be able to read each others' files. This is a third-party MPM that is
not included in the normal Apache httpd.
Please note that this MPM is somewhat less tested than the MPMs that come with Apache itself.
追加の パッチ を使用すると、uid/gidを動的に割り当てることができます。私はこのようなソリューションを約2年間問題なく使用しています。
<VirtualHost *:80>
ServerName www.example.net
ServerAlias *.example.net
UseCanonicalName Off
VirtualDocumentRoot /vhosts/example.net/%1
DirectoryIndex index.php index.html
AssignUserFromPath "^/vhosts/example.net/([^/]+)" mvh_$1 mvh_$1
<Directory /vhosts/example.net>
Options -Indexes +Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
SuexecUserGroup ディレクティブは変数をサポートしていないようです。そのため、やりたいことを簡単に行う方法はありません。 このメーリングリストの投稿 も不可能であり、代わりに CGIwrap を使用する必要があると述べています。私が考えることができる他の唯一のアプローチは、suEXECの mod_userdir統合 を悪用し、どういうわけかユーザーディレクトリにリクエストを書き換えることですが、これはうまく機能しない可能性があります。