pam_tally2计数器在每次sudo时都增加的BUG

背景

客户要求用pam_tally2来限制输入密码多次错误后锁定

在/etc/pam.d/common-auth中增加下面选项进行限制

auth        required      pam_tally2.so deny=6 onerr=fail no_magic_root unlock_time=120


配置完后手使用ssh进行测试,输入密码错误6次后会锁定120秒,解锁后输入正确密码,pam_tally2计数器清零

查看计数器的命令如下:

pam_tally2 -u maintain 

显示结果

Login           Failures Latest failure     From
maintain            0    

问题

配置完成后通过ansible远程执行命令使用sudo提权的时候,一直提示密码错误,排查问题中发现只要使用SUDO就会增加密码错误次数(密码正确时也一样),当密码正确也不会清零

只能使用手动清零

pam_tally2 -u admin --reset

通过网上查资料发现,这个问题是sudo的一个bug,ubuntu,redhat都有人碰到过
pam_tally2的文档这样解释:

Account phase resets attempts counter if the user is not magic root.This phase can be used optionally for services which don't call pam_setcred(3) correctly or if the reset should be done regardless of the failure of the account phase of other modules." 

这个问题一个可能的原因是sudo模块在执行具体动作之前关闭了pam的session,没有正确调用pam_setcred(),导致返回失败的错误码,pam_tally2计数器累加。

解决办法

有一个临时解决办法就是
auth required pam_tally2.so deny=6 onerr=fail no_magic_root unlock_time=120行后面增加

account     required      pam_tally2.so