Quero limitar o acesso a determinados diretórios servidos pelo Apache. Quero que o cliente digite um nome de usuário e uma senha, mas quero que o Apache pegue o nome de usuário e a senha que a pessoa digitou e os passe como argumentos para um script python que escrevi para fazer a autenticação. Então, com base na saída do referido script, quero que o Apache permita ou negue o acesso. Isso é possível?
Responder1
A única maneira que conheço de fazer isso é usandomod_auth_external
ou mod_python
. O primeiro permite implementar sistemas de autenticação personalizados; o último fornece ao Apache um interpretador Python incorporado, que pode ser usado paraescreva um script de autenticação personalizado. Nenhum deles são módulos padrão ou muito populares.
No entanto...
o mais fácil seria simplesmente fazer com que seu sistema de autenticação atualizasse a lista de senhas que o Apache usa. O Apache vem com todas as ferramentas necessárias para adicionar/atualizar/excluir usuários de um arquivo .htpasswd ou .htdigest (deve ser trivial conectar os comandos htpasswd
ou htdigest
em qualquer sistema de gerenciamento de usuários).
Ou, você pode fazer com que mod_auth
(o sistema de autenticação padrão do Apache) leia um banco de dados por meio dos seguintes módulos:
mod_auth_dbm
- um módulo padrão que permite usar ofamília dbm de bancos de dados pré-relacionaismod_auth_mysql
- um módulo de terceiros que permite usar bancos de dados MySQL- Você também pode usar PostgreSQL e outros bancos de dados SQL usando
mod_dbd
emod_authn_dbd
.
Pessoalmente, eu seguiria esse caminho, pois é mais elegante do que duplicar os hashes de senha do usuário (espero que você não esteja armazenando as senhas) em um arquivo de texto separado, e criar um novo sistema de autenticação parece reinventar a roda.
Responder2
Você pode usar .htaccess para limitar o acesso a determinados diretórios.
http://www.elated.com/articles/password-protecting-your-pages-with-htaccess/
Você precisa criar um arquivo htpasswd ao qual você se refere no arquivo .htaccess
http://www.htaccesstools.com/htpasswd-generator/
Python: parece haver uma biblioteca que pode lidar com arquivos htpasswd:
http://pacopablo.com/wiki/pacopablo/blog/htpasswd-with-python
Mais sobre python e htpasswd:
http://packages.python.org/passlib/lib/passlib.apache.html
Não estou familiarizado com python e não posso fornecer uma solução completa. No entanto, acho que é possível e provavelmente não muito complicado se você estiver familiarizado com python, pesquisando um pouco no Google.