sexta-feira, 30 de setembro de 2011

Entendendo e Configurando o PAM

por Vishal Srivistava, Associate Software Engineer, IBM

Conceitos básicos sobre o Pluggable Authentication Module e como configurá-lo e gravar um aplicativo de login

Resumo:  A API do Pluggable Authentication Module (PAM) expõe um conjunto de funções que os programadores de aplicativos usam para funções relacionadas à segurança, como autenticação do usuário, criptografia de dados, LDAP, etc. Neste artigo, você terá um guia básico para o modelo do PAM no Linux, aprenderá a configurar o PAM e a designar um aplicativo de login do PAM de amostra em 10 etapas bem fáceis.

Para usuários Linux, compartilhar arquivos certamente é uma tarefa trabalhosa. Por exemplo, exige demais ter que lembrar de várias senhas e redesignar os aplicativos de acesso do sistema (como login, su, password, ftp , etc.) é demorado. Somando a essa dificuldade está o processo de autenticação, em que um sistema identifica um usuário e fornece controle de acesso ideal para esse usuário.

Um histórico do uso do PAM

O PAM é uma API que cuida da autenticação de um usuário para um serviço. Antes do PAM, aplicativos como login (e rlogin, telnet, rsh) procuravam pelo nome do usuário em /etc/passwd e depois comparavam os dois e autenticavam o nome digitado pelo usuário. Todos os aplicativos usavam esses serviços compartilhados, embora os detalhes da implementação e a autoridade para configurá-los não fossem compartilhados.

Em seguida, os desenvolvedores do aplicativo tentavam codificar seus próprios processos. Com isso veio a necessidade de separar o aplicativo e o módulo de segurança (um módulo de segurança comum pode ser compartilhado por aplicativos e ser configurado conforme necessário).

O mecanismo PAM integra vários esquemas de autenticação de nível inferior em uma API de nível superior que permite que os programas que dependem da autenticação sejam gravados independentemente do esquema de autenticação subjacente. O principal recurso do PAM e a configuração dinâmica da autenticação através de um arquivo /etc/pam.d ou /etc/pam.conf.

O PAM pode ser configurado para impedir que determinados programas autentiquem os usuários e para avisar quando determinados programas tentam fazer a autenticação. Os programas do PAM usam os módulos do PAM (módulos de autenticação): Eles são anexados aos aplicativos no tempo de execução para funcionar.

A Figura 1 mostra o fluxo básico do modelo do PAM.

figure1

Quais sistemas operacionais suportam o PAM?

O PAM foi desenvolvido primeiramente pela Sun Microsystems em 1995 e é suportado pelas seguintes versões de sistemas operacionais (e superior):

  • RedHat 5.0
  • SUSE 6.2
  • Debian 2.2
  • Mandrake 5.2
  • Caldera 1.3
  • TurboLinux 3.6

O PAM também é suportado por versões recentes do Solaris™, AIX®, HP-UX e Mac OS® X. Mais tarde, ele foi padronizado como parte do processo de padronização X/Open UNIX® (na arquitetura X/Open single sign-on service (XSSO)).

Que tipo de PAM posso obter?

Embora eles não sejam estritamente classificadas, podemos dizer que há três tipos de PAM:

  1. Linux-PAM: O Linux-PAM abrange todo o PAM discutido neste artigo. A arquitetura principal do PAM em qualquer plataforma Unix é semelhante à versão PAM do Linux.
  2. OpenPAM: O OpenPAM é outra implementação do PAM desenvolvida pelos laboratórios Dag-Erling Smorgrav em NAI como parte do programa de pesquisa DARPA-CHATS. Por ser um software livre, ele é usado principalmente pelo FreeBSD, NetBSD e por aplicativos (além do Mac OS X).
  3. Java™ PAM ou JPam: O PAM é basicamente um módulo de autenticação padrão que suporta Linux e UNIX. O JPam atua como uma ponte entre a parte Java e o PAM comum. Ele permite o uso dos módulos ou recursos do PAM (como auth, account, passwd, session , etc.) pelos aplicativos baseados em Java. Ele fornece o JAAS e APIs diretas e suporte para a maioria dos sistemas operacionais e arquiteturas do Unix.

Embora esses sejam PAMs diferentes, a funcionalidade principal permanece a mesma.

Como são os módulos do PAM?

A instalação do PAM é um processo etapa por etapa. Consulte Recursos para obter instruções de instalação.

Os módulos do PAM são classificados por tipo de módulo. Qualquer módulo fornecido deve implementar pelo menos uma das quatro funções de tipo de módulo:

  1. O módulo de autenticação é usado para autenticar usuários ou configurar/cancelar credenciais.
  2. Os módulos de gerenciamento de conta executam ações relacionadas ao acesso, à expiração de conta e de credencial, restrições/regras de senha, etc.
  3. O módulo de gerenciamento de sessão é usado para inicializar e terminar sessões.
  4. O módulo de gerenciamento de senha executa ações relacionadas à alteração/atualização de senha.

O PAM fornece recursos funcionais diferentes, como autenticação de conexão única, controle de acesso, etc. A implementação de cada um é manipulada por módulos diferentes. A seguir há alguns dos principais módulos:

  • pam_access fornece o controle de acesso de login log-daemon-style usando nome de login/domínio, dependendo das regras predefinidas no arquivo /etc/security/access.conf.
  • pam_cracklib verifica as senhas em relação às regras de senha.
  • pam_env sets/unsets verifica as variáveis de ambiente a partir de /etc/security/pam_env_conf.
  • pam_debug depura o PAM.
  • pam_deny bloqueia os módulos do PAM.
  • pam_echo imprime as mensagens.
  • pam_exec executa um comando externo.
  • pam_ftp é o módulo para acesso anônimo.
  • pam_localuser requer que o usuário seja listado em /etc/passwd.
  • pam_unix fornece autenticação de senha tradicional de /etc/passwd.

Há vários outros módulos (pam_userdb, pam_warn, pam_xauth), que usam um conjunto de valores que eles retornam. (Os detalhes desses módulos podem ser obtidos no guia de administração do PAM em Recursos.)

Configurando o PAM

A configuração do PAM é geralmente implementada no arquivo de configuração que reside em /etc/pam.d ou /etc/pam.conf (para versões antigas).

A Estrutura do Arquivo de Configuração

Para cada serviço que usa o PAM, há um arquivo correspondente no diretório, que contém as regras ou as instruções sobre como as informações de autenticação e de conta devem ser obtidas para esse serviço. Geralmente há uma regra por linha.

Os campos nos arquivos de configuração do PAM incluem:

  • Service_name Especifica o nome do serviço/aplicativo. (O padrão é OTHER.)
  • Module_type especifica o tipo de módulo (auth/account/session/passwd) para o serviço correspondente no campo Service_name.
  • Control_flag especifica o comportamento de pilha do módulo. Os seguintes valores podem ser usados: requisito, necessário, suficiente e opcional.
  • Module_path especifica o nome do caminho para o objeto de biblioteca que implementa o módulo. Ele é configurado para /lib/security por padrão.
  • Module_options/module_args (campos opcionais) especificam as opções ou os argumentos que podem ser passados para os módulos de serviços.

Os módulos são chamados na ordem em que eles são listados no arquivo de configuração, dependendo do que o Control_flag para cada entrada permite. Os valores de control_flag incluem:

  • Requisite: Todos os módulos necessários em uma pilha devem ser aceitos como um resultado com êxito. Se um ou mais dos módulos necessários falharem, todos os módulos necessários na pilha serão implementados, mas o primeiro erro será retornado.
  • Sufficient: Se um módulo sinalizado como suficiente obtiver êxito e nenhum módulo anterior ou suficiente falhar, todos os módulos restantes na pilha serão ignorados e o êxito será retornado.
  • Optional: Se nenhum dos módulos na pilha for necessário e nenhum módulo suficiente obtiver êxito, pelo menos um módulo opcional do serviço/aplicativo precisa obter êxito.

Exemplos de Arquivos de Configuração do PAM

A Tabela 1 mostra alguns exemplos de arquivos de configuração do PAM em vários sistemas operacionais.

Sistema Encontrado em … Tipo Controle (Flag) Módulo
Red Hat /etc/pam.d auth requerid

/lib/security/pam_unix.so

Red Hat /etc/pam.d account sufficient /lib/security/pam_unix.so
Red Hat /etc/pam.d session required /lib/security/pam_limit.so
AIX /etc/pam.conf auth requerid /usr/lib/security/pam_aix
AIX /etc/pam.conf account required /usr/lib/security/pam_aix
AIX /etc/pam.conf password required /usr/lib/security/pam_aix
zSUSE 64-bit | 32-bit /etc/pam.conf auth required /lib64/security/pam_unix.so | /lib/security/pam_unix.so
zSUSE 64-bit | 32-bit /etc/pam.conf account required /lib64/security/pam_unix.so | /lib/security/pam_unix.so
zSUSE 64-bit | 32-bit /etc/pam.conf session required /lib64/security/pam_unix.so | /lib/security/pam_unix.so
Solaris /etc/pam.conf auth required /usr/lib/security/pam_unix.so.1
Solaris /etc/pam.conf account required /usr/lib/security/pam_unix.so.1
Solaris /etc/pam.conf password required /usr/lib/security/pam_unix.so.1
HP-UX

/etc/pam.conf

auth required libpam_unix.so.1
HP-UX

/etc/pam.conf

account required libpam_unix.so.1
HP-UX

/etc/pam.conf

password required libpam_unix.so.1

 

O "Outro" Arquivo do PAM

O arquivo de configuração padrão do PAM /etc/pam.d é usado por todos os outros serviços que não são explicitamente configurados e talvez seja o arquivo padrão mais simples e robusto do qual o PAM depende. O conteúdo é semelhante ao seguinte:

/etc/pam.d/other File

auth required pam_warn.so
auth required pam_deny.so
account required pam_warn.so
account required pam_deny.so
password required pam_warn.so
password required pam_deny.so
session required pam_warn.so
session required pam_deny.so


O arquivo é muito simples. Para todos os tipos de módulo, Control_flag é o mesmo: required. Dois módulos são chamados: 



  1. Primeiro, pam_warn.so é chamado para registrar informações sobre a tentativa em progresso.


  2. Em seguida, pam_deny.so é chamado apenas para retornar uma falha e impedir que qualquer tipo de conexão ou de autenticação seja executado.



Portanto, qualquer serviço que use o PAM deve ser configurado explicitamente para permitir a autenticação, caso contrário, as tentativas falharão.



Dez etapas para designar um Aplicativo de Login Simples do PAM



Essas 10 etapas ajudam a implementar seu próprio aplicativo PAM e a entender as funções de uma sessão do PAM:




  1. Inclua os arquivos de cabeçalho para a implementação PAM (por exemplo, pam_appl.h, pam_misc.h).


  2. Na função main , inicialize a biblioteca do PAM libpam.so (que carrega os módulos especificados no arquivo de configuração para o aplicativo) usando um manipulador exclusivo.


  3. Tente autenticação para todos os módulos e manipule os cenários de falha.


  4. Verifique os detalhes de credencial e de conta do usuário.


  5. Abra uma nova sessão do PAM.


  6. Configure o ambiente para o usuário usando as credencias.


  7. Quando o usuário estiver concluído, remova a configuração do ambiente do usuário.


  8. Feche a sessão do PAM.


  9. Saia da biblioteca libpam.so com o valor do identificador.


  10. SAIR.



Conclusão



Depender do PAM para ajudar a lutar pelos esforços de autenticação de nível inferior em um todo mais gerenciável é uma maneira de simplificar esse mecanismo de segurança. Neste artigo, você aprendeu:




  • A arquitetura básica do PAM


  • Como configurar os módulos do PAM


  • A descrição de um aplicativo de login do PAM como um guia para entender como eles funcionam.

Nenhum comentário:

Postar um comentário