Linux 密码的安全
[步骤] Linux 密码的安全 (本地和 SSH 输错密码次数的限制)(pam_faillock 版) (CentOS Linux 7 & Rocky Linux 8 & RHEL 7 & RHEL 8 版)
- 正文:
- 步骤一:背景了解
- 步骤二:让 sshd 使用可插入身份验证模块
- 步骤三:让本地登录和 sshd 登录使用密码认证
- 步骤四:设置 pam_faillock.so 模块
- 4.1 方法一:在配置文件中添加 pam_faillock.so 模块和相关参数
- 4.1.1 在 /etc/pam.d/system-auth 配置文件中添加 pam_faillock.so 模块和相关参数 (Rocky Linux 8 & RHEL 8 不建议)
- 4.1.2 在 /etc/pam.d/system-auth 配置文件中设置登录失败几次后提示登录失败
- 4.1.3 在 /etc/pam.d/password-auth 配置文件中添加 pam_faillock.so 模块和相关参数 (Rocky Linux 8 & RHEL 8 不建议)
- 4.1.4 在 /etc/pam.d/password-auth 配置文件中设置登录失败几次后提示登录失败
- 4.1.5 修改 /etc/security/faillock.conf 配置文件 (只在 Rocky Linux 8 & RHEL 8 上执行)
- 4.2 方法二:通过 authconfig 命令启用 pam_faillock.so 模块并设置相关参数
- 4.1 方法一:在配置文件中添加 pam_faillock.so 模块和相关参数
- 步骤五:用户登录失败的管理
- 步骤六:部分用户输错密码次数限制的排除 (Rocky Linux 8 & RHEL 8 不建议)
- 参考文献:
正文:
步骤一:背景了解
从 CentOS Linux 8 & RHEL 8 开始,系统的身份验证模块从 CentOS Linux 7 & RHEL 7 的 pam_tally2 换成了 pam_faillock
步骤二:让 sshd 使用可插入身份验证模块
2.1 修改 /etc/ssh/sshd_config 配置文件
# vim /etc/ssh/sshd_config
将以下内容:
......
#UsePAM no
......
修改为:
......
UsePAM yes
......
2.2 让修改的配置生效
# systemctl restart sshd
步骤三:让本地登录和 sshd 登录使用密码认证
3.1 确认 /etc/pam.d/login 配置文件
# cat /etc/pam.d/login | grep system-auth
确保包含以下内容:
auth substack system-auth
account include system-auth
password include system-auth
session include system-auth
3.2 确认 /etc/pam.d/sshd 配置文件
# cat /etc/pam.d/sshd | grep password-auth
确保包含以下内容:
auth substack password-auth
account include password-auth
password include password-auth
session include password-auth
步骤四:设置 pam_faillock.so 模块
4.1 方法一:在配置文件中添加 pam_faillock.so 模块和相关参数
4.1.1 在 /ETC/PAM.D/SYSTEM-AUTH 配置文件中添加 PAM_FAILLOCK.SO 模块和相关参数 (ROCKY LINUX 8 & RHEL 8 不建议)
# vim /etc/pam.d/system-auth
在此行:
......
auth required pam_env.so
......
下面添加:
......
auth required pam_faillock.so preauth silent audit even_deny_root deny=6 unlock_time=180
......
在此行:
......
auth sufficient pam_unix.so nullok try_first_pass
......
下面添加:
......
auth [default=die] pam_faillock.so authfail audit even_deny_root deny=6 unlock_time=180
......
在此行:
......
account required pam_unix.so
......
下面添加:
......
account required pam_faillock.so
......
(补充:这里以包括 root 用户每使用密码 SSH 远程登录失败 6 次则被锁定 180 秒为例)
(
注意:
Rocky Linux 8 & RHEL 8 不建议执行此步骤,执行后 Rocky Linux 8 & RHEL 8 正常的 SFTP 登录会被视为失败,不过正常的 SSH 登录不受影响。若要确保正常 SFTP 登录不被视为失败登录,则需要确保部分内容如下:
# cat /etc/authselect/system-auth
......
auth required pam_faillock.so preauth silent
......
auth required pam_faillock.so authfail
......
account required pam_faillock.so
......
)
4.1.2 在 /ETC/PAM.D/SYSTEM-AUTH 配置文件中设置登录失败几次后提示登录失败
# vim /etc/pam.d/system-auth
将以下内容:
......
password requisite pam_pwquality.so ......
......
修改为:
......
password requisite pam_pwquality.so try_first_pass local_users_only enforce-for-root retry=3 ......
......
(补充:这里以登录失败 3 次后提示登录失败为例)
4.1.3 在 /ETC/PAM.D/PASSWORD-AUTH 配置文件中添加 PAM_FAILLOCK.SO 模块和相关参数 (ROCKY LINUX 8 & RHEL 8 不建议)
# vim /etc/pam.d/password-auth
在此行:
......
auth required pam_env.so
......
下面添加:
......
auth required pam_faillock.so preauth silent audit even_deny_root deny=6 unlock_time=180
......
在此行:
......
auth sufficient pam_unix.so try_first_pass nullok
......
下面添加:
......
auth [default=die] pam_faillock.so authfail audit even_deny_root deny=6 unlock_time=180
......
在此行:
......
account required pam_unix.so
......
下面添加:
......
account required pam_faillock.so
......
(补充:这里以包括 root 用户每使用密码 SSH 远程登录失败 6 次则被锁定 180 秒为例)
(
注意:Rocky Linux 8 & RHEL 8 不建议执行此步骤,执行后 Rocky Linux 8 & RHEL 8 正常的 SFTP 登录会被视为错误失败,不过正常的 SSH 登录不受影响。若要确保正常 SFTP 登录不被视为失败登录,则需要确保部分内容如下:
# cat /etc/authselect/password-auth
......
auth required pam_faillock.so preauth silent
......
auth required pam_faillock.so authfail
......
account required pam_faillock.so
......
)
4.1.4 在 /ETC/PAM.D/PASSWORD-AUTH 配置文件中设置登录失败几次后提示登录失败
# vim /etc/pam.d/password-auth
将以下内容:
......
password requisite pam_pwquality.so ......
......
修改为:
......
password requisite pam_pwquality.so try_first_pass local_users_only enforce-for-root retry=3 ......
......
(补充:这里以登录失败 3 次后提示登录失败为例)
4.1.5 修改 /ETC/SECURITY/FAILLOCK.CONF 配置文件 (只在 ROCKY LINUX 8 & RHEL 8 上执行)
# vim /etc/security/faillock.conf
将以下内容:
......
# deny =
......
# unlock_time =
......
修改为:
......
deny = 6
......
unlock_time = 180
......
(注意:只在 Rocky Linux 8 & RHEL 8 才进行此操作)
4.2 方法二:通过 authconfig 命令启用 pam_faillock.so 模块并设置相关参数
4.2.1 通过 AUTHCONFIG 命令启用 PAM_FAILLOCK.SO 模块并设置相关参数
# authconfig --enablefaillock --faillockargs="deny=6 unlock_timeout=180" --update
(
补充:
1) 这里以包括 root 用户每使用密码 SSH 远程登录失败 6 次则被锁定 180 秒
2) 登录失败 3 次后提示登录失败
为例
)
4.2.2 通过 AUTHCONFIG 命令启用 PAM_FAILLOCK.SO 模块并设置相关参数
# authconfig --disablefaillock --update
步骤五:用户登录失败的管理
5.1 显示某个用户近期输错了几次密码
# faillock --user root
(补充:这里以显示 root 用户近期输错了几次密码为例)
5.2 重制远程登录密码输错次数
5.2.1 重制某用户远程登录密码输错次数
# faillock --user root --reset
5.2.2 重制所有用户远程登录密码输错次数
# faillock --reset
步骤六:部分用户输错密码次数限制的排除 (Rocky Linux 8 & RHEL 8 不建议)
6.1 在 /etc/pam.d/system-auth 配置文件中添加 pam_succeed_if.so 模块和相关参数 (Rocky Linux 8 & RHEL 8 不建议)
# vim /etc/pam.d/system-auth
在此行:
......
auth required pam_faillock.so preauth silent audit even_deny_root deny=6 unlock_time=180
......
下面添加:
......
auth [success=1 default=ignore] pam_succeed_if.so user in mingyuzhu1:mingyuzhu2:mingyuzhu3
......
(补充:这里以排除用户 zhumingyu1、zhumingyu2 和 zhumingyu3 的输错密码次数限制为例)
(注意:Rocky Linux 8 & RHEL 8 不建议执行此步骤)
5.2 在 /etc/pam.d/password-auth 配置文件中添加 pam_succeed_if.so 模块和相关参数 (Rocky Linux 8 & RHEL 8 不建议)
# vim /etc/pam.d/password-auth
在此行:
......
auth [default=die] pam_faillock.so authfail audit even_deny_root deny=6 unlock_time=180
......
下面添加:
......
auth [success=1 default=ignore] pam_succeed_if.so user in mingyuzhu1:mingyuzhu2:mingyuzhu3
......
(补充:这里以排除用户 zhumingyu1、zhumingyu2 和 zhumingyu3 的输错密码次数限制为例)
(注意:Rocky Linux 8 & RHEL 8 不建议执行此步骤)
参考文献:
https://access.redhat.com/solutions/62949
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App