Capítulo 16. Autenticação com o PAM

Sumário

16.1. Estrutura de um arquivo de configuração PAM
16.2. A configuração PAM do sshd
16.3. Configuração de módulos PAM
16.4. Mais informações

Resumo

O Linux usa o PAM (Pluggable Authentication Modules) no processo de autenticação como uma camada mediadora entre o usuário e o aplicativo. Como os módulos PAM estão disponíveis em todo o sistema, eles podem ser solicitados por qualquer aplicativo. Este capítulo descreve o funcionamento e a configuração do mecanismo de autenticação modular.

Os programadores e administradores do sistema muitas vezes desejam restringir o acesso a certas partes do sistema ou limitar o uso de certas funções de um aplicativo. Sem o PAM, os aplicativos precisam ser adaptados toda vez que é introduzido um novo mecanismo de autenticação, como o LDAP ou o SAMBA. Entretanto, esse processo é bastante demorado e propenso a erros. Uma forma de evitar essas desvantagens é separar os aplicativos do mecanismo de autenticação e delegar a autenticação a módulos gerenciados centralmente. Sempre que um esquema de autenticação passa a ser necessário, basta adaptar ou gravar um módulo PAM adequado para ser usado pelo programa em questão.

Todo programa baseado no mecanismo PAM tem um arquivo de configuração próprio no diretório /etc/pam.d/programname. Esses arquivos definem os módulos PAM usados para a autenticação. Além disso, existem arquivos de configuração globais para a maioria dos módulos PAM em /etc/security, que definem o exato comportamento desses módulos (alguns exemplos são pam_env.conf, pam_pwcheck.conf, pam_unix2.conf e time.conf). Todo aplicativo que usa um módulo PAM na realidade chama um conjunto de funções do PAM que, em seguida, processa as informações nos diversos arquivos de configuração e apresenta o resultado ao aplicativo que chamou.


16.1. Estrutura de um arquivo de configuração PAM

Cada linha de um arquivo de configuração PAM contém, no máximo, quatro colunas:

<Tipo de módulo> <Flag de controle> <Caminho do módulo> <Opções>  
  

Os módulos PAM são processados como pilhas. Diferentes tipos de módulos servem a diferentes objetivos. Por exemplo, um módulo verifica a senha, outro verifica a localização de onde o sistema está sendo acessado e outro lê configurações específicas ao usuário. O PAM tem conhecimento sobre quatro tipos diferentes de módulos:

autenticação

O objetivo desse tipo de módulo é verificar a autenticidade do usuário. Essa verificação tradicionalmente é feita por meio de uma consulta a senha, mas também pode ser realizada com a ajuda de um cartão com chip ou de biometria (impressões digitais ou leitura da íris).

account (conta)

Os módulos desse tipo verificam se o usuário possui uma permissão geral para usar o serviço solicitado. A título de exemplo, essa verificação deve ser realizada para assegurar que ninguém seja capaz de efetuar o login com o nome de usuário de uma conta vencida.

password (senha)

O objetivo desse tipo de módulo é permitir a mudança de um token de autenticação. Na maioria dos casos, trata-se de uma senha.

session (sessão)

Os módulos desse tipo são responsáveis pelo gerenciamento e configuração de sessões de usuários. Eles são iniciados antes e depois da autenticação para registrar tentativas de login em registros do sistema e para configurar o ambiente específico do usuário (contas de e-mail, diretório pessoal, limites do sistema etc.).

A segunda coluna contém flags de controle para influenciar o comportamento dos módulos iniciados:

required (obrigatório)

Um módulo com esse flag precisa ser processado com êxito para que a autenticação possa prosseguir. Após a falha de um módulo com o flag required (obrigatório), todos os outros módulos com o mesmo flag serão processados antes que o usuário receba uma mensagem sobre a falha da tentativa de autenticação.

requisite (necessário)

Os módulos com esse flag também precisam ser processados com êxito, de modo bastante semelhante ao módulo com o flag required (obrigatório). Contudo, em caso de falha, um módulo com esse flag dá um retorno imediato ao usuário e os módulos restantes deixam de ser processados. Em caso de êxito, os outros módulos são processados, exatamente como qualquer módulo com o flag required (obrigatório). O flag requisite (necessário) pode ser usado como um filtro básico para verificar a existência de determinadas condições essenciais para a correta autenticação.

sufficient (suficiente)

Após o processamento com êxito de um módulo com esse flag, o aplicativo que chamou recebe imediatamente uma mensagem sobre o êxito e o processamento dos módulos é interrompido, exceto quando houver falhas anteriores em um módulo com o flag required (obrigatório). A falha de um módulo com o flag sufficient (suficiente) não traz conseqüências diretas, com os módulos subseqüentes sendo processados na sua respectiva ordem.

optional (opcional)

A falha ou êxito de um módulo com esse flag não traz conseqüências diretas. Isso pode ser útil no caso de módulos cujo único propósito é exibir uma mensagem (por exemplo, informar ao usuário sobre a chegada de e-mails) sem executar nenhuma ação adicional.

include (incluir)

Quando esse flag é dado, o arquivo especificado como argumento é inserido nesse lugar.

O caminho do módulo não precisa ser explicitado, contanto que o módulo fique localizado no diretório padrão /lib/security (para todas as plataformas de 64 bits suportadas pelo SUSE Linux, o diretório é /lib64/security). A quarta coluna pode conter uma opção para o módulo específico, como debug (permite a depuração) ou nullok (permite o uso de senhas vazias).