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


14

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

No meu arquivo httpd.conf, 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. Os pedidos são concedidos sem autenticação fornecida. Quando alterno o log para o 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

Realmente não sei o que isso significa - e eu (pelo que sei) não tenho nenhuma declaração "Exigir tudo concedido" ou "" em nenhum dos meus arquivos.

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

ATUALIZAR:

Eu tenho um host virtual na porta SSL que permite proxy. Quando coloco as mesmas entradas dentro do

<proxy *> 

Na configuração do host virtual, ele funciona . Parece não funcionar no

 <Directory> 

cláusula. Tentei colocar outras cláusulas de diretório (específicas para outros diretórios) e isso também não funcionou.

ALÉM DISSO

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


1
Que outros <Directory>blocos você aplica aos pedidos que não estão funcionando?
Shane Madden

Acabei de colocar um para o diretório raiz "/", que deve ser aplicado a todo o servidor. Tentei adicionar um ao diretório inicial do usuário (por mod_userdir) e tive os mesmos resultados com isso.
26312 Brad

@ShaneMadden - na sua pergunta - tentei duplicar o bloco raiz "/" em um diretório "/ tmp". O diretório / tmp funciona CORRETAMENTE !! Então - esse problema é específico apenas ao diretório raiz ???
26312 Brad

Suspeito que exista um <Directory>bloco mais específico em outra parte da sua configuração do Apache que tenha precedência sobre o que você definiu /.
Shane Madden

Eu apenas cumprimentei tudo - nada. Estes arquivos de configuração foram muito modificações mínimas para os padrões recém-instaladas do Apache.
Brad

Respostas:


12

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


2
Isso não está correto. mod_auth_basic e mod_auth_digest podem ser usados ​​em <Directory> e <Location>, bem como em <File> <If> e <Proxy>. Na documentação do Apache 2.4 -> httpd.apache.org/docs/current/mod/… Em "Contexto" está listado "Diretório", que indica todos os contêineres válidos acima. -> httpd.apache.org/docs/current/mod/directive-dict.html#Context
JadedCore

Não deveria estar correto, mas funcionou para mim. Talvez seja porque na parte Diretório havia outras configurações (es. RewriteRule)
paul.ago 4/16

6

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 sequenciais de Exigir .

Por padrão, se você tiver mais de uma Diretiva Requer , elas serão consideradas como<RequireAny>

No meu <Directory>eu 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 estivesse correto. Eu tive que mudar Exigir lógica de <RequireAny>para <RequireAll>e parece que agora tudo funciona 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>

5

A resposta de jscott está incorreta. Apache 2.4 certamente faz permitir que as diretivas de autenticação em <Directory>recipientes. Além disso, esta é a única maneira segura de implementar autenticação, pois os <Location>contêineres podem ser acessados ​​de maneiras diferentes, permitindo que sua autenticação seja contornada se você não tomar cuidado. Para fins de referência, aqui está um recipiente 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>


1

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

AuthBasicProvider    file

Depois de ter este trabalho, você pode querer olhar para a Satisfydiretiva. 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 habilitar o acesso remoto baseado em senha ao conteúdo que normalmente não está disponível na Internet. Você pode não querer a Satisfydiretiva. Este é o meu /etc/apache2/basicauth.confarquivo:

# 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 /etc/apache2/allow_local.confarquivo de inclusão 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 habilitá-los, eu uso essas inclusões.

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

Tentou fazê-lo - ainda não funciona: -O
Brad

Se eu apenas incluir seus arquivos como estão, recebo um erro: "AuthName não permitido aqui" - pois você não pode especificar essas diretivas em nenhum lugar (como fora de uma cláusula "Local", "Diretório" ou "Proxy". estou faltando alguma coisa Se eu incluí-lo dentro da cláusula "Directory" -? novamente - estou deixar entrar sem credenciais.
Brad

Se eu colocar apenas "negar de todos" na cláusula "diretório", o acesso será negado (como seria de esperar). Se, em seguida, incluir seu primeiro script na cláusula de diretório, tenho acesso incondicionalmente permitido. Se eu remover o "satisfazer" no seu script, sou negado incondicionalmente.
25412 Brad

0

Eu tive o mesmo problema e é provável que seja um bug do Apache; no meu caso, o problema apareceu após uma atualização e desapareceu após 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 como esta :(


Deny from allé uma configuração do apache 2.2. httpd.apache.org/docs/2.4/upgrading.html#run-time
danger89

sim mudando directivas relacionadas com a segurança de uma forma retroativa incompatível é baaaaaad
greg

0

Experimentar:
<Directory "/"> ... </Directory>

Ao invés de:
<Directory /> ... </Directory>

Significado: encapsule o símbolo raiz com aspas duplas. Caso contrário, você pode fechar a tag com essa barra.


0

Verifique também se não há acidentalmente outro

    Require all granted

em outro lugar na mesma configuração de diretório. pode estar substituindo seu

    Require     valid-user
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.