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: 25.930 ]

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

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

webCalendar: a agenda e o PAM

Cliente Linux no servidor LDAP

Configuração "automágica" de servidor Linux PDC Samba

Servidor Samba "Autoservice"

Leitura recomendada

Restrição em diretórios usando o Apache2 sem mistérios

YASG (Yet Another Security Guide)

A Arte de HACKEAR Pessoas

Encapsulando BIND 9 e Apache 2 para obter maior segurança

Definição de hacker

  
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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts