私は Falcoのチュートリアル に従い、2人のユーザー(例:johnとalice)と関連するディレクトリ(/var/www/john
と/var/ww/alice
)。
ここで、次のレベルに進みたいと思います。/etc/Apache2/sites-available/<username>
で異なるvhostを定義してApacheを再起動する代わりに、動的に構成された大規模仮想ホスティング( http://httpd.Apache .org/docs/2.2/vhosts/mass.html )。たとえば、DNSサーバーに次のレコードがあります:another.site.example.com
、ホームディレクトリを/var/www/another.site/web
にします。
問題は、suexecとmod_fcgidのこれらすべての構成設定です。 httpd.conf
のこのドラフトを終了しました(または/etc/Apache2/sites-available/mass_virtual
のようなファイルを作成する必要がありますか?):
NameVirtualHost *:80
#default virtual Host
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
ServerAdmin [email protected]
DocumentRoot /var/www/root/web/
<IfModule mod_fcgid.c>
SuexecUserGroup web-admin web-admin
<Directory /var/www/root/web/>
Options +ExecCGI
Options -Indexes
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/php-fcgi-scripts/root/php-fcgi-starter .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
# ErrorLog /var/log/Apache2/error.log
# CustomLog /var/log/Apache2/access.log combined
ServerSignature Off
</VirtualHost>
#3rd-level subdomain virtual hosts
<VirtualHost *:80>
UseCanonicalName Off
ServerAlias *.example.com
#problematic email!
ServerAdmin [email protected]
#is this /var/www/another.site/web or /var/www/www.another.site/web for
#a request for www.another.site.example.com ?
VirtualDocumentRoot /var/www/%-3+/web
<IfModule mod_fcgid.c>
#problematic group and user!
SuexecUserGroup web1 web1
<Directory /var/www/*/web/>
Options +ExecCGI
Options -Indexes
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/php-fcgi-scripts/*/php-fcgi-starter .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
# ErrorLog /var/log/Apache2/error.log
# CustomLog /var/log/Apache2/access.log combined
ServerSignature Off
</VirtualHost>
コメントからわかるように、問題のあるServerAdmin [email protected]
、SuexecUserGroup web1 web1
、およびVirtualDocumentRoot /var/www/%-3+/web
構成があります。
さらに、セキュリティを確保するために、IfModule
は存在すべきではないと思います-mod_fcgid
がロードできない場合は、サーバーもロードできません。
Alow from all
の代わりに、Deny from all
を用意して、代わりにphp-libraryディレクトリを開く必要があると思います。
私が言ったように、私の意図は、www.another.site.example.comを/var/www/another.site/webのユーザーに送信するように要求することですが、「 suEXEC "を使用すると、VirtualHost定義でSuexecUserGroupディレクティブを使用せずに、mod_userdirを使用してsuexecを呼び出すことができます。したがって、www.another.site.example.com
のリクエストがmod_rewriteを使用して透過的にwww.example.com/~another.site
に変換され、mod_userdirを使用してsuexecを有効にするとどうなりますか?
これらすべてを実装するアイデアや指令はありますか?
ありがとう。
実際には、十分な柔軟性がないため、動的仮想ホスト機能は最適ではありません(.htaccessでは不十分な場合もあります)。スクリプトを使用してvhostを生成するか、puppetなどを使用してvhostを定義します( https://github.com/puppetlabs/puppetlabs-Apache )。
ところで:あなたのphpセットアップのために私は(mod_proxy_fcgiまたはmod_fastcgi)でphp-fpm(オンデマンド)を使用します。 php-fpmを使用すると、suexecは必要ありません。すべてのユーザーが独自のポートまたはソケットを取得します。