Como configurar a autenticação básica em hosts virtuais do Apache httpd?

46

Estou tentando configurar o acesso mercurial usando o Apache http. Requer autenticação. Meu /etc/apache2/sites-enabled/mercurial é assim:

NameVirtualHost *:8080

<VirtualHost *:8080>
    UseCanonicalName Off
    ServerAdmin  webmaster@localhost
    AddHandler cgi-script .cgi
    ScriptAliasMatch ^(.*) /usr/lib/cgi-bin/hgwebdir.cgi/$1
</VirtualHost>

Todo tutorial que eu li na internet me diz para inserir estas linhas:

AuthType Basic
AuthUserFile /usr/local/etc/httpd/users

Mas quando faço isso, recebo o seguinte erro:

# /etc/init.d/apache2 reload
Syntax error on line 8 of /etc/apache2/sites-enabled/mercurial:
AuthType not allowed here

Minha distro é um Ubuntu personalizado chamado Turnkey Linux Redmine

    
por Jader Dias 30.03.2010 / 16:50

6 respostas

71

Você deve colocar isso dentro de uma diretiva Location:

<VirtualHost *:8080>

<Location /> #the / has to be there, otherwise Apache startup fails
            Deny from all
            #Allow from (You may set IP here / to access without password)
            AuthUserFile /usr/local/etc/httpd/users
            AuthName authorization
            AuthType Basic
            Satisfy Any # (or all, if IPs specified and require IP + pass)
                        # any means neither ip nor pass
            require valid-user
</Location>
...
</VirtualHost>
    
por 30.03.2010 / 17:33
9

Estou executando o Apache2 no Ubuntu 10.04 - mesmo problema e obrigado pela solução. Eu achei que tinha que colocar a configuração em /etc/apache2/apache2.conf

Você pode gerar o nome de usuário e senha usando o htpasswd. Novo arquivo:

$ htpasswd -c /srv/auth/.htpasswd squire

Para anexar ao arquivo existente:

$ htpasswd -b /srv/auth/.htpasswd squire2 tickleme2
    
por 24.05.2011 / 19:31
7

Você pode proteger um local ou um diretório. Para um diretório, adicione algo como:

<Directory /some/dir/cgi-bin/>
    Options +ExecCGI
    AddHandler cgi-script .cgi
    AuthType Basic
    AuthName 'Private scripts'
    AuthUserFile '/some/other/dir/.htpasswd'
    Require valid-user
</Directory>

Você também pode adicionar as diretivas Deny e Allow para um controle mais preciso.

    
por 30.03.2010 / 17:35
4

Parece que você está especificando as configurações de autenticação no VirtualHost . Normalmente, essas configurações são especificadas na diretiva Directory .

Você também pode usar .htaccesss arquivos, mas especificar no Apache conf é um bom padrão, pois tem menos exposição.

Documentação do Apache

    
por 30.03.2010 / 17:27
3

Estou executando o Apache2 no Ubuntu 10.10. Eu tenho tido problemas com todas as soluções acima, mas isso funcionou bem (dos documentos do apache):

<Directory /var/www/>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
  AuthType Basic
  AuthName "Restricted"
  AuthBasicProvider file
  AuthUserFile /etc/users
  Require user visitor
</Directory>

A maior diferença das respostas acima parece ser a diretiva AuthBasicProvider definida como "file" e a diretiva Require incluindo o bit "user" antes do nome de usuário real.

Espero que isso ajude alguém.

    
por 15.02.2011 / 03:19
3

Estamos executando uma versão otimizada de memória do apache e encontramos esse problema.

Isso ocorreu porque a seguinte linha não estava presente na configuração do apache:

LoadModule authz_user_module modules/mod_authz_user.so
    
por 06.01.2012 / 13:31