Uma introdução ao Linux-PAM

O Linux-PAM (Pluggable Authentication Modules for Linux) é uma suíte de bibliotecas distribuídas que viabilizam ao administrador do sistema especificar a forma que as aplicações autenticam os seus usuários. Basicamente, é um mecanismo bastante flexível para autenticação de usuários.

[ Hits: 70.165 ]

Por: João Lucas Pereira de Santana em 18/06/2010


Mãos à obra



Antes de iniciarmos a parte prática, alguns avisos são necessários:

NÃO realize testes de aprendizado sobre PAM em sua máquina de uso primário. Utilize uma máquina virtual ou alguma que não seja de uso necessário, pois, caso o PAM fique mal configurado, você terá muito trabalho para reverter a situação. Experiência própria rsrs :-)

SEMPRE mantenha uma conexão de root reservada. Dessa forma será possível alterar as configurações caso haja algum erro impossibilitando realizar autenticação.

Vamos criar um usuário para realizar os testes da nossa configuração:

# useradd placebo

Lembre-se de atribuir uma senha qualquer para o usuário placebo.

Como prática do nosso artigo, consideraremos a utilização do diretório /etc/pam.d/, do arquivo /etc/pam.d/system-auth e outros arquivos de configuração utilizados pelos módulos descritos no /etc/pam.d/system-auth.

O objetivo deste arquivo é fornecer uma configuração comum para diversos serviços e daemons que utilizam o PAM. Normalmente, outros arquivos do PAM incluem o conteúdo do /etc/pam.d/system-auth.

O arquivo /etc/pam.d/system-auth terá o seguinte conteúdo:

auth       required      /lib/security/pam_env.so
auth       sufficient    /lib/security/pam_unix.so try_first_pass likeauth nullok
auth       required      /lib/security/pam_deny.so
auth       required      /lib/security/pam_tally.so deny=5 unlock_time=216000

account    required      /lib/security/pam_unix.so
account    required      /lib/security/pam_access.so
account    required      /lib/security/pam_tally.so deny=5 unlock_time=21600

password   required      /lib/security/pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 try_first_pass retry=3
password   sufficient    /lib/security/pam_unix.so try_first_pass use_authtok md5 shadow
password   required      /lib/security/pam_deny.so

session    required      /lib/security/pam_limits.so
session    required      /lib/security/pam_env.so
session    required      /lib/security/pam_unix.so

O módulo pam_cracklib, do tipo password, é responsável por fazer uma checagem mínima de segurança e tamanho da uma senha sendo trocada. Ele utiliza a biblioteca CrackLib, uma versão resumida do Crack, um programa para ataques de dicionários.

Ao usar essa biblioteca, o pam_cracklib dificulta a escolha de senhas baseadas em senhas de dicionários. O módulo pam_cracklib permite ainda que se defina o tamanho mínimo de uma senha e incentivar, por mecanismos de crédito, o uso de maiúsculas e minúsculas, bem como símbolos e números.

O argumento retry=3 especifica que serão realizadas 3 tentativas antes de retorna um erro.

O minlen=8 estipula o tamanho mínimo de 8 caracteres para a senha.

O difok=2 estipula o mínimo de caracteres diferentes da senha antiga para a nova.

O módulo pam_access é do tipo account e providencia controle de acesso ao login do usuário. É possível realizar o controle considerando os nomes de login, nomes de hosts ou domínios, endereços de internet ou rede, ou linhas de terminais. Por padrão, o arquivo /etc/security/access.conf é utilizado para armazenar as regras de gerenciamento.

O código abaixo apresenta um exemplo auto-instrutivo de configuração do arquivo /etc/security/access.conf utilizado pelo pam_access.so. Os sinais '+' e '-' garantem e negam acesso, respectivamente.

Obs.: Os arquivos estão inteiramente comentados para que os testes sejam realizados por demanda. Desta forma, tem-se um melhor entendimento do que cada comando realiza e diminui a possibilidade de confusão no uso dos mesmos.

# início arquivo access.conf
# sintaxe é dada por "permissão : usuários : origens"
#
# não queremos ninguém acessando de hell.com ou spam.net
#- : ALL : .hell.com .spam.net
# não queremos login no terminal, exceto do usuário root
#- : ALL EXCEPT root : tty1
# negar acesso de root vindo da rede interna
#- : root: 192.168.
# placebo pode acessar da máquina london
#+ : placebo : london
# membros do grupo musicians podem acessar de qualquer local
#+ : musicians : ALL
# ninguém mais pode acessar
#- : ALL : ALL
# fim arquivo access.conf

IMPORTANTE: Observe que, com esta configuração, estamos impedindo do usuário root acessar a partir da rede interna. Logo, caso você esteja realizando as configurações da rede interna, NÃO FECHE A CONEXÃO, pois ela não poderá ser restabelecida pelo root. Para evitar possíveis problemas com o PAM, sempre mantenha uma conexão de root reservada. Dessa forma será possível alterar as configurações caso haja algum erro impossibilitando realizar autenticação.

O módulo pam_limits, do tipo session, é usado para limitar o uso de recursos da máquina. O módulo PAM configura um limite aos recursos do sistema que podem ser obtidos em uma seção de usuário. Por padrão, as informações necessárias ao módulo são carregadas a partir do arquivo /etc/security/limits.conf.

No arquivo de configuração limits.conf, o campo domain pode ser um usuário, nomes de grupos (indicados por @) ou coringas (*, %). O campo type é usado como grau de flexibilidade de limite de recursos. O item especifica qual recurso está sendo limitado, abrangendo número máximo de arquivos abertos (nofile), tempo máximo de uso da CPU (cpu), número máximo de processos (nproc), número máximo de logins (maxlogins), prioridade com a qual são executadas as aplicações (priority), dentre outros.

Um exemplo do arquivo de configuração /etc/security/limits.conf é listado abaixo:

# início arquivo limits.conf
# sintaxe é dada por: "domain type item value"
#
# limita uso da memória em 10Mb
#* hard rss 10000
# limita número de processos do usuário root
#placebo hard nproc 0
# limita o número de logins do grupo musicians
#@musicians soft maxlogins 4
# limita o tempo de uso da cpu para qualquer
# usuário em 8 horas (480 minutos)
#* hard cpu 480
# fim arquivo limits.conf

Outro módulo bem interessante é o pam_tally, do tipo auth e account. Ele mantém um contador de tentativas de acesso ao sistema. Pode ser reiniciado ao se obter sucesso na operação ou negar acesso se muitas tentativas falharem.

O argumento deny=5 bloqueia o acesso se o contador de tentativas atingir 5.

O unlock_time=21600 especifica que o acesso só será permitido novamente após 6 horas (21600 segundos). Por padrão, as informações de contadores de login ficam registradas no arquivo /var/log/faillog.

Outro módulo importante, que também deve ser adicionado ao /etc/pam.d/system-auth é o pam_deny. Este módulo nega o acesso ao usuário, sendo utilizado para garantir que o usuário não consiga autenticar-se em caso de falha nos módulos anteriores. Dessa maneira, ele imprime uma segurança extra no esquema de autenticação.

Além dos anteriores, o módulo pam_unix também deve ser adicionado ao system-auth. É o módulo padrão de autenticação Unix. Usualmente irá obter as informações dos arquivos /etc/passwd e /etc/shadow.

O parâmetro nullok é usado para sobrescrever o comportamento padrão de bloquear usuários com password em branco. O parâmetro try_firs_pass faz com que o módulo tente usar a senha usada anteriormente em algum outro módulo. use_authtok indica ao pam_unix para utilizar o password configurado pelos módulos do tipo password da pilha de módulos. O parâmetro md5 é o algoritmo usado para criptografia do password.

Para configurar adequadamente as variáveis de ambiente do usuário, deve ser adicionado o módulo pam_env.

As variáveis de ambiente devem ser configuradas no arquivo /etc/security/pam_env.conf.

O arquivo /etc/security/access.conf foi alterado conforme descrito anteriormente. Assim como os arquivos /etc/security/time.conf e /etc/security/limits.conf. Altere-os em sua máquina para que os testes funcionem perfeitamente.

Página anterior     Próxima página

Páginas do artigo
   1. Motivação
   2. Sintaxe dos arquivos de configuração
   3. Mãos à obra
   4. Realizando testes
Outros artigos deste autor

Implementação LDAP e Java

Leitura recomendada

Encriptando suas senhas de forma (mais) segura no Pidgin

Configurando o OpenVPN no SuSE Linux Enterprise Server (SLES)

Assinatura e criptografia de dados com GPG

Suporte TCP Wrapper - Serviços stand-alone no Debian 6

Gerenciar e configurar inetd e serviços relacionados

  
Comentários
[1] Comentário enviado por removido em 18/06/2010 - 15:10h

Muito bom este trabalho. Talvez retire um pouco do medo que os usuários do slackware tem do PAM. Que o diga o patrick volkerding, para quem estes módulos são o próprio cramunhão em pessoa!!!

[2] Comentário enviado por jucaetico em 23/06/2010 - 07:19h

Cara, muito bom artigo. Um ajuda pra galera que vai fazer a LPIC-2. Abraços

[3] Comentário enviado por dfsantos em 29/06/2010 - 12:25h

Parabéns amigo, artigo de primeira. Se puder, gostaria de ver uma abordagem mais profunda referente ao PAM em seus proximos artigos.

[4] Comentário enviado por eferro em 17/11/2014 - 09:30h

Parabéns predisposição em compartilhar conhecimento. Excelente artigo.

[5] Comentário enviado por rpfreitas em 28/11/2014 - 09:22h

Parabéns, ótimo tutorial simples e objetivo e fácil entendimento.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts