Aula #36 - Pluggable Authentication Modules (PAM)



O Pluggable Authentication Modules fornece um mecanismo uniforme para garantir que os usuários e aplicativos possam se identificar e se autenticar corretamente no sistema.
Regras condicionais podem ser aplicadas para limitar privilégios e é possível controlar o que fazer no caso de sucesso ou falha da autenticação. 
O PAM pode também trabalhar com LDAP para centralizar a autenticação através da rede.




Historicamente, a autenticação de usuários era feita individualmente por cada aplicativo; ou seja, su, login, e ssh usavam meios próprios para autenticar.

A maioria dos aplicativos e serviços para GNU/Linux modernos foram escritos ou reescritos para explorar o PAM (Pluggable Authentication Modules, ou módulos plugáveis de autenticação) para que a autenticação fosse feita de uma maneira uniforme, usando o libpam.

Esta biblioteca de módulos fornece uma enorme flexibilidade e consistência em relação a autenticação, gestão de senha, de sessões, e serviços de conta. 

O PAM incorpora os seguintes componentes:


  •     Aplicativos que usam o PAM.
  •     Arquivos de configuração em /etc/pam.d/.
  •     Módulos do PAM nas bibliotecas libpam *, encontrados na pasta /lib/security ou /lib64/security ou /lib/x86_64-linux-gnu dependendo da distribuição


Cada aplicativo ou serviço que usa o PAM, pode ter a parte de autenticação configurada por um arquivo de configuração individual na pasta /etc/pam.d.


Vários passos estão envolvidos na autenticação:


  •     Um usuário chama uma aplicação conectada ao PAM, como login, ssh, ou su.
  •     O aplicativo chama a libpam.
  •     A biblioteca checa arquivos em /etc/pam.d; estes módulos determinam quais módulos o PAM vai chamar incluíndo o system-auth.


    Cada módulo referenciado é executado de acordo com as regras do arquivo de configuração relevante para essa aplicação. 


Cada arquivo na pasta /etc/pam.d corresponde a um serviço e cada linha (não comentada) no arquivo determina uma regra. A regra é formada por uma lista de tokens separados por espaço, os dois primeiros não são diferenciam maiúsculas de minúsculas.

type control module-path module-arguments

Como um exemplo, o conteúdo do arquivo /etc/pam.d/su em um sistema RHEL 7 :

#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth required pam_wheel.so use_uid
auth substack system-auth
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session include postlogin
session optional pam_xauth.so


Observe que o su solicita a carga do system-auth.


O módulo type especifica o management group (grupo de gestão) com o qual o módulo deve se associar:

    auth:  Instrui o aplicativo a pedir identificação (conta, senha, etc.) ao usuário.  Pode criar credenciais e configurar privilégios.
    account:  Verifica aspectos da conta do usuário como envelhecimento da senha, controle de acesso, etc.
    password:  Responsável por atualizar o token de autenticação do usuário, o que na maioria dos casos é a senha.
    session:  Usado para prover serviços antes e depois que uma sessão é estabelecida (configurar o ambiente, registro de log, etc.).

A flag control controla como o sucesso ou a falha de um módulo afeta o processo de autenticação de forma geral:

    required:  Deve rodar com sucesso para que o serviço seja concedido. Caso seja parte de uma pilha, todos os outros módulos ainda serão executados. A aplicação não é informada qual módulo falhou.
    requisite:  O mesmo que required, com a diferença que a falha em qualquer módulo encerra a pilha e o erro é informado para a aplicação.
    optional:  O módulo não é obrigatório.  
    sufficient:  Se este módulo executar com sucesso, nenhum outro módulo subsequente será executado. Se ele falhar, não necessariamente ele irá causar problemas, e a pilha só vai falhar se ele for o único módulo na pilha.

Existem outras flags de controle ou control flags como include e substack.  Veja man pam.d para detalhes.

module-path aponta para o módulo na pasta /lib*/security, o caminho pode ser relativo ou absoluto.

module-arguments pode ser usado para modificar o comportamento do módulo PAM .





LDAP


O LDAP (Lightweight Directory Access Protocol, ou protocolo leve de acesso a diretórios) é um protocolo padrão para a utilização e administração de serviços de diretório distribuídos (para informações como usuários e permissões) através da rede, e é um protocolo aberto e independente.

Ao usar o LDAP para autenticação centralizada, cada sistema (ou cliente) se conecta a um servidor LDAP central para autenticação. 

Usar TLS torna a conexão segura e é recomendado.

O LDAP usa o PAM e o system-config-authentication ou authconfig-tui. 

É necessário especificar o servidor, base de busca, DN (nome do domínio) e TLS (Transport Layer Security, ou segurança da camada de transporte). 

Também são necessários: openldap-clients, pam  ldap e nss-pam-ldapd.

Quando você configurar um sistema para usar autenticação LDAP, cinco arquivos são alterados:

/etc/openldap/ldap.conf

/etc/pam_ldap.conf

/etc/nslcd.conf

/etc/sssd/sssd.conf

/etc/nsswitch.conf

Você pode editar estes arquivos manualmente ou usar uma ferramentas automáticas (system-config-authentication ou authconfig-tui).

Mais vistos no mês:

As melhores distribuições Linux para 2017

TuxMath - Tux, do Comando da Matemática. Ensino e diversão a crianças.

Teste de Performance de Rede com Iperf

DHCP - Guia Completo

Aula #14 - Os sistemas de arquivos ext2/ext3/ext4

OPNsense - Firewall Open Source

SSD no linux

Ophcrack: Descubra todas as senhas do Windows

Oracle Linux 7.0 Server com Xfce - Instalação e configurações iniciais