web-dev-qa-db-ja.com

Apacheマス仮想ホスティング&suexec&fcgid

私は 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>
  1. コメントからわかるように、問題のあるServerAdmin [email protected]SuexecUserGroup web1 web1、およびVirtualDocumentRoot /var/www/%-3+/web構成があります。

  2. さらに、セキュリティを確保するために、IfModuleは存在すべきではないと思います-mod_fcgidがロードできない場合は、サーバーもロードできません。

  3. Alow from allの代わりに、Deny from allを用意して、代わりにphp-libraryディレクトリを開く必要があると思います。

  4. 私が言ったように、私の意図は、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を有効にするとどうなりますか?

これらすべてを実装するアイデアや指令はありますか?

ありがとう。

4
centurian

実際には、十分な柔軟性がないため、動的仮想ホスト機能は最適ではありません(.htaccessでは不十分な場合もあります)。スクリプトを使用してvhostを生成するか、puppetなどを使用してvhostを定義します( https://github.com/puppetlabs/puppetlabs-Apache )。

ところで:あなたのphpセットアップのために私は(mod_proxy_fcgiまたはmod_fastcgi)でphp-fpm(オンデマンド)を使用します。 php-fpmを使用すると、suexecは必要ありません。すべてのユーザーが独自のポートまたはソケットを取得します。

2
ah83