O módulo PAM pam_tally2 (8) pode ser usado para negar acesso a uma conta após muitas tentativas de login com falha. o que parece exatamente o que você quer fazer. Se sua configuração atual estiver sendo autenticada por meio de PAM , isso deve funcionar bem.
Este artigo tem alguns exemplos de configuração .
Você mencionou que consultou o PAM SAG , que documentos pam_tally2 , mas você não disse por que isso não ajudou. Se você já consultou este módulo e decidiu que ele não atende às suas necessidades, ajudaria se você atualizasse sua pergunta para indicar por que as várias outras soluções não funcionaram.
Veja um exemplo usando os programas Cyrus SASL2 sasl2-sample-server e sasl2-sample-client .
Em /etc/pam.d/sample tenho:
auth required pam_tally2.so deny=3 unlock_time=300
auth sufficient pam_mysql.so config_file=/etc/pam_mysql.conf
auth required pam_deny.so
account required pam_mysql.so config_file=/etc/pam_mysql.conf
E /etc/pam_mysql.conf é assim:
users.database=pamuser
users.table=pamuser
users.db_user=pamuser
users.db_passwd=pamuser
users.user_column=user
users.password_column=password
users.password_crypt=plain
verbose=1
Eu tenho um banco de dados pamuser com uma tabela pamuser que se parece com isso:
mysql> select * from pamuser;
+------+----------+
| user | password |
+------+----------+
| lars | lars |
+------+----------+
Em /etc/sasl2/sample.conf tenho:
pwcheck_method: saslauthd
mech_list: plain
Eu começo saslauthd assim:
saslauthd -a pam
Eu inicio sasl2-sample-server :
sasl2-sample-server -p 9999 -m plain -s sample
E eu tento autenticar usando sasl2-sample-client , primeiro usando a senha correta:
$ sasl2-sample-client -p 9999 localhost
receiving capability list... recv: {5}
plain
plain
please enter an authentication id: lars
please enter an authorization id: lars
Password:
send: {5}
PLAIN
send: {1}
Y
send: {14}
lars[0]lars[0]lars
successful authentication
closing connection
Ótimo, isso funcionou. Agora vou digitar a senha errada três vezes ...
... tudo bem, foi rápido. Agora pam_tally2 mostra as falhas:
# pam_tally2
Login Failures Latest failure From
lars 3 07/31/13 12:17:00 unknown
E se eu fizer login usando a senha correta novamente, serei rejeitado:
$ sasl2-sample-client -p 9999 localhost
.
.
.
lars[0]lars[0]lars
authentication failed
closing connection
pam_tally2 registra o seguinte:
Jul 31 12:18:01 madhatter saslauthd[14122]: pam_tally2(sample:auth): user lars (1000) tally 4, deny 3
E o comando pam_tally2 mostra um aumento na contagem de falhas:
# pam_tally2
Login Failures Latest failure From
lars 4 07/31/13 12:18:01 unknown
E aí está, um exemplo completo de integração de pam_tally2 e pam_mysql . Se eu esperasse cinco minutos ou executasse pam_tally2 -u lars -r , seria possível fazer login novamente.