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.
Parte 3: 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
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:
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
Pode-se agora autenticar os usuários cadastrados no banco MySQL.
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
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
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.
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