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

48

Estou tentando configurar o acesso mercurial usando o Apache http. Requer autenticação. Minha /etc/apache2/sites-enabled/mercurialaparência é 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 distribuição é um Ubuntu personalizado chamado Turnkey Linux Redmine

Jader Dias
fonte

Respostas:

73

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>
Lanselot
fonte
1
isso não funciona para mim. <Location /opt/mcmap/shapefiles.php> AuthType Kerberos AuthName KerberosLogin KrbServiceName HTTP/intranet.spectrumasa.com KrbMethodNegotiate On KrbMethodK5Passwd On KrbAuthRealms DOMAIN.COM Krb5KeyTab /etc/httpd/conf/intranet.keytab require valid-user Options Indexes MultiViews FollowSymLinks AllowOverride All Order allow,deny Allow from all SetOutputFilter DEFLATE </Location>
shorif2000
1
A página do documento apache explica tudo isso, mas irritantemente nunca fornece um exemplo completo. Copiei parte do exemplo deles, mas perdi a require valid-userparte. Um exemplo completo pode ser uma coisa maravilhosa. Obrigado.
Buttle Butkus
1
@sharif deve ser <Localização />, ou seja, o acesso ao url raiz de yourhost.com/ deve exigir que a configuração auth
AgBB
1
De <Location />qualquer forma, eu precisava não receber um erro de sintaxe ao carregar o arquivo de configuração.
Perseids
3
Por que foi <Location /> editado <Location>com uma mensagem de log interna de "corrigido ... para evitar muitos problemas", mas sem dizer nada sobre o motivo real da resposta em si? Não existe uma <Location>diretiva (ou seja, uma sem local) no Apache. Isso definitivamente causa problemas agora. ;) (Veja, por exemplo, acima.)
Sz.
9

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

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

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

Para acrescentar ao arquivo existente:

$ htpasswd -b /srv/auth/.htpasswd squire2 tickleme2
SLL
fonte
7

Você pode proteger um local ou 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 Denye Allowdiretrizes para um controle mais preciso.

Dan Andreatta
fonte
4

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

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

Documentação Apache

Atalaia, vigia, avisador
fonte
3

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

<Diretório / var / www />
  Índices de opções FollowSymLinks MultiViews
  AllowOverride All
  Ordem permitir, negar
  permitir de todos
  AuthType Basic
  AuthName "Restrito"
  Arquivo AuthBasicProvider
  AuthUserFile / etc / users
  Exigir usuário visitante
</Directory>

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

Espero que isso ajude alguém.

Alex Beynenson
fonte
3

Estamos executando uma versão otimizada da 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
DaveSB
fonte