Linux服务器用户密码策略设置教程:从零开始强制密码复杂度

写在前面

刚接手一台Linux服务器,默认密码策略通常很宽松:密码可以设得很短、永不过期、甚至允许连续相同的字符。
这给服务器安全埋下了隐患。
本文将从零开始,教你通过修改系统配置文件,自定义密码长度、有效期、复杂度规则,并验证修改是否生效。

准备条件

  • 一台Linux服务器(本文以CentOS 7/8和Ubuntu 20.04为例)。
  • 拥有root权限或能通过sudo执行管理员命令。
  • 已通过SSH连接到服务器(本地操作也行)。

分步配置密码策略

1. 设置密码有效期与最小长度(/etc/login.defs)

这个文件控制shadow工具的行为,包括密码最大天数、最小长度等。

sudo vim /etc/login.defs

找到或添加以下几行(数值可按需调整):

PASS_MAX_DAYS   90
PASS_MIN_DAYS   7
PASS_MIN_LEN    8
PASS_WARN_AGE   7
  • PASS_MAX_DAYS 90:密码最长使用90天(即每90天强制换一次)。
  • PASS_MIN_DAYS 7:两次修改密码之间至少间隔7天,防止用户反复改回原密码。
  • PASS_MIN_LEN 8:密码最小长度8位。
  • PASS_WARN_AGE 7:密码过期前7天开始提醒用户更换。
注意PASS_MIN_LEN 只对通过 passwd 命令设置密码生效,对root用户设置密码无强制。若要真正限制长度和复杂度,需配合PAM。

2. 启用密码复杂度(PAM模块)

Linux系统通过PAM(可插拔认证模块)实现更精细的密码规则。
编辑对应文件。

CentOS/RHEL 7+ 使用 pam_pwquality.so

sudo vim /etc/pam.d/system-auth

找到包含 pam_pwquality.so 的行,如果没有则在新行添加(注意顺序在 password requisite 区域):

password    requisite     pam_pwquality.so try_first_pass retry=3 minlen=10 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

参数解释:

  • retry=3:允许用户尝试3次。
  • minlen=10:密码最小长度10(实际效果会更严格,因为复杂度要求也会算长度)。
  • ucredit=-1:至少1个大写字母。
  • lcredit=-1:至少1个小写字母。
  • dcredit=-1:至少1个数字。
  • ocredit=-1:至少1个特殊字符(如@#$)。
不同系统可能文件路径不同:Debian/Ubuntu 在 /etc/pam.d/common-password,相应配置类似。

对于Ubuntu/Debian

sudo vim /etc/pam.d/common-password

找到类似行前面的 pam_unix.so 行,在其后面添加 pam_pwquality.so 参数,或直接使用下面的行替换(请先备份):

password        requisite                       pam_pwquality.so retry=3 minlen=10 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

3. 限制历史密码(防止重复使用)

在同一个PAM配置文件中,找到 pam_unix.so 所在行,添加 remember=5 表示记录最近5次密码,禁止重复使用。

示例(CentOS):

password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

示例(Ubuntu):

password        [success=1 default=ignore]      pam_unix.so obscure sha512 remember=5

修改后保存文件。

避坑指南

  1. 修改前备份原文件:养成好习惯,出错时可恢复。
   sudo cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
  1. 不要直接编辑 system-auth 时使用 authconfig 工具:如果系统用了 authconfigauthselect,直接编辑文件会被覆盖。建议先使用 authselect 启用对应配置文件,再手动调整。
  2. root账户不受PAM限制:pwquality对root不生效,但普通用户会受控。
  3. 测试新密码前不要断开当前SSH:如果配置错误导致无法登录,可以保留当前连接排查。
  4. 不同发行版PAM文件名差异:CentOS 8+ 改用 password-authsystem-auth 共存,Ubuntu 则是 common-password。请确认当前系统的文件。

效果验证

验证长度与有效期

# 查看当前用户的密码过期信息
sudo chage -l 用户名

如果刚配置的政策没有立即生效到已有用户,需要手动强制:

sudo chage -M 90 用户名   # 设置最大天数
sudo chage -m 7 用户名    # 设置最小天数

验证复杂度规则

切换到一个普通用户(或新建测试用户):

sudo passwd 测试用户

输入简单密码(如 123456),系统应报错并拒绝。
再输入一个符合复杂规则的密码(如 Abc@12345),应当能成功修改。

验证历史密码限制

连续修改密码,尝试使用前几次用过的密码,系统会提示“密码已经被使用过”。

高频问题

  • Q:修改login.defs后,已有用户的密码有效期不变怎么办? A:login.defs 仅影响新创建的用户。对现有用户需手动执行 chage -M 90 用户名 或等待下次密码修改。
  • Q:pam_pwquality没生效? A:确认该模块已安装(yum install pam_pwqualityapt install libpam-pwquality)。
  • Q:密码规则太严,用户无法设置合规密码? A:适当放宽参数,比如将 minlen=8,减少特殊字符要求(ocredit=0)。

结尾

本文的 Linux服务器用户密码策略 配置步骤已经在多台测试机上验证,只要按顺序操作,基本不会出现意外。
建议每季度重新检查一次策略是否符合当前安全要求。
如果遇到特殊的报错,优先检查 PAM 日志(/var/log/secure/var/log/auth.log)来定位问题。

分享到:
上一篇
宝塔面板Nginx防盗链设置教程
下一篇
宝塔面板MySQL慢查询优化:零基础也能精准定位慢SQL
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意