Senha protege a raiz do documento virtual vhost

4

Eu tenho a seguinte configuração para gerar subdomínios / raízes de documentos virtuais automaticamente configurados em /etc/apache2/apache2.conf (rodando no Debian 7.0)

<VirtualHost *:80>
    ServerAlias *
    UseCanonicalName Off
    VirtualDocumentRoot /home/%2/htdocs/%1

    # Setup correct (virtual) document root as $_SERVER['DOCUMENT_ROOT'] for PHP
    php_admin_value auto_prepend_file /home/jbraun/setdocroot.php

    <Directory /home/%2/htdocs/%1>
            Options Indexes MultiViews FollowSymLinks
            AllowOverride All
            Order allow,deny
            Allow from all
            DirectoryIndex index.html index.php

            # These lines don't work
            AuthType Basic
            AuthName "HALMA"
            AuthUserFile /usr/local/apache/passwd/passwords
            Require valid-user
            # Commented for testing purposes only
            # Allow from halma.lan
            # Satisfy any

    </Directory>

    CustomLog ${APACHE_LOG_DIR}/vhost_access.log combined

O que está funcionando e o que é isso?

A configuração acima permite que os usuários criem subdiretórios sob seu diretório /home/username/htdocs/ e acessem-nos no navegador por um subdomínio gerado dinamicamente, por exemplo, a pasta /home/jbraun/htdocs/project estará acessível em http://project.jbraun.halma.lan (onde halma.lan é o nome da intranet local, o DNS correspondente está configurado e funcionando). Além disso, toda a história é acessível através do serviço DynDNS em URLs semelhantes, como project.jbraun.foobar.dyndns.org do mundo exterior.

O que eu quero alcançar e não está funcionando

Eu gostaria de ter acesso a partir da rede local ( halma.lan ou digamos 192.168.2.* ) sem proteção por senha enquanto o acesso da WAN proveniente de um URL DynDNS ( project.jbraun.foobar.dyndns.org ) deveria ser protegido por senha.

Assim, segui os documentos do Apache e adicionei as linhas "Auth *"

       AuthType Basic
       AuthName "HALMA"
       AuthUserFile /usr/local/apache/passwd/passwords
       Require valid-user

mas infelizmente nada acontece (sim, eu reiniciei o apache nesse meio tempo). O arquivo de log de erros do servidor também é silencioso.

Quando eu adiciono as mesmas linhas em alguns dos meus arquivos .htaccess tudo funciona como esperado, então eu suponho que deve haver alguns problemas com o VirtualDocumentRoot e / ou caminhos de arquivo gerados dinamicamente na configuração.

Alguém poderia me indicar a direção certa, como eu poderia realizar isso ou se é possível?

Agradecemos antecipadamente.

* [EDIT] *

Gostaria de postar a configuração que funcionou no final, apenas para referência e outras pessoas que pesquisam esse problema:

    <VirtualHost *:80>
        ServerAlias *.*.halma.lan
        ServerAlias *.*.foobar.dyndns.org
        UseCanonicalName Off
        VirtualDocumentRoot /home/%2/htdocs/%1

        # Setup correct (virtual) document root as $_SERVER['DOCUMENT_ROOT'] for PHP
        php_admin_value auto_prepend_file /home/jbraun/setdocroot.php

        #<Directory /home/%2/htdocs/%1>
        <Directory ~ "^/home/.*/htdocs/.*/">

                Options Indexes MultiViews FollowSymLinks
                AllowOverride All
                Order allow,deny
                DirectoryIndex index.html index.php

                AuthType Basic
                AuthName "HALMA"
                AuthUserFile /usr/local/apache/passwd/passwords
                Require valid-user
                Allow from 10.0.0
                Satisfy Any
        </Directory>

        CustomLog ${APACHE_LOG_DIR}/vhost_access.log combined

</VirtualHost>

Obrigado ao HBruijn

    
por hannenz 15.07.2014 / 18:49

1 resposta

3

Acho que é seguro dizer que as expansões %1 e %2 acontecem apenas nos poucos mod_vhost_alias diretivas que suportam essa mágica.

Este pode ser um exemplo em que a diretiva Location , um pouco menos segura, pode ser usada para conter as diretivas de autenticação, ou seja,

<Location />
   AuthType Basic
   AuthName "HALMA"
   AuthUserFile /usr/local/apache/passwd/passwords
   Require valid-user
</Location>

Como alternativa, uma diretiva Diretório também pode conter expressões regulares, permitindo algo como:

<Directory ~ "^/home/.*/htdocs/.*/">

</Directory>

O que você pode melhorar adicionando uma expressão regular que corresponda às convenções de nomeação de nome de usuário, por exemplo, "^/home/([a-z_][a-z0-9_]{0,30})/htdocs/.*/"

    
por 15.07.2014 / 19:34