16.2. A configuração PAM do sshd

Para demonstrar o funcionamento da teoria do PAM, considere a configuração PAM do sshd como um exemplo prático:

Exemplo 16.1. Configuração PAM do sshd


#%PAM-1.0 
auth     include        common-auth 
auth     required       pam_nologin.so 
account  include        common-account 
password include        common-password 
session  include        common-session 
# Habilitar a seguinte linha para obter suporte de resmgr para 
# sessões ssh (consulte /usr/share/doc/packages/resmgr/README.SuSE) 
#session  optional      pam_resmgr.so fake_ttyname 

A configuração PAM típica de um aplicativo (sshd, nesse caso) contém quatro instruções include (incluir) referentes aos arquivos de configuração de quatro tipos de módulo: common-auth, common-account, common-password e common-session. Esses quatro arquivos abrigam a configuração padrão de cada tipo de módulo. Ao incluí-los em vez de chamar cada módulo separadamente para cada aplicativo do PAM, será possível obter automaticamente uma configuração PAM atualizada se o administrador mudar os padrões. Antigamente, era necessário fazer o ajuste manual de todos os arquivos de configuração para todos os aplicativos quando ocorriam mudanças no PAM ou quando um novo aplicativo era instalado. Agora, a configuração PAM é feita com arquivos de configuração centrais e todas as mudanças são automaticamente herdadas pela configuração PAM de cada serviço.

O primeiro arquivo incluído (common-auth) chama dois módulos do tipo auth (autenticação): pam_env e pam_unix2. Consulte o Exemplo 16.2, “Configuração padrão da seção auth (autenticação)”.

Exemplo 16.2. Configuração padrão da seção auth (autenticação)


auth    required        pam_env.so
auth    required        pam_unix2.so

O primeiro, pam_env, carrega o arquivo /etc/security/pam_env.conf para definir as variáveis de ambiente conforme especificado nesse arquivo. Esse módulo pode ser usado para definir o valor correto da variável DISPLAY, pois o módulo pam_env tem conhecimento do local de onde o login está sendo feito. O segundo, pam_unix2, compara o login e a senha do usuário a /etc/passwd e /etc/shadow.

Depois da chamada com êxito dos módulos especificados em common-auth, um terceiro módulo chamado pam_nologin verifica se o arquivo /etc/nologin existe. Em caso afirmativo, somente o usuário root poderá efetuar o login. A pilha inteira de módulos auth (autenticação) é processada antes que o sshd receba qualquer retorno sobre o êxito do login. Tendo em vista que todos os módulos da pilha apresentam o flag de controle required (obrigatório), todos precisam ser processados com êxito antes que o sshd receba uma mensagem sobre o resultado positivo. Se algum dos módulos falhar, a pilha de módulos inteira ainda será processada e somente aí é que o sshd será notificado sobre o resultado negativo.

Logo após o processamento com êxito de todos os módulos do tipo auth (autenticação), outra instrução include (incluir) é processada. Nesse caso, a que está no Exemplo 16.3, “Configuração padrão da seção account (conta)”. O common-account contém apenas um módulo, o pam_unix2. Se o pam_unix2 retornar o resultado de que o usuário existe, o sshd receberá uma mensagem de êxito e a próxima pilha de módulos (password - senha) será processada, conforme mostrado no Exemplo 16.4, “Configuração padrão da seção password (senha)”.

Exemplo 16.3. Configuração padrão da seção account (conta)


account required        pam_unix2.so

Exemplo 16.4. Configuração padrão da seção password (senha)


password required       pam_pwcheck.so  nullok
password required       pam_unix2.so    nullok use_first_pass use_authtok
#password required      pam_make.so     /var/yp

Mais uma vez, a configuração PAM do sshd envolve apenas uma instrução include (incluir) referente à configuração padrão dos módulos password (senha) localizados em common-password. Esses módulos precisam ser concluídos com êxito (flag de controle required - obrigatório) sempre que o aplicativo solicita a mudança de um token de autenticação. A mudança de uma senha ou de outro token de autenticação requer uma verificação de segurança. Essa ação é possibilitada pelo módulo pam_pwcheck. O módulo pam_unix2 usado posteriormente vem com quaisquer senhas antigas e novas do módulo pam_pwcheck, de modo que o usuário não precise autenticar novamente. Isso também torna impossível driblar as verificações realizadas pelo pam_pwcheck. Os módulos do tipo password (senha) devem ser usados sempre que os módulos precedentes do tipo account (conta) ou auth (autenticação) são configurados para fazer uma queixa sobre uma senha vencida.

Exemplo 16.5. Configuração padrão da seção session (sessão)


session required        pam_limits.so
session required        pam_unix2.so

Na etapa final, os módulos do tipo session (sessão), integrados no arquivo common-session, são chamados para configurar a sessão de acordo com as configurações do usuário em questão. Embora o pam_unix2 seja processado novamente, não há conseqüências práticas devido à opção none (nenhum) especificada no respectivo arquivo de configuração desse módulo, o pam_unix2.conf. O módulo pam_limits carrega o arquivo /etc/security/limits.conf, que pode definir limites sobre o uso de certos recursos do sistema. Os módulos session (sessão) são chamados uma segunda vez quando o usuário efetua logout.