Adicionando um pouco de perspectiva histórica, a idéia de dormir após uma senha incorreta não é encontrada apenas em sistemas baseados em PAM. É muito antigo. Por exemplo, no 4.4BSD login fonte você encontrará este fragmento saboroso:
/* we allow 10 tries, but after 3 we start backing off */
if (++cnt > 3) {
if (cnt >= 10) {
badlogin(username);
sleepexit(1);
}
sleep((u_int)((cnt - 3) * 5));
}
para que as 3 primeiras falhas sejam gratuitas, as 7 seguintes tenham atrasos crescentes (5 segundos, 10 segundos, 15 segundos ...) e depois de 10 ele faz um sleepexit(1)
, que é um atraso de 5 segundos seguido por exit(1)
.
O sleepexit
após 10 falhas merece uma explicação especial. Depois que login
sair, getty
apenas imprime outro prompt de login e inicia o ciclo novamente. Então, por que dormir e sair em vez de apenas dormir? Porque quando esse recurso foi introduzido, o login por discagem era comum. (Nota para pessoas que nunca usaram um modem antes de 1995: eu disse login por discagem, não PPP ou outro protocolo baseado em pacotes por discagem. Você poderia discar um número em um emulador de terminal e obter um login prompt.)
No mundo da conexão discada, qualquer um poderia discar seu número e começar a emitir senhas nele, então o processo login
foi encerrado após algumas senhas ruins, fazendo com que a conexão do modem fosse encerrada, forçando-as a rediscar antes de tentar mais senhas. O mesmo princípio se aplica a ssh
today (opção de configuração MaxAuthTries
), mas foi mais eficaz nos velhos tempos, porque a discagem de um modem foi um pouco mais lenta do que um handshake TCP.