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.
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
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)).
Embora eles não sejam estritamente classificadas, podemos dizer que há três tipos de PAM:
- 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.
- 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).
- 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.
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:
- O módulo de autenticação é usado para autenticar usuários ou configurar/cancelar credenciais.
- 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.
- O módulo de gerenciamento de sessão é usado para inicializar e terminar sessões.
- 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_accessfornece 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_cracklibverifica as senhas em relação às regras de senha.pam_env sets/unsetsverifica as variáveis de ambiente a partir de /etc/security/pam_env_conf.pam_debugdepura o PAM.pam_denybloqueia os módulos do PAM.pam_echoimprime as mensagens.pam_execexecuta um comando externo.pam_ftpé o módulo para acesso anônimo.pam_localuserrequer que o usuário seja listado em /etc/passwd.pam_unixfornece 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.)
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_nameEspecifica o nome do serviço/aplicativo. (O padrão é OTHER.)Module_typeespecifica o tipo de módulo (auth/account/session/passwd) para o serviço correspondente no campoService_name.Control_flagespecifica o comportamento de pilha do módulo. Os seguintes valores podem ser usados:requisito,necessário,suficienteeopcional.Module_pathespecifica o nome do caminho para o objeto de biblioteca que implementa o módulo. Ele é configurado para/lib/securitypor 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
| System | Found in ... | Type | Control_flag | Module |
|---|---|---|---|---|
| Red Hat | /etc/pam.d | auth | required | /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 | required | /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 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:
- Primeiro,
pam_warn.soé chamado para registrar informações sobre a tentativa em progresso. - 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:
- Inclua os arquivos de cabeçalho para a implementação PAM (por exemplo, pam_appl.h, pam_misc.h).
- 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. - Tente autenticação para todos os módulos e manipule os cenários de falha.
- Verifique os detalhes de credencial e de conta do usuário.
- Abra uma nova sessão do PAM.
- Configure o ambiente para o usuário usando as credencias.
- Quando o usuário estiver concluído, remova a configuração do ambiente do usuário.
- Feche a sessão do PAM.
- Saia da biblioteca libpam.so com o valor do identificador.
- SAIR.
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.
Aprender
- Os
Guias do PAM do Linux
fornecem documentação sobre os problemas de administração dos sistemas, gravação de módulo e
desenvolvimento do aplicativo.
- A seguir há a visualização do PAM a partir do
FAQ Não Oficial do SUSE Linux.
- E se você precisar de upgrade, o Gentoo possui um
Guia de Upgrade do PAM Linux.
- Consulte o
Modelo de Arquitetura do X/Open Single Sign-on Service (XSSO).
- Pronto para obter mais tópicos avançados sobre o uso do
PAM?
- "Uma comparação dos subsistemas de segurança no AIX, Linux e Solaris" (developerWorks, outubro de 2005): Como cada PAM funciona.
- "Aplicando Espaços de Nomes de Montagem" (developerWorks, setembro de 2007): Visualize parte relevante de um módulo do PAM.
- "Centralizar contas do usuário com o OpenLDAP" (developerWorks, maio de 2006): Saiba como o PAM no Linux coopera com o LDAP.
- "Melhorar a segurança com a poli-instanciação" (developerWorks, fevereiro de 2008): Usando um Pluggable Authentication Module para proteger os dados privados.
- "LPI exam 202 prep, Topic 210: Gerenciamento de cliente de rede" (developerWorks, maior de 2006): Configurar o PAM para suportar a autenticação.
- "Configuração do PAM no SUSE Enterprise Linux 9" (Nota técnica (IBM Tivoli Netcool/OMNIbus), outubro de 2008): Como configurar o módulo PAM para autenticação ObjectServer com os usuários de sistema local.
- Na classe Zona Linux do developerWorks, localize mais recursos para desenvolvedores de Linux (incluindo desenvolvedores que são
novos para Linux) e verifique nossos
artigos e tutorias mais populares
.
-
Consulte todas as
dicas para o Linux e
tutoriais de Linux no developerWorks.
-
Fique atualizado com
Eventos Técnicos e Webcasts do developerWorks.
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
-
Envolva-se com a
comunidade do developerWorks
através de blogs, fóruns, podcasts e espaços.
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.