HTTP Basic Auth, a menos que se conecte do escritório com o Apache 2.4?

1

Desejamos criar um website para fins de demonstração apenas que possamos:

  1. Acesse de qualquer lugar da Internet inserindo um nome de usuário e senha via HTTP Basic Auth.
  2. Para facilitar o uso, desejamos não ter que passar pelo HTTP Basic Auth no escritório, onde nosso escritório se conectará a partir de 202.161.24.210.
  3. Certas partes do site demo precisarão fazer solicitações REST para si mesmo, então desejamos whitelist 127.0.0.1 e :: 1 também.

Parece que conseguimos 2 e 3, mas 1 não funciona tão bem como pensávamos, mas os nossos utilizadores continuavam a receber o aviso de nome de utilizador e palavra-passe de autenticação básica HTTP, embora já estejam autenticados e vão diferentes páginas do site. Percebemos nos logs que eles recebem a seguinte mensagem de erro ao acessar certos recursos:

[Tue Jun 09 10:50:03.442834 2015] [access_compat:error] [pid 5740:tid 140705259312896] [client 78.52.242.163:62774] AH01797: client denied by server configuration: /var/www/docroots/stage/lib/yui/build/moodle-core-checknet/assets/checknet.txt, referer: http://stage.example.org/mod/scorm/player.php

Aqui está o nosso vhost Apache:

<VirtualHost *:80>
ServerName stage.example.org

DocumentRoot /var/www/docroots/stage
    <Directory /var/www/docroots/stage>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None

        # Only visible on Office network or anyone with a valid password.
        AuthType Basic
        AuthName "Authorisation Required"
        AuthUserFile "/var/www/htpasswd"
        Require valid-user
        Order allow,deny
        Allow from 202.161.24.210 127 ::1
        Satisfy any
    </Directory>
</VirtualHost>

Estamos executando o Apache 2.4.6 no CentOS 7. Nossa configuração está correta? Parece que nossa configuração funciona para os arquivos de nível superior em /var/www/docroots/stage , bem como para outros arquivos de imagens, css e javascript em subdiretórios que estão diretamente abaixo dele, mas pode ser que ele esqueça o HTTP Auth após determinado número de subdiretórios ? O SELinux está no modo permissivo.

    
por Machoke 09.06.2015 / 03:44

1 resposta

2

Sem a mensagem de erro completa (eu esperaria que o módulo e endereço IP) é um pouco de adivinhação, mas você está misturando diretivas de dois módulos diferentes no Apache 2.4, o Require diretiva do mod-authz-core e o legacy " Allow e Order do mod-access-compat, que pode não ser muito bem compilado.

Você pode tentar substituir as linhas

Order allow,deny
Allow from 202.161.24.210 127 ::1

Com o seguinte

Require ip  202.161.24.210 127 ::1/128

Com o já presente Satisfy any que deve atender aos seus requisitos.

Seu terceiro requisito:

Certain parts of demo site will need to make REST requests to itself...

Pode não estar acessando o servidor a partir do endereço de loopback, como seria de se esperar, mas pode ser configurado com o FQDN semelhante a http://api.example.com/rest? e se originar do endereço IP público do servidor.

Você pode adicionar os endereços IP públicos do servidor, mas isso é muito mais fácil de resolver a partir do Apache 2.4; o provedor local permite acesso ao servidor se qualquer uma das seguintes condições for verdadeira:

  • o endereço do cliente corresponde a 127.0.0.0/8
  • o endereço do cliente é: 1
  • ambos o cliente e o endereço do servidor da conexão são os mesmos

Então, em vez de listar o endereço de retorno de loop, use:

Require valid-user
#  Office Gateway:
Require ip 202.161.24.210 
#  API access from this host:   
Require local            
#  Only one or more of the above needs to match:
Satisfy any                  
    
por 09.06.2015 / 04:59