手动锁定与解锁用户账户
对于特定情况,例如当员工离职或某个账户出现异常活动时,管理员可能需要立即手动锁定一个账户,CentOS 提供了两种简单直接的手动锁定方式。

使用 passwd 命令
passwd 命令不仅可以用于修改密码,其 -l (lock) 选项可以快速锁定用户,执行该命令后,系统会在 /etc/shadow 文件中对应账户的加密密码字段前添加一个感叹号 ,从而使其密码失效。
# 锁定用户 'testuser' sudo passwd -l testuser
锁定的账户无法再通过密码登录系统,但其家目录和其他系统资源仍然存在。
要解锁账户,只需使用 -u (unlock) 选项:
# 解锁用户 'testuser' sudo passwd -u testuser
使用 usermod 命令
usermod 命令是用于修改用户账户属性的强大工具,同样提供了锁定功能,其 -L (lock) 选项与 passwd -l 的效果完全相同,都是在密码字段前添加 。
# 锁定用户 'testuser' sudo usermod -L testuser
相应地,解锁则使用 -U (unlock) 选项:
# 解锁用户 'testuser' sudo usermod -U testuser
虽然手动锁定操作简单,但它缺乏自动化能力,无法应对持续的、隐蔽的暴力破解攻击,在生产环境中,更推荐配置自动锁定策略。
配置自动密码锁定策略(推荐方案)
CentOS 通过 PAM(Pluggable Authentication Modules,可插拔认证模块)机制实现了灵活的自动锁定功能,最常用的模块是 pam_faillock.so,它能够记录失败登录尝试并在达到阈值后锁定账户。
在现代的 CentOS 7/8/9 版本中,推荐通过 /etc/security/faillock.conf 文件进行配置,这种方式更为清晰和易于管理。

核心配置参数
以下是 faillock.conf 中几个关键参数的说明:
| 参数 | 示例值 | 描述 |
|---|---|---|
deny | 3 | 允许的连续失败登录次数,达到此次数后账户将被锁定。 |
fail_interval | 900 | 计算失败登录次数的时间窗口(单位:秒),900秒内失败3次则锁定。 |
unlock_time | 600 | 账户被锁定的时间(单位:秒),设置为 0 表示永久锁定,直到管理员手动解锁。 |
even_deny_root | (无值) | 如果添加此行,表示锁定策略同样适用于 root 账户,请谨慎使用。 |
root_unlock_time | 60 | 当 even_deny_root 启用时,为 root 账户设置一个较短的解锁时间。 |
激活配置
仅仅编辑 faillock.conf 文件是不够的,还需要确保 PAM 的认证配置文件(通常是 /etc/pam.d/system-auth 和 /etc/pam.d/password-auth)正确地调用了 pam_faillock.so 模块,这些文件中已经包含了相关配置行,你只需要取消注释或确认其存在即可,关键行如下:
auth required pam_faillock.so preauth
auth sufficient pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail
account required pam_faillock.so 这些行确保了在登录认证的各个阶段都会调用 pam_faillock 模块进行检查和记录,修改 PAM 配置文件后,策略会立即生效,无需重启任何服务。
管理与查询锁定状态
配置了自动锁定策略后,管理员需要知道如何查询哪些账户被锁定,以及如何进行干预。
查询账户锁定状态
: passwd -S命令可以显示账户状态信息。passwd -S testuser
输出可能为
testuser LK 2025-10-27 0 99999 7 -1 (Password locked.),LK表示账户被锁定。:这是专门用于 pam_faillock的管理工具,可以提供更详细的信息。
# 查看特定用户的失败登录记录 sudo faillock --user testuser # 查看所有被锁定的用户 sudo faillock
该命令会显示失败登录的来源、时间和次数。
手动解锁账户
当一个合法用户被意外锁定时,管理员可以使用 faillock 命令手动解锁,解锁操作的本质是清除该用户的失败登录计数记录。
# 清除 'testuser' 的失败记录,从而解锁账户 sudo faillock --user testuser --reset
执行此命令后,用户 testuser 便可以立即尝试重新登录。
相关问答 (FAQs)
问题1:如果管理员账户(如 root)被意外锁定,无法登录怎么办?
解答: 这确实是一个棘手的情况,但仍有解决方案,尝试通过物理控制台或云服务提供商的 VNC (Virtual Network Console) 访问系统,如果仍然无法登录,您需要重启服务器并进入“单用户模式”或“紧急模式”,在此模式下,系统会以 root 权限启动一个最小化的 shell,且不要求密码,进入后,您可以直接使用 faillock --user root --reset 命令来清除 root 账户的失败记录,或者编辑 /etc/shadow 文件手动移除密码前的 号,然后重启系统即可恢复正常访问。
问题2:密码锁定与账户禁用有何区别?
解答: 两者都能阻止用户登录,但原理和应用场景不同,密码锁定(通过 passwd -l 或 pam_faillock)是针对认证凭证的操作,它使现有密码失效,但账户本身及其配置(如用户 ID、主目录、登录 Shell)仍然存在,解锁后,账户可立即恢复使用,而账户禁用通常是指修改用户的登录 Shell,例如将其设置为 /sbin/nologin 或 /bin/false,这样即使用户提供了正确的密码,系统在完成认证后也会因为无法启动有效的 Shell 而立即断开连接,账户禁用是一种更彻底的访问阻断,常用于长期停用但保留其文件和所有权的账户(如服务账户),简言之,锁定是“暂时的封印”,禁用是“永久的驱逐”。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复