mod_vhost_alias + suEXEC: seleção automática de uid / gid

1

Estou tentando configurar o Debian 6.0.4 para hospedagem compartilhada massiva com PHP5 . Pacotes apache2-mpm-worker libapache2-mod-fcgid apache2-suexec estão instalados.

Carreguei com êxito mod_vhost_alias e suexec para gerenciar meus domínios por diretório, depois coloquei essa configuração em /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

Com isto acima, p. e., colocando on-line um domínio chamado www.test-a.com precisa:

  • um adduser test-a.com (forçando o nome incorreto)
  • mkdir -p /var/www/www.test-a.com/public_html e colocando dados
  • arquiva um chmod e um chown e tudo funciona bem ...

Sem suEXEC fiz alguns testes PHP simples, funciona bem como uid / gid www-data . Mas agora eu preciso ativar o suEXEC para domínios isolados ...

A pergunta é: como eu posso dizer para suEXEC para obter automaticamente o uid / gid correto?

Estou usando a configuração suEXEC padrão:

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"

Mas falha:

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

Observação: usei anteriormente o apache2-mpm-itk , mas ficou instável depois de 400-500 definições do VirtualHost, especialmente em apache2ctl restart|graceful" .

Obrigado

    
por Fabio 05.05.2012 / 19:23

2 respostas

1

Vou sugerir usar o 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.

Com outro patch , você pode atribuir uid / gid dinamicamente. Estou usando essa solução há cerca de 2 anos sem nenhum problema.

<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>
    
por 29.07.2013 / 00:14
0

A diretiva SuexecUserGroup não parece oferecer suporte a variáveis, por isso não é fácil maneira de fazer o que quiser. Esta postagem na lista de discussão também diz que não é possível, e que CGIwrap deve ser usado em seu lugar. A única outra abordagem que posso pensar é abusar da integração do mod_userdir da suEXEC e de alguma forma reescrever os pedidos para um diretório de usuários, mas é improvável que funcione bem.

    
por 11.05.2012 / 01:47