Os módulos PAM
podem fornecer um nível de flexibilidade que atingirá quase exatamente o que você deseja. Com base na sua resposta em um comentário, você ficará feliz em permitir que su
ofereça três tentativas antes de falhar. É isso que eu ofereço aqui.
Recomendo enfaticamente que você faça backup de todos os arquivos de configuração PAM
que você alterar e de que você já tenha um shell raiz aberto em algum lugar pronto para reverter alterações quebradas. Após qualquer alteração em PAM
, é muito importante testar se você ainda pode efetuar login e obter acesso root. Se você errar, pode lavar completamente o sistema.
Os arquivos PAM
vivem em /etc/pam.d
e você precisará de acesso root para alterá-los.
O arquivo su
no Debian 8 contém uma linha de autenticação e uma referência ao arquivo de inclusão common-auth
. Colocando-os juntos, conseguimos isso:
auth sufficient pam_rootok.so
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_cap.so
A parte interessante é a chamada para pam_unix.so
, que é autenticada no banco de dados de senhas ( /etc/passwd
e /etc/shadow
). O componente [success=N]
informa ao PAM
que, se o módulo retornar um status de sucesso, é para ignorar os próximos N módulos. Portanto, se você obtiver um retorno bem-sucedido de pam_unix.so
, a configuração ignorará o módulo de falha pam_deny.so
.
Podemos usar essa abordagem para criar mais duas tentativas de autenticação, como esta:
auth sufficient pam_rootok.so
auth [success=3 default=ignore] pam_unix.so nullok_secure
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_cap.so
Lá, trabalho feito.
Observe que, se você estiver executando o SAMBA ou algum outro esquema de autenticação externa, precisará ajustar um pouco as alterações. Em um dos meus sistemas, existe uma verificação adicional através de pam_winbind.so
. Isso também precisaria ser replicado, então você iria a partir disso:
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth requisite pam_deny.so
para isso:
auth [success=6 default=ignore] pam_unix.so nullok_secure
auth [success=5 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth [success=4 default=ignore] pam_unix.so nullok_secure
auth [success=3 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth requisite pam_deny.so