linux默认不启用账户锁定,需手动配置pam_faillock.so并设置deny、unlock_time与fail_interval参数,通过三行顺序严格的auth规则实现暴力破解防护。

如果您在Linux系统中需要防止暴力破解或异常登录尝试,必须通过PAM模块显式启用账户锁定机制。Linux默认不激活任何失败次数限制策略,需手动配置pam_faillock.so并设置deny、unlock_time与fail_interval参数。以下是具体实施方法:
一、配置pam_faillock.so模块启用账户锁定
该方法通过修改PAM认证配置文件,在用户登录流程中插入失败计数逻辑,是当前RHEL 8+、CentOS Stream、Debian 12+及Ubuntu 22.04+等主流发行版的官方推荐方式。核心在于三行顺序不可颠倒的auth规则,分别处理预认证、失败响应与成功响应。
1、确认系统使用的是pam_faillock.so而非已废弃的pam_tally2.so:执行grep -r "pam_faillock" /etc/pam.d/,若无输出则需继续配置。
2、根据发行版选择对应PAM配置文件:Debian/Ubuntu系统编辑/etc/pam.d/common-auth;RHEL/CentOS系统编辑/etc/pam.d/system-auth;通用兼容性配置可选/etc/pam.d/password-auth。
3、在所选文件的auth段**开头附近**插入以下三行(严格保持顺序):
auth [default=ignore] pam_faillock.so preauth silent deny=5 unlock_time=900 fail_interval=60
auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900 fail_interval=60
auth [default=ok] pam_faillock.so authsucc
4、保存文件后,立即测试非root账户输错密码行为,避免在SSH会话中直接退出导致自身被锁。
二、使用faillock命令管理锁定状态
faillock是pam_faillock配套的命令行工具,用于查询、重置和手动干预账户失败计数状态。所有操作均依赖/var/run/faillock/下的用户级状态文件,不修改/etc/shadow,不影响密码本身。
1、查看指定用户当前失败记录:faillock --user username,输出包含时间戳、源IP及累计失败次数。
2、重置单个用户失败计数并解除锁定:faillock --user username --reset。
3、清空系统中所有用户的失败记录(慎用):faillock --reset。
4、手动锁定某用户(绕过失败阈值):faillock --user username --lock。
5、手动解锁已被锁定的用户:faillock --user username --unlock。
三、通过chage设置账户生命周期与临时禁用
该方法不依赖PAM模块,直接作用于/etc/shadow字段,适用于需长期停用、审计隔离或配合密码策略使用的场景,与faillock机制正交且可共存。
1、设置密码90天后过期、提前7天提醒、过期后3天宽限期:chage -M 90 -W 7 -I 3 username。
2、锁定账户至指定日期后禁止登录(如2025-12-31之后):chage -E "2025-12-31" username。
3、查看用户完整策略详情:chage -l username,重点关注Password expires与Account expires字段。
4、立即禁用用户密码(在shadow第二字段前加!):passwd -l username。
5、恢复用户密码可用性:passwd -u username。
四、使用usermod禁用shell登录实现逻辑隔离
此方法通过更改用户默认shell为/sbin/nologin,使系统拒绝所有交互式登录请求,包括SSH密码、SSH密钥及本地TTY登录,但保留用户UID/GID及文件所有权,适合服务账户或临时冻结。
1、禁止用户进行任何shell登录:usermod -s /sbin/nologin username。
2、恢复用户正常bash登录:usermod -s /bin/bash username。
3、验证当前shell设置:getent passwd username | cut -d: -f7,输出应为/sbin/nologin或/bin/bash。
4、注意:passwd -l不会阻止SSH密钥登录,而usermod -s /sbin/nologin会完全阻断所有shell访问方式。
五、调整faillock全局默认参数(Arch系及部分新版发行版)
某些发行版(如Arch Linux)支持通过/etc/security/faillock.conf统一定义默认策略,避免在多个PAM文件中重复配置,提升维护一致性。
1、打开配置文件:sudo nano /etc/security/faillock.conf。
2、取消注释并修改以下三行:
deny = 3
fail_interval = 900
unlock_time = 600
3、确保PAM配置中调用pam_faillock.so时未显式覆盖这些参数,否则以PAM行内参数为准。
4、修改后无需重启服务,下次登录即生效;修改前请确认已有faillock.so配置存在,否则该文件不生效。











