在CentOS系统的管理与安全维护中,“锁定时间”是一个涉及多个层面但至关重要的概念,它既可以指代在安全策略下,用户账户因多次登录失败而被锁定的时间长度,也可以指代为保障系统稳定性和审计一致性而对系统时间本身进行锁定,防止其被随意修改,理解并正确配置这两种“锁定时间”,是每一位系统管理员提升系统安全性的必备技能。

用户账户的登录失败锁定策略
这是“锁定时间”最常见的应用场景,通过配置PAM(可插拔认证模块),系统可以在检测到一系列失败的登录尝试后,自动锁定用户账户,从而有效抵御暴力破解攻击,在CentOS 7及以后的版本中,主要使用pam_faillock模块来实现这一功能。
配置账户锁定参数
账户锁定策略的核心配置文件是/etc/security/faillock.conf,通过编辑此文件,管理员可以精细地控制锁定行为,以下是一些关键的配置项:
| 参数名称 | 功能描述 | 示例值 |
|---|---|---|
deny |
允许的连续失败登录次数,超过此次数后账户将被锁定。 | 3 |
fail_interval |
计算失败登录次数的时间窗口(单位:秒)。 | 900 (15分钟) |
unlock_time |
账户被锁定后,自动解锁的时间(单位:秒)。 | 600 (10分钟) |
even_deny_root |
是否将锁定策略应用于root超级用户。 | 1 (是) |
一个典型的安全配置如下所示:
# /etc/security/faillock.conf # Deny access after 3 failed attempts deny = 3 # Lockout time in seconds. 600 seconds = 10 minutes. unlock_time = 600 # Interval in seconds during which the consecutive failures must occur. fail_interval = 900 # Also apply the lockout to the root user. even_deny_root
在上述配置中,任何用户(包括root)如果在15分钟内连续3次输入错误密码,其账户将被锁定10分钟,将unlock_time设置为0或never则表示账户被永久锁定,直到管理员手动解锁。
应用与验证配置
仅仅修改faillock.conf文件并不会使策略生效,必须确保PAM的认证配置文件正确引用了pam_faillock模块,这通常涉及到/etc/pam.d/system-auth和/etc/pam.d/password-auth两个文件,在这些文件中,需要找到并确保以下两行(或类似行)未被注释掉:

auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600
auth required pam_faillock.so authfail audit deny=3 unlock_time=600
配置完成后,可以使用faillock命令来查看和管理失败登录记录,查看用户testuser的失败记录:
faillock --user testuser
若要手动解锁一个被锁定的用户,可以使用以下命令:
faillock --user testuser --reset
系统时间的锁定与保护
在某些高安全性或需要精确时间同步的环境中(如金融交易系统、分布式数据库集群),防止系统时间被意外或恶意修改至关重要,锁定系统时间主要是通过配置NTP(网络时间协议)客户端服务——在现代CentOS中通常是chronyd——来实现的。
chronyd服务一旦启动并正确配置,它会持续与远程时间服务器同步,并会抵抗本地对系统时间的修改,关键在于确保chronyd服务稳定运行,并且其配置文件/etc/chrony.conf设置得当。
- 确保服务运行:使用
systemctl enable --now chronyd命令确保chronyd服务开机自启并立即运行。 - 配置访问控制:在
/etc/chrony.conf中,可以通过cmdport指令限制chronyc(chronyd的控制工具)的访问,将其设置为0或注释掉可以防止本地和远程的控制命令,从而增加一层保护。 - 设置本地时钟源:即使与外部服务器断开连接,也可以通过
local stratum指令让chronyd将本地时钟作为时间源,维持时间的相对稳定。
通过这种方式,chronyd会成为系统时间的“守护者”,即使有root权限的用户尝试使用date命令直接修改时间,chronyd也会在稍后自动将其校正回正确的时间,从而实现了“锁定”的效果。

相关问答 (FAQs)
问题1:我忘记了root密码,并且因为账户被锁定而无法登录,该怎么办?
解答: 这种情况需要通过进入单用户模式或救援模式来解决,重启系统,在GRUB引导菜单出现时,按e键编辑启动选项,找到以linux或linux16开头的行,在行末添加rd.break,然后按Ctrl+x启动,系统进入紧急模式后,依次执行以下命令:
mount -o remount,rw /sysroot(重新挂载根文件系统为可写)chroot /sysroot(切换到原始系统环境)passwd root(重置root密码)faillock --user root --reset(清除root账户的失败登录记录,解锁账户)touch /.autorelabel(确保SELinux上下文被重新标记)- 输入
exit两次,系统将重启,重启后你就可以用新密码登录了。
问题2:在faillock.conf中,设置 unlock_time 为 0 和 never 有什么区别?
解答: 在功能上,设置 unlock_time = 0 和 unlock_time = never 的效果是完全相同的,都表示账户被永久锁定,不会自动解锁,必须由管理员使用 faillock --user <username> --reset 命令手动解锁,两者之间的主要区别在于可读性和表达的明确性,使用 never 更加直观,清晰地表明了“永不解锁”的意图,而 0 是一个实现该功能的数值方式,在实际应用中,推荐使用 never,因为它能让配置文件的含义更加一目了然。