1. #1
    Avatar de helldanger1
    Registo
    Aug 2007
    Idade
    43
    Posts
    29.633

    Padrão 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.

    Por: lourival araujo da silva

    Limpando o terreno
    Precisamos instalar o sistema de gerenciamento de banco de dados e o módulo de autenticação, o qual faz a integração entre a autenticação no banco a ser criado e o PAM-Linux. A instalação fará ajustes no sistema, que correspondem aos acréscimos de bibliotecas, arquivos de configuração, e do serviço do MySQL, no diretório de configuração do pam (/etc/pam.d):

    # apt-get install mysql-server-5.0 mysql-client-5.0
    # apt-get install libpam-mysql

    # ls /lib/security
    pam_access.so
    pam_issue.so
    pam_permit.so
    pam_umask.so
    pam_blue.so
    pam_keyinit.so
    pam_rhosts_auth.so
    pam_unix_acct.so
    pam_lastlog.so
    pam_unix_auth.so
    pam_time.so
    pam_nologin.so
    pam_debug.so
    pam_limits.so
    pam_rootok.so
    pam_unix_passwd.so
    pam_deny.so
    pam_listfile.so
    pam_rsa.so
    pam_unix_session.so
    pam_securetty.so
    pam_unix.so
    pam_warn.so
    pam_motd.so
    pam_encfs.so
    pam_selinux.so
    pam_usb.so
    pam_xauh.so
    pam_env.so
    pam_mail.so
    pam_namespace.so
    pam_tally.so
    pam_exec.so
    pam_mkhomedir.so
    pam_shells.so
    pam_utoken.so
    pam_ssh.so
    pam_mount.so
    pam_stress.so
    pam_wheel.so
    pam_filter.so
    pam_mysql.so
    pam_succeed_if.so
    pam_winbind.so
    pam_ftp.so
    pam_group.so
    pam_gnome_keyring.so

    # ls /etc/pam.d
    apache2
    atd
    cron
    cups
    common-auth
    common-account
    common-password
    common-pammount
    common-session
    gdm
    gdm-autologin
    gnome-screensaver
    login
    mysql
    other
    samba
    squid
    sudo
    sshd
    su

    # apropos mysql
    mysql (1) - the MySQL command-line tool
    mysql_fix_privilege_tables (1) - upgrade MySQL system tables
    mysql_install_db (1) - initialize MySQL data directory
    mysqlaccess (1) - client for checking access privileges
    mysqladmin (1) - client for administering a MySQL server
    mysqlbinlog (1) - utility for processing binary log files
    mysqlbug (1) - generate bug report
    mysqlcheck (1) - a table maintenance and repair program
    mysqld (8) - the MySQL server
    mysqld_safe (1) - MySQL server startup script
    mysqldump (1) - a database backup program
    mysqldumpslow (1) - Parse and summarize the MySQL slow query log.
    mysqlhotcopy (1) - a database backup program
    mysqlimport (1) - a data import program
    mysqlmanager (8) - the MySQL Instance Manager
    mysqlshow (1) - display database, table, and column information
    mysqltest (1) - program to run test cases
    safe_mysqld (1) [mysqld_safe] - MySQL server startup script

    As ferramentas necessárias ao gerenciamento do banco de dados de autenticação foram instaladas. Temos agora a possibilidade de criar, modificar ou remover bancos de dados. O que faremos em conjunto com a autenticação dos usuários.



    Todos os artigos por mim postados, estão hosp na própria Internet,Qualquer arquivo protegido deve permanecer,no máximo, 24 horas em seu computador. - Eles podem ser baixados apenas para teste, devendo o usuário apaga-lo ou comprá-lo apos 24 horas. - A Aquisição desses arquivos pela internet é de única e exclusiva responsabilidade do usuário.

  2. #2
    Avatar de helldanger1
    Registo
    Aug 2007
    Idade
    43
    Posts
    29.633
    Fixando as bases
    Criaremos uma senha para o administrador do banco de dados e o próprio banco de autenticação. Complementaremos o procedimento com a criação de uma tabela para inclusão dos usuários temporários.

    # mysqladmin -u root -p password 'm0d3rn0'
    Enter password: *******

    # mysql -u root -p

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

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

    mysql> quit;

    # mysqladmin create cadastro -p
    Enter password: *******

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

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

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

    mysql> show databases;
    +--------------------------+
    | Database |
    +--------------------------+
    | information_schema |
    | cadastro |
    | mysql |
    +--------------------------+
    3 rows in set (0.05 sec)

    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> create table estagio (usuario varchar(30), email varchar(30),senha varchar(45), depart varchar (20));
    mysql> show tables;
    +---------------------------+
    | Tables_in_cadastro |
    +---------------------------+
    | estagio |
    +---------------------------+
    1 row in set (0.00 sec)

    mysql> desc estagio;
    +---------+--------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +---------+--------------+------+-----+---------+-------+
    | usuario | varchar(30) | YES | | NULL | |
    | email | varchar(30) | YES | | NULL | |
    | senha | varchar(45) | YES | | NULL | |
    | depart | varchar(20) | YES | | NULL | |
    +---------+--------------+------+-----+---------+-------+
    4 rows in set (0.00 sec)

    Podemos iniciar a inclusão de usuários:

    mysql> insert into estagio values('estagiario2','[email protected]',passw ord('1234'),'contab');
    mysql> insert into estagio values('estagiario3','[email protected]',pass word('1234'),'juridico');

    mysql> select * from estagio;
    +-------------+--------------------+----------------+----------+
    | usuario | email | senha | depart |
    +-------------+--------------------+----------------+----------+
    | estagiario2 | [email protected] | *A4B61...0BFCF | contab |
    | estagiario3 | [email protected]| *A4B61...EBFCF | juridico |
    +-------------+--------------------+----------------+----------+
    2 rows in set (0.02 sec)

    Teremos os usuários habilitados para autenticar através do banco instalado.


    Todos os artigos por mim postados, estão hosp na própria Internet,Qualquer arquivo protegido deve permanecer,no máximo, 24 horas em seu computador. - Eles podem ser baixados apenas para teste, devendo o usuário apaga-lo ou comprá-lo apos 24 horas. - A Aquisição desses arquivos pela internet é de única e exclusiva responsabilidade do usuário.

  3. #3
    Avatar de helldanger1
    Registo
    Aug 2007
    Idade
    43
    Posts
    29.633
    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 [email protected]'localhost' identified by 'm0d3rn0';
    Query OK, 0 rows affected (0.00 sec)

    mysql> grant all privileges on cadastro.* to [email protected]'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: ******


    Todos os artigos por mim postados, estão hosp na própria Internet,Qualquer arquivo protegido deve permanecer,no máximo, 24 horas em seu computador. - Eles podem ser baixados apenas para teste, devendo o usuário apaga-lo ou comprá-lo apos 24 horas. - A Aquisição desses arquivos pela internet é de única e exclusiva responsabilidade do usuário.

  4. #4
    Avatar de helldanger1
    Registo
    Aug 2007
    Idade
    43
    Posts
    29.633
    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.


    Todos os artigos por mim postados, estão hosp na própria Internet,Qualquer arquivo protegido deve permanecer,no máximo, 24 horas em seu computador. - Eles podem ser baixados apenas para teste, devendo o usuário apaga-lo ou comprá-lo apos 24 horas. - A Aquisição desses arquivos pela internet é de única e exclusiva responsabilidade do usuário.

  5. #5
    Avatar de helldanger1
    Registo
    Aug 2007
    Idade
    43
    Posts
    29.633
    Entrando em cena
    Para não haver falhas na autenticação dos usuários: todos precisam possuir um shell válido, mas não devem ter senha definida no sistema.

    # less /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    bin:x:2:2:bin:/bin:/bin/sh
    sys:x:3:3:sys:/dev:/bin/sh
    sync:x:4:65534:sync:/bin:/bin/sync
    games:x:5:60:games:/usr/games:/bin/sh
    man:x:6:12:man:/var/cache/man:/bin/sh
    lp:x:7:7:lp:/var/spool/lpd:/bin/sh
    mail:x:8:8:mail:/var/mail:/bin/sh
    news:x:9:9:news:/var/spool/news:/bin/sh
    nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
    syslog:x:101:102::/home/syslog:/bin/false
    klog:x:102:103::/home/klog:/bin/false
    hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false
    avahi-autoipd:x:104:112:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
    gdm:x:105:113:Gnome Display Manager:/var/lib/gdm:/bin/false
    avahi:x:110:121:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
    haldaemon:x:111:122:Hardware abstraction layer,,,:/var/run/hald:/bin/false
    prometeu:x:1000:1000:prometeu,,,:/home/prometeu:/bin/bash
    mysql:x:112:125:MySQL Server,,,:/var/lib/mysql:/bin/false
    estagiario1:x:1021:1010:,,,:/home/estagiario1:/bin/bash
    estagiario2:x:1022:1011:,,,:/home/estagiario2:/bin/bash

    Podemos testar a autenticação dos usuários cadastrados no banco de autenticação:

    Ubuntu 8.10 prometeu-laptop tty2
    prometeu-laptop login: estagiario2
    Password: ******

    Login incorrect

    $ sudo tail /var/log/auth.log
    Jul 17 10:21:15 ctadebian login[4475]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=tty2 ruser= rhost= user=estagiario2
    Jul 17 10:21:17 ctadebian login[4475]: FAILED LOGIN (1) on 'tty2' FOR `estagiario2', Authentication failure
    Jul 17 10:22:01 ctadebian CRON[5426]: (pam_unix) session opened for user root by (uid=0)
    Jul 17 10:22:01 ctadebian CRON[5426]: (pam_unix) session closed for user root

    Ubuntu 8.10 prometeu-laptop tty2
    prometeu-laptop login: estagiario2
    Password: ******

    [email protected] :~ $

    Essa configuração pode ser utilizada para qualquer serviço com suporte ao uso do PAM: login, Squid, sudo, su, Apache2 etc, devendo ser ajustado o módulo libpam-* que corresponda ao serviço que desejarmos autenticar através da base MySQL.

    Abraços a todos.


    Todos os artigos por mim postados, estão hosp na própria Internet,Qualquer arquivo protegido deve permanecer,no máximo, 24 horas em seu computador. - Eles podem ser baixados apenas para teste, devendo o usuário apaga-lo ou comprá-lo apos 24 horas. - A Aquisição desses arquivos pela internet é de única e exclusiva responsabilidade do usuário.

Tópicos Similares

  1. Perda de alguns dados na base de dados!
    Por maar3amt no fórum Comunicados Administração
    Respostas: 13
    Último Post: 30-11-2009, 22:22
  2. Conectar com a base de dados mysql (php)
    Por maar3amt no fórum Programação Web
    Respostas: 0
    Último Post: 06-11-2009, 03:16
  3. Facebook quer vender dados de usuários para empresas
    Por Matapitosboss no fórum Internet
    Respostas: 0
    Último Post: 02-02-2009, 23:05
  4. Falha de segurança no iPhone expõe dados dos usuários
    Por Matapitosboss no fórum Ipod/iPhone
    Respostas: 0
    Último Post: 28-08-2008, 21:03

Tags para este Tópico

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •  

Conectar

Conectar