Palavra-chave AuthExternal inválida (pwauth)

6

Estou tentando configurar a autenticação básica no meu servidor Apache2 usando AuthExternal e pwauth. Assim, usando os usuários do sistema para executar a autenticação, em vez de outro usuário db.

Eu poderia instalar e ativar tudo perfeitamente. Apache2 (2.4.12-2ubuntu2 ), libapache2-mod-authnz-external (3.3.2-0.1) e pwauth (2.3.11-0.1). Está tudo rodando no meu Ubuntu 15.10 Desktop edition e no Linux 4.2.0-30-generic. Nada extravagante realmente, todo o padrão willy repo instala.

O Apache2 está em execução e o módulo AuthExternal está carregado corretamente, pelo menos até onde eu sei:

me@bla:~$ systemctl status apache2.service | grep Active
  Active: active (running) since Thu 2016-02-25 13:41:02 CET; 33s ago
me@bla:~$ apache2ctl -M | grep external
  authnz_external_module (shared)

Eu defini os módulos a serem usados, bem como o Derictory ao qual aplicar a autenticação no arquivo de configuração do VHost. Veja meu /etc/apache2/sites-enabled/000-default.conf abaixo:

<IfModule mod_authnz_external.c>
    AddExternalAuth pwauth /usr/sbin/pwauth
    SetExternalAuthMethod pwauth pipe
</IfModule>

<VirtualHost *:80>

    ServerAdmin webmaster@localhost 
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/html/sec>
        AuthType Basic
        AuthName "Restricted Area"
        AuthBasicProvider external
        AuthExternal pwauth
        Require user pat 
    </Directory>
</VirtualHost>

Agora, quando tento abrir o loclahost / sec em um navegador, sou solicitado a efetuar login. Forneço pat como usuário e senha e aguardo a mágica. Infelizmente recebo um erro interno do servidor em vez do esperado index.html 'Hello World' ...

Por isso, verifiquei os logs de erros do apache2 e localizei 'Palavra-chave AuthExternal inválida (pwauth)' lá. Depois de algumas escavações, percebi que esse erro é gerado pelo AuthExternal porque ele não consegue encontrar o pwauth especificado. Então fui verificá-lo executando:

sudo -u www-data which pwauth

Isso retornou o mesmo caminho especificado no arquivo de configuração acima, para que possa ser excluído ...

Eu então tentei redirecionar o AuthExternal para um shell script para testar o módulo independentemente do pwauth. O script simplesmente anexa uma string a um arquivo para que eu veja se ele está sendo chamado pelo AuthExternal ou não. Eu executei 'chmod u + s a + x' no arquivo para permitir que ele fosse executado com privilégio de root, já que o pwauth precisava disso para acessar o passwd, e deu outra chance. Eu também tentei o mesmo sem u + s, pois não é necessário aqui, mas isso não foi nada melhor. Esse teste me levou a pensar que há algo errado com o meu apache2 e não com o pwauth.

Eu testei tudo isso com o Cromium e o Firefox, não que isso importe em seu caso, mas você sabe ... nunca se pode ter certeza, certo? Eu também tentei todas as variações que eu poderia pensar em relação a onde eu estava colocando as diretivas. Tudo diretamente no appache2.conf, no diretório em appache2.conf e na inclusão do módulo em ./conf-enable/security.conf, módulos em segurança e diretório no vhost, etc ... Nenhuma dessas variações ajudou, algumas fizeram pior ainda ...

Eu, então, pesquisei bastante .... Mas eu só consegui encontrar informações sobre esse tópico na era do httpd.conf, que realmente não se aplica mais. Mesmo que ainda forneça algumas dicas válidas e úteis ... Além disso, a maioria, senão todos esses segmentos, usam uma abordagem .htaccess. O que estou tentando evitar usando as diretivas Directory para evitar a falta de desempenho induzida pelo .htaccess.

De qualquer forma, estou sem ideias de onde procurar ou o que tentar. Estou me voltando em círculos para ser honesto e apreciaria qualquer sugestão, idéias ou soluções para me levar adiante.

    
por Pat 25.02.2016 / 11:47

1 resposta

3

Acontece que o AddExternalAuth e o SetExternalAuthMethod devem ser colocados dentro da declaração do VirtualHost. Por isso, a seguinte configuração funciona bem:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost 
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    AddExternalAuth pwauth /usr/sbin/pwauth
    SetExternalAuthMethod pwauth pipe

    <Directory /var/www/html/sec>
        AuthType Basic
        AuthName "Restricted Area"
        AuthBasicProvider external
        AuthExternal pwauth 
        Require user pat
    </Directory>
</VirtualHost>

Eu ainda não entendi porque o cenário em que a declaração é feita globalmente, portanto diretamente no apache2.conf, não funciona. No entanto, o problema inicial é resolvido ....

    
por Pat 26.02.2016 / 01:59