Acabei de vincular minha estação de trabalho Arch Linux ao Samba AD que configurei para nossa empresa. Eu testei e funcionou, ou assim eu pensei. Aceitou minha senha, criou meu homedir e tudo mais, e me conectou. O que esqueci de testar foi o que não aceitava. Acontece que, desde que o nome de usuário seja válido (AD ou local, não importa), ele aceitará qualquer senha. Alguém pode me indicar o que fiz de errado?
Estou usando SSSD para gerenciar a conexão AD. Aqui está o meu /etc/pam.d/system-auth
:
#%PAM-1.0
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 required pam_env.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_sss.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session optional pam_mkhomedir.so umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_sss.so
Vamos analisar detalhadamente a seção de autenticação da configuração do PAM.
A primeira linha diz: "Se este teste for bem-sucedido, pare de verificar e aceite o login; se falhar, continue verificando. Verifique se há usuários/senhas configurados em
/etc/passwd
e/etc/shadow
.Se o usuário existir e o campo de senha estiver em branco, o usuário será permitido em." Esta é a verificação de autenticação para contas de usuários locais.A segunda linha diz: "Se este teste falhar, pare de verificar e rejeite o login; se for bem-sucedido, continue verificando. O valor UID do usuário deve ser 500 ou maior." Isso evita logins em contas do sistema usando senhas no AD ou em outro banco de dados de usuário compartilhado.
A terceira linha diz: "Se este teste for bem-sucedido, pare de verificar e aceite o login; se falhar, continue verificando. Verifique com o SSSD." Esta é a verificação de contas do AD.
A quarta linha diz: "Se esta linha falhar, rejeite o login; mas continue verificando até o final desta seção em qualquer caso. Defina quaisquer 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 falharem. Primeiro,pam_unix.so
falha; mas isso não pode causar uma rejeição porque isso o impediria de usar qualquer conta de usuário baseada em AD.Assim, 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 isso falhar seriam se o UID fosse menor que 500.
A terceira linha faz a verificação de AD; isso também falha. Mas, novamente, "suficiente" é usado para permitir a configuração de quaisquer outros métodos de autenticação após este, para que o processo continue, assim como com
pam_unix.so
.Neste ponto, a quarta linha deve ser executada com sucesso para permitir a entrada do usuário. Mas isso é apenas configurar variáveis de ambiente.
man pam_env
me diz que opam_env.so
módulo retornará um valor PAM_SUCCESS se as variáveis de ambiente foram definidas com sucesso. Mas como este é o último módulo PAM nesta pilha, e nenhum dos outros módulos terá colocado uma rejeição absoluta 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 um
pam_deny.so
no final, para interromper qualquer tentativa de login sempre que todos os mecanismos de autenticação reais falharem em aceitar 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 daauth
fase,pam_env.so
provavelmente deve ir para asession
fase;man pam_env
diz que funcionará em umaauth
ou duassession
fases.Então, minha sugestão inicial seria mudar a
auth
seção da sua configuração do PAM para isso:Assim, a funcionalidade seria:
Se isso
pam_env.so
causar problemas quando colocado no início daauth
fase, você pode tentar apenas comentar; parece que anteriormente foi ignorado em todos os logins válidos.Como sempre, ao alterar as configurações do PAM, primeiro abra uma sessão no sistema e certifique-se de que ela seja
sudo
root ou tenha privilégios de root completos disponíveis: então faça backup da configuração atual. Faça a alteração , mas não faça 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 de outra forma crítico, abra duas sessões raiz antes de fazer a alteração, apenas para proteger contra erros de dedos sendo mais rápidos que o cérebro.