Como senha-proteger diretórios com mod_authn_dbd e MySQL no Apache (a Debian 8)

Anúncios

 

Este guia explica como proteger com senha web diretórios (com usuários de um banco de dados MySQL) com mod_authn_dbd no Apache2 em um Debian 8 Servidor (Jessie). É uma alternativa para os arquivos de senha de texto sem formatação fornecida pelo mod_auth e permite que você use normal sintaxe SQL para criar/modificar usuários excluir. Você também pode configurar o mod_authn_dbd para autenticar em uma tabela existente do usuário MySQL. O mod_authn_dbd do apache é um substituto para mod_auth_mysql.

1 Nota preliminar

Eu uso o vhost http://www.example.com aqui com o vhost configuração arquivo /etc/apache2/sites-available/example.com.vhost e o documento raiz /var/ www/www.example.com/web. Eu quero senha-proteger o diretório /var/ www/example.com/web/protecteddir neste tutorial (traduz-se http://www.example.com/protecteddir/).

Você pode usar este tutorial para o basic Servidor LAMP Se você não tiver o Apache instalado ainda.

2 Instalando o MySQL ou MariaDB

Vou usar MariaDB, um garfo MySQL aqui em vez de MySQL. Mas o MySQL funciona tão bem se você prefere que. Para instalar o MariaDB, Podemos executar:

apt-get - y instalar mariadb-mariadb cliente-servidor

Você será solicitado a fornecer uma senha para o usuário root do MySQL:

New password for the MariaDB "root" user: <-- yourrootsqlpassword
Repeat password for the MariaDB "root" user: <-- yourrootsqlpassword

Instale o módulo DBD-MySQL:

apt-get install libaprutil1-dbd-mysql

Depois, habilitar o módulo mod_authn_dbd:

a2enmod dbd
a2enmod authn_dbd
authn_socache

Reinicie o Apache:

reiniciar o serviço apache2

3 Configurando o mod_authn_dbd

Você pode encontrar a documentação para mod_authn_dbd na documentação do Apache aqui http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html.

Tendo lido esses dois arquivos, Criamos um banco de dados MySQL chamado examplecomdb, em que vamos criar a tabela mysql_auth que irá conter a nossos usuários e senhas. Além disso, criamos o examplecom_admin de usuário do MySQL - Este usuário será usado por mod_auth_mysql para se conectar ao MySQL mais tarde:

mysqladmin -u root -p criar examplecomdb

mysql -u root -p

GRANT SELECT, Inserir, ATUALIZAÇÃO, DELETE ON examplecomdb.* TO 'examplecom_admin'@'localhost' IDENTIFIED BY 'examplecom_admin_password';
GRANT SELECT, Inserir, ATUALIZAÇÃO, DELETE ON examplecomdb.* TO 'examplecom_admin'@'localhost.localdomain' IDENTIFIED BY 'examplecom_admin_password';
PRIVILÉGIOS DE DESCARGA;

(Substituir examplecom_admin_password com uma senha de sua escolha).

Examplecomdb de uso;

criar a tabela mysql_auth (
username varchar (255) não nulo,
passwd varchar (255),
grupos varchar (255),
chave primária (username)
);

(É claro, Você também pode usar as tabelas existentes segurando suas credenciais de usuário, e você também pode ter campos adicionais na tabela, como um campo que define se um usuário está ativo ou não, por exemplo.)

Agora vamos inserir o usuário teste em nossa tabela de mysql_auth com o teste de senha; Este usuário pertence a grupo testgroup.

A senha tem que ser hash, Vou usar um hash SHA1 aqui, o hash pode ser criado com o comando htpasswd no shell do Linux:

htpasswd - bns teste teste

O resultado é este:

teste: {SHA} qUqP5cyxm6YcTAhz05Hph5gvu9M =

The first part is the username "test", separated by ":" and then comes the hashed password. We need the hashed password "{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=" only to insert it into our user database. A consulta do MySQL é a seguinte:

INSERT INTO 'mysql_auth' ('username', 'passwd', `groups`) VALUES('test', '{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=', 'testgroup');

Então deixamos o shell do MySQL:

desistir

A configuração para mod_authn_dbd como para ser incluído no arquivo vhost, Ele não pode ser adicionado dentro de um arquivo. htaccess. Portanto, podemos editar arquivo vhost e adicione a seguinte configuração no final do arquivo:

nano /etc/apache2/sites-available/example.com.vhost

[...]
 # mod_dbd configuration
DBDriver mysql
DBDParams "dbname=examplecomdb user=examplecom_admin pass=examplecom_admin_password"
DBDMin 4
DBDKeep 8
DBDMax 20
DBDExptime 300
<Directory "/var/www/example.com/web/protecteddir">
# configuração mod_authn_core e mod_auth_basic
# for mod_authn_dbd
AuthType Basic
AuthName "My Server"
# A cache as credenciais, put socache ahead of dbd here
AuthBasicProvider socache dbd
# Also required for caching: tell the cache to cache dbd lookups!
AuthnCacheProvideFor dbd
AuthnCacheContext my-server
# mod_authz_core configuration
Require valid-user
# mod_authn_dbd SQL query to authenticate a user
AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s"
</Diretório>

Recarregar o Apache:

serviço apache2 reload

Se você tem campos adicionais na sua tabela MySQL que definem se um usuário tem permissão para logar-se ou não (ex.. um campo chamado ativo), Você pode adicioná-lo para a consulta de usuário do SQL assim:

[...]
AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s and active = 'yes'"
[...]

A exigir usuário válido directiva faz com que cada usuário listado na tabela a mysql_auth pode logar enquanto ele/ela fornece a senha correta. Se desejar somente determinados usuários seriam autorizados a entrar, you'd use something like

[...]
require user jane joe
[...]

em vez disso. E se você quiser apenas membros de determinados grupos para ser autorizado a entrar, you'd use something like this:

[...]
require group testgroup
[...]

That's it! Now try to access http://www.example.com/protecteddir/, e você deveria ser perguntado para um nome de usuário e senha:

Digite o nome de usuário e senha.

Login bem sucedido.

4 Ligações

Fonte

Anúncios

Deixar uma resposta