Vamos analisar a seção de autenticação da sua configuração do PAM em detalhes.
auth sufficient pam_unix.so nullok try_first_pass
A primeira linha diz: "Se esse teste for bem-sucedido, pare de verificar mais e aceite o login; se ele falhar, continue verificando. Verifique os usuários / senhas configurados em /etc/passwd
e /etc/shadow
.Se o usuário existir e o campo de senha está em branco, o usuário pode entrar. " Esta é a verificação de autenticação para contas de usuários locais.
auth requisite pam_succeed_if.so uid >= 500 quiet
A segunda linha diz: "Se este teste falhar, pare de checar mais e rejeite o login; se for bem-sucedido, continue verificando. O valor de UID do usuário deve ser 500 ou maior." Isso impede logins para contas do sistema usando senhas no AD ou outro banco de dados de usuários compartilhados.
auth sufficient pam_sss.so use_first_pass
A terceira linha diz: "Se este teste for bem sucedido, pare de verificar mais e aceite o login; se falhar, continue verificando. Verifique com o SSSD." Esta é a verificação de contas do AD.
auth required pam_env.so
A quarta linha diz: "Se esta linha falhar, rejeite o login, mas continue verificando até o final desta seção. Defina as variáveis de ambiente descritas em /etc/security/pam_env.conf
e / ou /etc/environment
."
Agora pense no que acontecerá se o usuário existir (no AD ou no local /etc/passwd
), mas as verificações de senha falharão. Primeiro, pam_unix.so
falha; mas isso não pode causar uma rejeição porque isso impediria o uso de qualquer conta de usuário baseada em AD.
Então o processo segue para a segunda linha. Se o usuário tiver um mapeamento de UID válido e o número de UID for 500 ou maior, isso também será bem-sucedido. As únicas maneiras de falhar seriam se o UID fosse menor que 500.
A terceira linha faz a verificação AD; isso também falha. Mas, novamente, "suficiente" é usado para permitir a configuração de qualquer outro método de autenticação após este, então o processo continua, assim como acontece com pam_unix.so
.
Neste ponto, a quarta linha deve ser executada com sucesso para permitir que o usuário entre. Mas isso é apenas definir variáveis de ambiente. man pam_env
informa que o módulo pam_env.so
retornará um valor PAM_SUCCESS se as variáveis de ambiente forem configuradas com sucesso. Mas como este é o último módulo PAM nesta pilha, e nenhum dos outros módulos terá rejeitado até agora, o resultado deste módulo se tornará o resultado geral da fase de autenticação.
Para corrigir isso, a fase de autenticação precisa de pam_deny.so
no final, para interromper qualquer tentativa de login sempre que todos os mecanismos de autenticação reais não aceitarem o usuário.
Além disso, o pam_env.so
provavelmente deve acontecer mais cedo no processo, para que a inicialização da variável de ambiente ocorra da mesma maneira para todos os usuários válidos. Se isso não funcionar no início da fase auth
, o pam_env.so
provavelmente deve ir para a fase session
; man pam_env
diz que funcionará em auth
ou session
fases.
Então, minha sugestão inicial seria alterar a seção auth
da sua configuração do PAM para esta:
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_sss.so use_first_pass
auth requisite pam_deny.so
Então, a funcionalidade seria:
- Definir variáveis de ambiente para o usuário. Se isso falhar, algo está seriamente errado de qualquer maneira.
- Verifique a senha local; Se for bem sucedido, aceite o login e termine esta fase.
- Rejeite usuários com UID abaixo de 500 neste momento (= nenhum login de conta raiz ou do sistema com uma conta do AD!)
- Verifique a senha no AD; Se for bem sucedido, aceite o login e termine esta fase.
- Se chegarmos a este ponto, nenhum dos mecanismos de autenticação reais aceitaram a senha, portanto, rejeite a tentativa de login incondicionalmente.
Se acontecer que pam_env.so
cause problemas quando colocado no início da fase auth
, você pode tentar apenas comentá-lo; parece que anteriormente ele foi ignorado em logins válidos.
Como sempre, ao alterar as configurações do PAM, primeiro abra uma sessão no sistema e certifique-se de que ele tenha sudo
'd para root ou que tenha privilégios completos de root disponíveis: faça backup da configuração atual. Faça a alteração mas não efetue logout para testá-la: em vez disso, teste-a abrindo outra sessão. Se falhar, você ainda terá a sessão original conectada, para que possa restaurar facilmente a configuração antiga, se necessário. Se este for um sistema de produção ou outro crítico, abra duas sessões raiz antes de fazer a alteração, apenas para proteger contra erros do tipo dedos-sendo-mais-que-o-cérebro.