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