Como configurar a autenticação para o userdir pessoal no Apache?

1

Eu configurei a autenticação no meu public_html no meu home dir, mas isso não tem efeito. Ou seja, eu deveria receber um pop-up pedindo minhas credenciais, mas isso não acontece. A autenticação funcionou bem com um diretório no diretório raiz do servidor e funcionou bem. Agora estou reestruturando o servidor.

Aqui estão mais alguns detalhes. Existem alguns problemas colaterais e questões relacionadas ao arquivo de configuração, que eu coloquei em negrito .

  • Eu tenho o diretório HTTP principal em /var/www/html e o mesmo para HTTPS.
  • Há apenas um arquivo, index.html com um link para minha URL ~tomas pessoal. Funciona bem. Estou usando o userdir mod para mapear ~tomas .
  • Eu também tenho um diretório pessoal cgi-bin , e os CGIs funcionam ok, mas eu gostaria que a URL ~tomas/cgi-bin mostrasse a lista de diretórios , que não funciona por algum motivo e Eu tenho 403 Proibido.
  • Eu quero ter o diretório principal disponível em HTTPS e HTTP e sem autorização. Porém, quando o cliente solicitar um dos diretórios public_html pessoais por meio de ~user , o acesso deverá ser autenticado e a autenticação deverá ocorrer por HTTPS . Então, o HTTP precisa mudar para HTTPS. Já configurei e testei recursos HTTPS, mas ainda não configurei nenhuma aplicação nesse contexto. Eu não tenho FQDN se isso importa.

A questão principal é, no entanto, como fazer com que a própria autenticação funcione para ~user , mesmo em HTTP.

Eu coloquei todas as configurações em userdir.conf e acho que o problema é usar o curinga em /home/*/public_html .

Aqui está o userdir.conf .

<IfModule mod_userdir.c>
        UserDir "public_html"
        UserDir disabled
        UserDir enabled tomas

        <Directory "/home/*/public_html">
                AllowOverride FileInfo AuthConfig Limit Indexes
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                <Limit GET POST OPTIONS>
                        Require all granted
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Require all denied
                </LimitExcept>
                AuthType Basic
                AuthName "Personal HTML"
                AuthUserFile "/usr/share/apache2/passwd/passwords"
                Require valid-user
                SSLOptions +StdEnvVars
        </Directory>

        <Directory "/home/*/public_html/cgi-bin">
                Options ExecCGI Indexes
                SetHandler cgi-script
        </Directory>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Se você tiver algum comentário sobre este arquivo de configuração ou sobre a minha abordagem ao Apache em geral, por favor, faça um comentário.

    
por Tomasz 02.06.2017 / 22:46

1 resposta

0

A chave é a diretiva Limit . A pista está presente na seção <Limit> Directive do Apache core mod página doc.

When using <Limit> or <LimitExcept> directives with the Require directive, note that the first Require to succeed authorizes the request, regardless of the presence of other Require directives.

Como se constata, o primeiro Require que corresponde ao caso em questão decide como é processado. Com a configuração da minha pergunta, isto é:

            <Limit GET POST OPTIONS>
                    Require all granted
            </Limit>
            <LimitExcept GET POST OPTIONS>
                    Require all denied
            </LimitExcept>
            AuthType Basic
            AuthName "Personal HTML"
            AuthUserFile "/usr/share/apache2/passwd/passwords"
            Require valid-user

com um simples pedido GET, é o Require all granted na segunda linha da listagem acima que faz a coisa. O AuthType Basic e outras linhas abaixo dele são código morto. Um caminho certo a seguir é:

            <Limit GET POST OPTIONS>
                    AuthType Basic
                    AuthName "Personal HTML"
                    AuthUserFile "/usr/share/apache2/passwd/passwords"
                    Require valid-user
            </Limit>
            <LimitExcept GET POST OPTIONS>
                    Require all denied
            </LimitExcept>

Como um aparte, aqui está um caso em que a diretiva Limit é ignorada.

            Require all granted
            <Limit GET POST OPTIONS>
                    AuthType Basic
                    AuthName "Personal HTML"
                    AuthUserFile "/usr/share/apache2/passwd/passwords"
                    Require valid-user
            </Limit>
            <LimitExcept GET POST OPTIONS>
                    Require all denied
            </LimitExcept>

A primeira linha é bem-sucedida e autoriza a solicitação.

    
por 03.06.2017 / 01:56