web-dev-qa-db-ja.com

mod_vhost_alias + suEXEC:uid / gidの自動選択

PHP5を使用して大規模な共有ホスティング用にDebian 6.0.4を構成しようとしています。パッケージApache2-mpm-worker libapache2-mod-fcgid Apache2-suexecがインストールされます。

ドメインをディレクトリで管理するためにmod_vhost_aliassuexecを正常にロードし、この構成を/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"でクラッシュします。

ありがとう

1
Fabio

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>
1
ALex_hha

SuexecUserGroup ディレクティブは変数をサポートしていないようです。そのため、やりたいことを簡単に行う方法はありません。 このメーリングリストの投稿 も不可能であり、代わりに CGIwrap を使用する必要があると述べています。私が考えることができる他の唯一のアプローチは、suEXECの mod_userdir統合 を悪用し、どういうわけかユーザーディレクトリにリクエストを書き換えることですが、これはうまく機能しない可能性があります。

0
mgorven