Linux系统升级openssh后登录pam_tally2.so计数不清零问题解决

Linux系统pam_tally2.so登陆成功后失败计数不清零问题解决

问题描述

linux系统(影像版本包括centos6.x,centos7.x和ubuntu14.04、16.04、18.04等使用pam_tally2策略限制ssh登录失败次数的系统)手动升级openssh到8.0p1版本后,修改/etc/pam.d/sshd pam策略配置文件添加限制用户ssh登录失败锁定次数的策略:

auth  required  pam_tally2.so onerr=fail deny=10 unlock_time=1800 even_deny_root root_unlock_time=1800

即限制用户使用ssh登录时,密码输入错误10后锁定当前用户,1800秒后解锁,用户可以再次登录。
配置之后发现无论用户密码输入对错,使用pam_tally2 --user 用户名 命令查看当前的登录失败次数都会增加,即使登陆成功,该计数器也不会清零。导致用户登录10次之后,每次都要等30分钟才能再次登录。
以centos7.6为例,添加策略后的/etc/pam.d/sshd文件如下:
修改后限制用户登录的sshd pam配置
注意:是手动从源码安装openssh 8.0p1后才出现的该问题,手动编译安装时configure指定了–with-pam参数,且ssh服务配置/etc/ssh/sshd_config配置了 UsePAM yes。可能是openssh升级后版本和pam版本不匹配引起的。系统安装完自动的ssh没有发现该问题。

pam_tally2.so简介

pam_tally2.so是一个linux的用户登录计数器模块。他会维护用户尝试登录的次数,当登录成功时重置计数器,当尝试登录失败次数过多时阻止登录。
( This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail.)。
它包括pam_tally2.sopam_tally2两部分,前者是一个PAM 模块,后者是一个独立的程序用来查看计数和手动清除计数信息。
pam_tally2计数信息
其他详细信息不再这里说明,有兴趣的朋友自行搜索……

问题关键

pam_tally2.so 模块每次在用户登录,进行pam策略检查被调用时首先会对该登录用户的计数加一,然后正常的话会在用户登录成功后的调用pam_setcert 重置计数。
(Authentication phase first increments attempted login counter and checks if user should be denied access. If the user is authenticated and the login process continues on call to pam_setcred(3) it resets the attempts counter.)
但是实际上在用户登录成功后,计数器未能被清零,导致用户每次登录计数器都会加1.

问题解决

目前我使用如下方法解决该问题:
再次修改/etc/pam.d/sshd 文件,在account 配置的首行添加如下配置:

account    required    pam_tally2.so

修改后的sshd pam配置
注意: 这个配置最好放在account 配置的第一行,插入的位置也会对策略产生影响。
这样在通过了auth的检查,用户登录成功后account的pam_tally2 配置会将用户当前的计数重置为0,不再产生累加问题。
登录成功后计数清零
用户登录成功后,当前用户登录计数器清零。

centos8.x

在centos8.x 系列系统中,pam策略不再使用pam_tally2.so,改为使用pam_faillock.so 模块,使用方法和前者类似,同样可以使用faillock命令查看用户登录失败的记录。
但是在限制用户进行ssh登录的配置时,修改的是/etc/pam.d/password-auth 和 /etc/pam.d/system-auth 文件。
可是参考以下修改脚本:

sed -i '4 iauth        required                                     pam_faillock.so deny=10 unlock_time=1800 even_deny_root root_unlock_time=1800' /etc/pam.d/password-auth
sed -i '/auth.*sufficient.*pam_unix.so.*/aauth        [default=die]                                pam_faillock.so  authfail  audit  deny=10 even_deny_root unlock_time=1800' /etc/pam.d/password-auth
sed -i '/account.*required.*pam_permit.so/aaccount     required                                     pam_faillock.so' /etc/pam.d/password-auth

sed -i '4 iauth        required                                     pam_faillock.so deny=10 unlock_time=1800 even_deny_root root_unlock_time=1800' /etc/pam.d/system-auth
sed -i '/auth.*sufficient.*pam_unix.so.*/aauth        [default=die]                                pam_faillock.so  authfail  audit  deny=10 even_deny_root unlock_time=1800' /etc/pam.d/system-auth
sed -i '/account.*required.*pam_permit.so/aaccount     required                                     pam_faillock.so' /etc/pam.d/system-auth

配置文件如下:
system-auth文件:
system-auth
password-auth文件:password-auth

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值