Entendendo e Configurando o PAM

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

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.

Vishal Srivistava, Associate Software Engineer, IBM

Vishal Srivistava trabalhou com vários tipos de sistemas UNIX e Linux no nível de núcleo. Desde junho de 2007, Srivistava esteve nos Laboratórios de Software da IBM Índia e atualmente faz parte da equipe responsável pelo desenvolvimento do mecanismo de núcleo do IBM IIS. Com esse cargo ele ganhou muita experiência na configuração do aplicativo da equipe para usar o PAM em várias plataformas UNIX.



10/Mar/2009

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.

Figura 1. A biblioteca do PAM analisa o arquivo de configuração e carrega os módulos nele
Diagrama de fluxo mostrando como o PAM manipula o arquivo de configuração

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:

  • Necessário: 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.
  • Suficiente: 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.
  • Opcional: 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.

Tabela 1. Um mundo de arquivos de configuração do PAM
SystemFound in ...TypeControl_flagModule
Red Hat/etc/pam.dauthrequired/lib/security/pam_unix.so
Red Hat/etc/pam.daccountsufficient/lib/security/pam_unix.so
Red Hat/etc/pam.dsessionrequired/lib/security/pam_limit.so
AIX/etc/pam.confauthrequired/usr/lib/security/pam_aix
AIX/etc/pam.confaccountrequired/usr/lib/security/pam_aix
AIX/etc/pam.confpasswordrequired/usr/lib/security/pam_aix
zSUSE 64-bit | 32-bit/etc/pam.confauthrequired/lib64/security/pam_unix.so | /lib/security/pam_unix.so
zSUSE 64-bit | 32-bit/etc/pam.confaccountrequired/lib64/security/pam_unix.so | /lib/security/pam_unix.so
zSUSE 64-bit | 32-bit/etc/pam.confsessionrequired/lib64/security/pam_unix.so | /lib/security/pam_unix.so
Solaris/etc/pam.confauthrequired/usr/lib/security/pam_unix.so.1
Solaris/etc/pam.confaccountrequired/usr/lib/security/pam_unix.so.1
Solaris/etc/pam.confpasswordrequired/usr/lib/security/pam_unix.so.1
HP-UX/etc/pam.confauthrequiredlibpam_unix.so.1
HP-UX/etc/pam.confaccountrequiredlibpam_unix.so.1
HP-UX/etc/pam.confpasswordrequiredlibpam_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.

Agora, é possível acessar os tópicos mais avançados usando os módulos do PAM—começando com os Recursos a seguir.

Recursos

Aprender

Obter produtos e tecnologias

  • Com o Software de teste da IBM, disponível para download diretamente a partir do developerWorks, construa seu próximo projeto de desenvolvimento no Linux.

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=395346
ArticleTitle=Entendendo e Configurando o PAM
publish-date=03102009