Mudança de hábito: autenticando usuários em base de dados MySQL

O cadastro de novos usuários ocupa uma parte importante do tempo do administrador. Mas nem sempre é possível manter atualizada a lista de usuários cadastrados para acesso aos servidores da organização. O módulo pam_mysql permite autenticar usuários com o uso de uma base local centralizada, facilitando a gestão de pessoal.

[ Hits: 27.094 ]

Por: lourival araujo da silva em 03/08/2009


Montando o circo



Podemos criar novos usuários ou modificar os usuários cadastrados. Trata-se de uma forma de autenticação desejável para clientes ou usuários em organizações que mantenham quadros transitórios e os gerentes de rede não desejem cadastrar de forma avulsa esses usuários temporários.

Após o cadastro dos usuários devemos testar o processo de autenticação através da base MySQL. Mudaremos a configuração do serviço login para que suporte autenticação através da base MySQL:

# vi /etc/pam.d/login

auth required pam_mysql.so user=root password=m0d3rn0 host=localhost db=cadastro table=estagio usercolumn=usuario passwdcolumn=senha crypt=2

account required pam_mysql.so user=root password=m0d3rn0 host=localhost db=cadastro table=estagio usercolumn=usuario passwdcolumn=senha crypt=2

Somente o gerenciamento de autenticação (auth) e o gerenciamento de contas (account) necessitam ser direcionados para autenticação na base mysql, e é possível utilizá-los com a prioridade 'sufficient'. Contudo, essa prioridade não é recomendável, pois se somente a base MySQL for usada para autenticar e esse usuário não tiver senha no sistema, a prioridade 'sufficient' não o impedirá de acessar o sistema sem uma senha definida. Por esse motivo é recomendável configurar a prioridade 'required'.

Apresentamos, a seguir, as variáveis necessárias à conexão ao banco MySQL, utilizadas pelo módulo:
  • usuário = 'root';
  • senha = 'm0d3rn0';
  • servidor de autenticação = 'localhost';
  • banco de autenticação = 'cadastro';
  • tabela de autenticação ='estagio';
  • colunas da tabela = 'usuario' e 'senha';
  • tipo de senha = '0=texto;1=md5;2=password'.

Os campos são requeridos e é possível verificar que a ausência de qualquer um deles pode impedir o uso do banco de autenticação. Em versões mais modernas do módulo pam-myslq, os campos relacionados com tabela e coluna não necessitam de definição explícita.

O campo senha pode guardar hash com texto em claro, hash md5 ou hash criptográfico gerado pelo mysql. É interessante, para fins de segurança e sem prejuízo do desempenho, configurar um usuário, diferente do root, para acesso ao banco de autenticação , e com permissões somente sobre esse banco (ou somente sobre a tabela estagio):

# mysql -u root -p
Enter password: ******

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 35
Server version: 5.0.67-0ubuntu6 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use cadastro;
Database changed

mysql> create user estagiario2@'localhost' identified by 'm0d3rn0';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on cadastro.* to estagiario2@'localhost' identified by 'm0d3rn0';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye

Podemos, em seguida, acessar o banco de autenticação com o usuário administrativo criado para este fim:

# mysql -u estagiario2 -p
Enter password: ******

mysql> use mysql;
ERROR 1044 (42000): Access denied for user 'estagiario2'@'localhost' to database 'mysql'

mysql> use cadastro;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> quit;
Bye

# mysql -u estagiario2 cadastro -p
Enter password: ******

Devemos acessar a base de autenticação através do usuário administrador sem fazer uso da conta root do MySQL. Para isso alteraremos a configuração do serviço login do PAM (/etc/pam.d/login):

# vi /etc/pam.d/login

auth   requisite  pam_securetty.so
auth   requisite  pam_nologin.so
auth   required pam_mysql.so user=estagiario2 password=m0d3rn0  host=localhost  db=cadastro table=estagio usercolumn=usuario passwdcolumn=senha crypt=2
auth  sufficient pam_unix.so use_first_pass

account required pam_mysql.so user=estagiario2 password=m0d3rn0 host=localhost db=cadastro table=estagio usercolumn=usuario passwdcolumn=senha crypt=2

session  required   pam_env.so readenv=1
session  required   pam_env.so readenv=1 envfile=/etc/default/locale
session  required   pam_limits.so
session    optional   pam_lastlog.so

Pode-se agora autenticar os usuários cadastrados no banco MySQL.

Página anterior     Próxima página

Páginas do artigo
   1. Limpando o terreno
   2. Fixando as bases
   3. Montando o circo
   4. Entrando em cena
Outros artigos deste autor

Servidor Samba "Autoservice"

Autenticação via hardware: o módulo pam_usb

Autenticação via hardware: o módulo pam_blue

Cliente "automágico" Linux logando no domínio NT/Samba

Bom escudo não teme espada: o módulo pam_cracklib

Leitura recomendada

Recuperar a senha de root iniciando através do init=/bin/bash e alterando o arquivo /etc/shadow

Forense em Máquinas Virtuais

VPN com FreeS/WAN

SysLog: Sistema de log do Linux

Descobrir a senha de configuração pelo browser de um Access Point (AP)

  
Comentários
[1] Comentário enviado por lucas.suporte em 04/08/2009 - 13:28h


Interessante ...


Artigo bem explicado naum me recordo de ver um artigo aqui na vol descrito dessa forma bem simples. Uma boa alternativa para o LDAP. Aguardando suas diferenças e funções.É claro !!!

Parabens.

Lucas Rocha

[2] Comentário enviado por araujo_silva em 05/08/2009 - 08:12h

Valeu Lucas

O banco de dados pode ser mais elaborado e estabelecer relacionamentos. De formas que é possível ter várias organizações integradas em um mesmo banco, com gerentes para cada grupo, mas esse relacionamento deve ser construído através de aplicação ou modelando um banco apropriado.
É realmente uma alternativa ao ldap em organizações que não necessitem de uma estrutura mais robusta.


Contribuir com comentário