在CentOS系统中,密码策略的统一配置是安全加固的核心环节之一。通过authconfig工具,管理员可以在一条命令或一个配置文件中完成密码复杂度、过期周期、锁定策略等全部安全参数的设定,避免手动修改多个配置文件带来的遗漏和不一致问题。具体做法是:使用authconfig命令行工具配合PAM模块参数,将密码最小长度、大写小写数字特殊字符要求、密码有效期、失败锁定次数等策略一次性写入系统认证框架,实现全系统统一生效。

很多运维人员习惯手动编辑/etc/login.defs、/etc/pam.d/system-auth、/etc/security/pwquality.conf等多个文件来设置密码策略,这种方式不仅繁琐,而且在多台服务器部署时极易出现配置偏差。authconfig作为CentOS 6/7时代的核心认证配置工具,能够将这些分散的参数整合到一个统一的管理接口中,大幅提升配置效率和一致性。

一、authconfig工具的基本原理

authconfig是CentOS系统中用于配置系统认证和密码策略的命令行工具。它的工作原理是通过读取和修改PAM(Pluggable Authentication Modules,可插拔认证模块)配置文件以及shadow工具的相关参数,来实现对用户认证行为的统一管控。在CentOS 7中,authconfig仍然可用,但官方更推荐使用authselect作为替代方案;而在CentOS 6及更早版本中,authconfig是标准配置手段。

authconfig的核心优势在于它能够同时操作多个底层配置文件。当你执行一条authconfig命令时,它会自动更新/etc/pam.d/system-auth、/etc/pam.d/password-auth、/etc/sysconfig/authconfig等文件,确保策略在所有认证入口点都生效。这种"一处配置、全局生效"的机制,正是企业级安全管理所需要的。

二、通过authconfig配置密码策略的具体命令

下面直接给出常用的authconfig密码策略配置命令,每条命令都有明确的参数含义:

# 设置密码最小长度为12位
authconfig --passminlen=12 --update

# 启用密码复杂度检查(需要pwquality模块)
authconfig --enablerequisite --update

# 设置密码最长有效期为90天
authconfig --passmaxdays=90 --update

# 设置密码最短有效期为1天(防止频繁改回旧密码)
authconfig --passmindays=1 --update

# 设置密码过期前警告天数为7天
authconfig --passwarndays=7 --update

# 设置登录失败锁定次数为5次
authconfig --enablelock --lockattempts=5 --update

# 设置锁定时间为30分钟
authconfig --enablelock --locktime=30 --update

# 启用大写字母要求
authconfig --passrequires=ucredit --update

# 启用小写字母要求
authconfig --passrequires=lcredit --update

# 启用数字要求
authconfig --passrequires=dcredit --update

# 启用特殊字符要求
authconfig --passrequires=ocredit --update

需要特别注意的是,--update参数是必须加的,它告诉authconfig将参数实际写入配置文件。如果不加这个参数,命令只是预览效果,不会真正修改任何文件。另外,多个参数可以组合在一条命令中执行,比如同时设置最小长度、复杂度和过期策略。

三、authconfig背后修改了哪些文件

理解authconfig的工作机制,需要知道它到底改了什么。当你执行上述命令后,authconfig主要修改以下几个关键文件:

第一个是/etc/pam.d/system-auth(CentOS 7)或/etc/pam.d/system-auth-ac(CentOS 6)。这个文件定义了系统认证的PAM堆栈,authconfig会在其中添加或修改pam_pwquality.so或pam_cracklib.so模块的参数,比如minlen、ucredit、lcredit、dcredit、ocredit等。

第二个是/etc/login.defs。这个文件控制shadow工具的行为,authconfig会修改其中的PASS_MIN_LEN、PASS_MAX_DAYS、PASS_MIN_DAYS、PASS_WARN_AGE等参数。

第三个是/etc/sysconfig/authconfig。这是authconfig自身的状态记录文件,记录了当前启用了哪些认证模块和策略选项,方便后续查看和恢复。

# 查看/etc/pam.d/system-auth中的密码质量模块配置示例
password    requisite     pam_pwquality.so try_first_pass local_users_only
    retry=3 authtok_type=
    minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
    difok=3 maxrepeat=3 maxsequence=3 enforce_for_root
四、CentOS 7中authconfig与authselect的关系

在CentOS 7及RHEL 7系列中,authconfig虽然仍然可以使用,但Red Hat官方已经将authselect作为新一代认证配置框架。authselect提供了更模块化的配置方式,支持创建自定义认证配置文件并在多个配置之间切换。不过,对于习惯使用authconfig的运维人员来说,它依然完全可用,只是需要注意一些参数映射关系。

如果你的环境是CentOS 7且希望使用更现代的方式,可以考虑迁移到authselect。但在实际生产环境中,大量存量服务器仍在使用authconfig,掌握它的配置方法依然是刚需。两种工具的底层操作对象都是PAM配置文件,所以核心的安全策略参数是相通的。

# CentOS 7中使用authselect查看当前配置
authselect current

# 使用authselect创建自定义配置并应用
authselect create-profile hardening -b sssd
authselect select hardening
五、密码策略的完整加固方案

仅靠authconfig设置基础参数还不够,一个完整的密码安全加固方案应该包含以下几个层面:

第一层是密码复杂度策略。通过authconfig设置最小长度12位以上,同时要求包含大写、小写、数字和特殊字符各至少一个。在pwquality.conf中还可以设置difok参数(新密码与旧密码至少有3个字符不同)和maxrepeat(不允许连续相同字符超过3个)。

第二层是密码生命周期管理。设置密码最长90天过期,最短1天(防止用户改完立刻改回去),过期前7天警告。对于特权账户,可以单独设置更短的过期周期,比如60天。

第三层是账户锁定策略。设置连续5次登录失败后锁定账户30分钟,这能有效防止暴力破解。在/etc/pam.d/system-auth中添加pam_faillock.so模块即可实现。

# /etc/pam.d/system-auth 中添加账户锁定配置
auth        required      pam_faillock.so preauth silent deny=5 unlock_time=1800
auth        sufficient    pam_unix.so nullok try_first_pass
auth        [default=die] pam_faillock.so authfail deny=5 unlock_time=1800
account     required      pam_faillock.so

第四层是root账户特殊保护。禁止root远程登录,要求所有管理员通过普通账户su或sudo提权,并对这些操作进行审计记录。这虽然不是authconfig直接管理的范围,但属于密码策略体系的重要组成部分。

六、验证配置是否生效的方法

配置完成后,必须验证策略是否真正生效。最直接的方法是尝试创建一个不符合策略的密码,看系统是否拒绝:

# 尝试用passwd命令设置一个简单密码
passwd testuser
# 输入 "123" 这样的简单密码,系统应该报错拒绝

另一个验证方法是查看当前生效的PAM配置:

# 查看密码质量模块的实际参数
grep pam_pwquality /etc/pam.d/system-auth

# 查看login.defs中的密码策略参数
grep -E "PASS_MIN|PASS_MAX|PASS_MIN_DAYS|PASS_WARN" /etc/login.defs

还可以使用pwscore命令来测试一个密码的复杂度得分,直观判断是否满足要求:

# 安装pwscore工具(如果未安装)
yum install -y cracklib-python

# 测试密码复杂度
echo "MyP@ssw0rd2024" | pwscore -
七、批量部署和配置管理建议

在多台服务器环境中,建议将authconfig命令封装到Shell脚本或Ansible Playbook中,实现批量统一配置。这样可以确保所有服务器的密码策略完全一致,避免人工操作带来的差异。

# 批量配置脚本示例
#!/bin/bash
authconfig --passminlen=12 --passmaxdays=90 --passmindays=1 \
  --passwarndays=7 --enablelock --lockattempts=5 --locktime=30 \
  --passrequires=ucredit --passrequires=lcredit \
  --passrequires=dcredit --passrequires=ocredit --update

# 验证配置
echo "=== 验证密码策略 ==="
grep minlen /etc/pam.d/system-auth
grep PASS_MAX_DAYS /etc/login.defs

同时,建议将配置文件纳入版本控制系统,定期审计变更记录。每次修改密码策略后,都应该记录变更原因、变更人和变更时间,满足等保和安全审计的合规要求。

八、常见问题和注意事项

在使用authconfig配置密码策略时,有几个常见坑需要避免。首先,不要同时手动编辑PAM文件和使用authconfig命令,两者会互相覆盖导致配置混乱。其次,修改密码策略后,已有用户的密码不会自动强制更改,需要通过chage命令单独设置过期策略让用户下次登录时修改。

另外,在CentOS 7最小化安装中,pwquality模块可能未安装,需要先执行yum install pam_pwquality或libpwquality。如果系统使用的是旧版cracklib,则参数名称和含义会有所不同,需要查阅对应的man手册。

最后提醒一点,密码策略不是越严格越好。过于复杂的策略会导致用户将密码写在便签上贴在显示器旁边,反而降低安全性。建议在安全和可用性之间找到平衡点,12位长度加四类字符要求是目前业界比较认可的标准。

九、总结

通过authconfig统一配置CentOS密码策略,是一种高效、可靠、可重复的安全加固手段。它将分散在多个配置文件中的密码参数整合到一个命令接口中,既降低了配置难度,又保证了策略的一致性。无论是单台服务器还是大规模集群,掌握authconfig的使用方法都是Linux安全运维的基本功。结合PAM模块、pwquality工具和账户锁定机制,可以构建一套完整的密码安全防护体系,有效抵御暴力破解和弱密码攻击风险。