🎹 个人简介:大家好,我是 金鱼哥,华为云社区2022年度十佳博主,华为云·云享专家,阿里云社区·专家博主,CSDN运维领域新星创作者
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL、PMP😜
💬格言:努力不一定成功,但要想成功就必须努力🔥🎈支持我:可点赞👍、可收藏⭐️、可留言📝
前言:在生产环境中,如果设置了pam_tally2模块限制,则需要了解好其限制的规则情况,也要知道触发规则出现不能登录时应该如何进行处置。本文以两天所遇到的情景而进行分析和讲述,希望对看到本文的小伙伴有所启示。
📜触发机制,登录失败
无独有偶,两天都遇到有厂商工程师由于触发了PAM的限制而导致机器不能登录。而限制用户登录次数
设置会几乎在所有生产环境中的机器进行设置,一旦触发,所登录的用户就不能进行登录,直到符合规则上的锁解时间
才可以进行登录。
时间点发生在4月10日和4月11日,分别在两台机器出现如下日志提示:
Apr 10 15:30:01 k8s-node3 login: pam_tally2(login:auth): unknown option: no_magic_root
Apr 10 15:30:01 k8s-node3 login: pam_tally2(login:auth): user root (0) tally 30, deny 3
Apr 10 15:30:03 k8s-node3 login: pam_succeed_if(login:auth): requirement "uid >= 1000" not met by user "root"
Apr 10 15:30:05 k8s-node3 login: FAILED LOGIN 1 FROM tty1 FOR root, Authentication failure
Apr 10 15:30:05 k8s-node3 login: pam_tally2(login:auth): unknown option: no_magic_root
Apr 10 10:03:44 k8s-master sshd[19896]: pam_tally2(sshd:auth): user root (0) tally 18, deny 3
Apr 10 10:03:44 k8s-master sshd[19896]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Apr 10 10:03:46 k8s-master sshd[19898]: pam_tally2(sshd:auth): user root (0) tally 19, deny 3
从日志可看出,两台机器都是PAM
中的pam_tally2
模块所触发的日志,但两者一个是在login
中触发,一个是sshd
中触发,这也侧面反应出pam_tally2
模块的设置可在不同的场景下进行。
📜学习pam_tally2
这里先说明一下pam_tally2
模块的情况:
pam_tally2模块用于记录用户登录失败的次数,并在达到一定的阈值后禁止用户继续尝试登录。它是一种安全措施,可以帮助保护系统免受恶意攻击。
pam_tally2模块分为两部分,一部分是pam_tally2.so,另一部分是pam_tally2。它基于PAM模块,可用于检查和操作计数器文件。它可以显示用户登录尝试次数,单独设置计数,也可清除计数,解锁所有用户登录锁定。
📑pam_tally2配置格式和选项
配置格式
# man pam_tally2
pam_tally2.so [file=/path/to/counter] [onerr=[fail|succeed]] [magic_root] [even_deny_root] [deny=n] [lock_time=n] [unlock_time=n] [root_unlock_time=n] [serialize] [audit] [silent] [no_log_info]
常用选项
-
file 记录日志的路径,默认是/var/log/tallylog
-
onerr:指定在读取计数器时出错时的行为。可选值包括:
- fail:认证失败。
- succeed:认证成功。
-
magic_root:如果模块是由uid=0的用户调用的,则计数器不递增。系统管理员应该对用户启动的服务使用这个参数,比如su,否则这个参数应该被省略。
-
even_deny_root:root用户在认证出错时,一样被锁定
-
deny:指定最大几次认证错误,如果超出此错误,将执行后面的策略。如锁定N秒,如果后面没有其他策略指定时,默认永远锁定,除非手动解锁。
-
lock_time:锁定多长时间,按秒为单位;
-
unlock_time:指定认证被锁后,多长时间自动解锁用户;
-
root_unlock_time:root用户在失败时,锁定多长时间。该选项一般是配合even_deny_root 一起使用的。
配置举例
pam_tally2模块的默认配置文件为/etc/pam.d/system-auth
(CentOS/RHEL)或/etc/pam.d/common-auth
(Ubuntu/Debian)。但也可以在以下配置文件中进行配置:
-
/etc/pam.d/login
:在本地终端上做限制 -
/etc/pam.d/kde
:在kde图形界面调用时限制 -
/etc/pam.d/sshd
:在通过ssh连接时做限制
而在默认配置文件/etc/pam.d/system-auth
中配置调用 system-auth
文件的服务,都会生效。
某配置片段:
auth required deny=5 unlock_time=30 even_deny_root root_unlock_time=60
account required pam_tally2.so
# account配置处需要添加此配置进行模块调用。
该配置指定了在用户连续登录失败5次后禁止其登录,并锁定30秒,即使是root用户也一样禁止,而root用户登录失败则锁定60秒。登录失败计数器记录在默认的/var/log/tallylog文件中。
当锁定而不能进行登录时,可在可以登录的终端框中使用pam_tally2 -u
命令查看登录失败的计算情况。如果锁定的时间较长的话,还需要手动解锁,清空计数才能进行登录。
涉及命令(以查看root用户为例):
# 查看计算
pam_tally2 -u root
# 清空计数
pam_tally2 -u root -r
📜故障处理
对pam_tally2有所了解后,那就可以直接在环境中进行处置,只要有可以登录到的终端,就可以进行清空计数,重新进行登录。
[root@k8s-master ~]# pam_tally2 -u root
Login Failures Latest failure From
root 32 04/11/23 10:04:47 172.16.250.143
[root@k8s-master ~]# pam_tally2 -u root -r
Login Failures Latest failure From
root 32 04/11/23 10:04:47 172.16.250.143
[root@k8s-master ~]# pam_tally2 -u root
Login Failures Latest failure From
root 0
清空计数后,只要输入密码正确就可以进行登录,那重点事情来了,那就是密码要输入正确!此时登录到系统,会有相关提示,例如:
There were 5 failed login attempts since the last successful login.
有小伙伴应该会发现,很多人触发锁定不就是因为忘记密码才会多次输入错误而导致被锁吗?那如果真的忘记密码了,那就只能进入到“重置密码”的模式中进行密码重置。
密码重置操作可参考金鱼哥的博文:Linux救援模式应该这样玩(包含重置CentOS 7和8的密码)
📜极端情况
故障路上群魔乱舞,甚至会出现由于设置的失误,而又达到了错误登录次数而触发了机制,导致连console直连都直接被锁定,而又不知道系统被锁定多久,甚至永久锁定😫如果出现这种情况的时候,那应该如何处理呢?
来,别慌,金鱼哥还真处理过这样的情况,当出现这样的情况,你可以这样操作:重启机器登录到单用户模式或者“重置密码”的模式中,使用计数器清零的命令清空计数,顺道把用户密码也进行修改,之后再尝试登录到系统;如果在“重置密码”的模式中不能清零计数器,那还可以曲线救国,直接在“重置密码”的模式中新建一个普通用户并设置好密码,然后授权sudo权限给此普通用户,之后进入系统登录此用户来对系统进行各种设置修复。
💡总结
故障到此已处理完毕,遇到报错要学会查看日志,这个真的非常重要,日志可辅助我们排查究竟是哪里出现问题,因此应该一上来就查看日志,看具体报错信息。
扎实的基础有利于排除故障并学习更多的知识和技能,共同努力,好好加油🤪。
以上就是【金鱼哥】对 pam_tally2模块的限制和所遇场景 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。
💾日常故障专栏系列:金鱼哥的TroubleShooting
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。
如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!