Por que a autenticação do Apache Basic não está funcionando?

12

Acabei de atualizar o Apache de sua versão 2003 para uma versão 2.4.1 totalmente nova e limpa. Tudo parece muito bom, exceto por uma coisa gritante:

No meu arquivo httpd.conf eu tenho o seguinte:

<Directory />
    AllowOverride none
    Options FollowSymLinks
    AuthType      Basic
    AuthName      "Enter Password"
    AuthUserFile  /var/www/.htpasswd
    Require     valid-user
</Directory>

Isso deve permitir que apenas usuários no arquivo de autenticação especificado acessem o servidor - exatamente como na versão anterior do Apache. (Certo?)

No entanto, não está funcionando. As solicitações são concedidas sem nenhuma autenticação fornecida. Quando eu alterno o log para LogLevel Debug, para os acessos, ele diz:

[Sat Mar 24 21:32:00.585139 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of Require all granted: granted
[Sat Mar 24 21:32:00.585446 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of <RequireAny>: granted

Eu realmente não sei o que isso significa - e eu (pelo que sei) não tem nenhuma declaração "Exigir todos os direitos" ou "" em nenhum dos meus arquivos.

Alguma idéia de por que isso não está funcionando ou onde depurar?

ATUALIZAÇÃO:

Eu tenho um virtualhost na porta SSL que permite o proxy. Quando eu coloco as entradas mesmo dentro do

<proxy *> 
cláusula

na configuração virtualhost, funciona . Não parece funcionar na

 <Directory> 
cláusula

. Eu tentei colocar sob outras cláusulas do Directory (específicas para outros diretórios) e que não funcionavam também.

TAMBÉM

Das perguntas de Shane abaixo - tentei duplicar o bloco "/" raiz para um diretório "/ tmp". O diretório / tmp funciona corretamente !! Então - esse problema é específico apenas para o diretório raiz ???

    
por Brad 25.03.2012 / 04:36

6 respostas

13

Eu tive um problema semelhante com a autenticação Digest em uma nova instalação do 2.4. Observando atentamente a documentação no site do Apache, parece que as diretivas de autenticação precisam estar em uma tag <Location> em vez de uma tag <Directory> . Consulte a documentação da diretiva AuthBasicProvider .

    
por 27.04.2012 / 21:28
5

A resposta do jscott está incorreta. O Apache 2.4 certamente faz permitir diretivas de autenticação em <Directory> contêineres. Além disso, essa é a única forma segura de implementar a autenticação, pois os contêineres <Location> podem ser acessados de maneiras diferentes, permitindo que sua autenticação seja contornada se você não for cuidadoso. Para referência, aqui está um contêiner de amostra que estou usando em um sistema de produção:

<Directory "/srv/http/my_domain.org/html/secret-stuff"> Options Indexes Multiviews FollowSymLinks AuthType Digest AuthName "staff" AuthUserFile /etc/httpd/private/secret-stuff.htaccess Require valid-user </Directory>

    
por 31.01.2015 / 13:20
2

Eu enfrentei o mesmo problema, e nada deste post me ajudou, então vou adicionar meus 2 centavos. No meu caso (apache 2.4), o problema estava nas diretivas Exigir sequenciais.

Por padrão, se você tiver mais de uma diretiva Exigir , ela será considerada como <RequireAny>

No meu <Directory> , tive

Require ip 192.168.100.0/24 10.9.8.0/24
Require valid-user

Portanto, a solicitação de autenticação não apareceu se o IP estava correto. Tive de alternar a lógica Exigir de <RequireAny> para <RequireAll> e parece que agora tudo está funcionando corretamente.

   <Directory /var/www>

      DirectoryIndex index.html
      Options -Indexes

      AuthType Basic
      AuthName "hidden data"
      AuthBasicProvider    file
      AuthUserFile /opt/httpaswd
      <RequireAll>
        Require ip 192.168.100.0/24 10.9.8.0/24
        Require valid-user
      </RequireAll>
    </Directory>
    
por 15.04.2017 / 15:42
1

Parece que falta um fornecedor para o AuthBasic. Tente adicionar uma linha como:

AuthBasicProvider    file

Depois de ter este trabalho, você pode querer olhar para a diretiva Satisfy . Isso pode ser usado para permitir acesso local sem uma senha, enquanto exige uma senha para acesso à Internet.

EDIT: Eu usuário um arquivo de inclusão para BasicAuth para permitir acesso remoto baseado em senha para o conteúdo que normalmente não está disponível na Internet. Você pode não querer a diretiva Satisfy . Este é o meu arquivo /etc/apache2/basicauth.conf :

# Basic authorization configuration include file 
# Enable basic auth access for remote users
AuthName             "Authentication Required"
AuthType             Basic
AuthBasicProvider    file
AuthUserFile         /etc/apache2/httpd.passwd
Require              valid-user
Satisfy              any

Eu também tenho um arquivo /etc/apache2/allow_local.conf include para autenticação baseada em IP.

# Common local access block - Allow all local addresses
Order deny,allow
Deny  from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Allow from 192.168.1.0/24

Para ativá-los, eu uso esses includes.

Include /etc/apache2/allow_local.conf
Include /etc/apache2/basicauth.conf

Você pode tentar adicionar à especificação de autorização. Isso funciona com a minha configuração de teste.

Order deny,allow
Allow from all
    
por 25.03.2012 / 05:38
0

Eu tive o mesmo problema e é provável que seja um bug do Apache; no meu caso, o problema apareceu depois de uma atualização e desapareceu depois de uma atualização subsequente, mas tive que adicionar isso na parte inferior:

Deny from all

É assustador que o Apache possa abrir brechas de segurança assim: (

    
por 27.04.2015 / 02:08
0

Experimente: <Directory "/"> ... </Directory>

Em vez de: <Directory /> ... </Directory>

Significado: encapsular o símbolo da raiz com aspas duplas. Caso contrário, você pode estar fechando a tag com essa barra.

    
por 17.05.2016 / 10:27

Tags