Autorização do Apache para os usuários permitidos?

7

Li a resposta para esta pergunta:

link

Isso me ajudou a entender como não autenticar alguns usuários (de acordo com o IP):

<Directory /var/www/files/>
    Require valid-user
    Allow from 192.168.1.2
    Satisfy Any
    AuthUserFile /etc/apache2/basic.pwd 
    AuthName "Please enter username and password" 
    AuthType Basic  
</Directory>

Imagine que eu tenha esse banco de dados (diferente do banco de dados usado para autenticação):

User        IP 
Mark        192.168.1.2
Mike        192.168.1.3
Karl        192.168.1.4

1- posso permitir todos os endereços IP armazenados no banco de dados usando uma configuração no Apache? Eu não quero uma solução estática (o DB está mudando dinamicamente)?

2- outro problema é a autorização do IP permitido ser perdido, o Apache pode usar este DB para autorização, se o usuário tiver permissão para obter as páginas sem autenticação? em detalhes: Sabemos quando o Apache autentica usuários, conhece o nome de usuário das credenciais de autenticação, mas com o Allowing, o nome do usuário será perdido, eu quero que o Apache extraia o nome de usuário do IP, permitindo que ele extraia o mesmo endereço IP da mesma tabela?

ATUALIZAÇÃO:

Observação: acho que a resposta de Tony pode ser útil, mas também quero outras respostas (que não obrigam me para construir um módulo).

Meu objetivo dessa pergunta é "login único":

  • Eu uso o freeradius para autenticar os usuários internos (dentro da rede), portanto não quero que o Apache os autentique novamente.

  • Eu quero que o Apache autentique usuários externos usando o LDAP.

  • minha solução é usar Allow diretiva para permitir que os usuários internos sem autenticação, mas eu preciso permitir-lhes usando DB (primeiro problema)? e tentando configurar o Apache para Autorizar usuários internos (que eu não autentiquei) (segundo problema)?

Nota: Autorizar os usuários externos é muito fácil usando o LDAP (porque o Apache Conhece o nome do usuário que está lidando com credenciais de autenticação).

A minha solução sugerida é elegível para fazer o que eu quero fazer, se não o que você sugere como uma solução?

    
por Networker 20.07.2014 / 14:26

1 resposta

5

Você já tentou mod-auth external , ele permite que você faça o seu mecanismo de autenticação personalizado para o Apache. / p>

Ele dá acesso a variáveis de ambiente, como IP, USER, PASS, etc. Você pode escrever um script em um idioma com o qual está familiarizado e ir buscar os dados de autenticação do seu banco de dados.

O wiki tem alguns exemplos.

Se você criar um script de autenticação personalizado, verifique se ele está bem codificado (em termos de segurança).

O módulo está disponível no CentOS (mod_authnz_external) e no Ubuntu (libapache2-mod-authnz-external)

Aqui está um exemplo básico de configuração do Apache:

LoadModule authnz_external_module modules.d/mod_authnz_external.so
DefineExternalAuth my_auth  environment /tmp/auth.sh

<Location />
   AuthType Basic
   AuthName "My super special access"
   AuthBasicProvider external
   Require valid-user
   AuthExternal my_auth
</Location>

Aqui está o script muito simples que registra o IP no USUÁRIO e na SENHA, e aceita a autenticação somente se o usuário fornecido for 'Tony'.

Neste exemplo específico, o script é salvo em /tmp/auth.sh com o bit executável definido. Você pode fazer o que quiser (filtrar por IP, nome de usuário, etc).

#!/bin/bash

echo $(date) ${IP} >> /tmp/log.txt
echo $(date) ${USER} >> /tmp/log.txt
echo $(date) ${PASS} >> /tmp/log.txt

#Very basic filtering.
if [[ "${USER}" != "Tony" ]]
then
        exit 1;
fi
    
por 24.07.2014 / 22:43