linux用户密码安全需全局与单用户策略协同:通过/etc/login.defs设新建用户默认有效期(如pass_max_days 90)、最小间隔(pass_min_days 7)和警告期(pass_warn_age 14),再用chage命令为存量用户精准配置;同时启用pam_pwquality.so强制复杂度(minlen=12、四类字符各至少1个、difok=4、reject_username)及pam_pwhistory.so禁止重用最近5次密码,确保策略全覆盖、即时生效。

Linux 用户账户安全的核心在于“密码强+换得勤+权限小”。只设复杂密码不强制更换,旧密码泄露后风险长期存在;只定更换周期不限制强度,用户可能设成 1234567890 也能过关。二者必须配合落地,且策略要能管住新老用户、兼顾系统与人为操作。
全局默认策略:管住所有新建用户
/etc/login.defs 是策略起点,它只影响创建时的新用户,但奠定了整个系统的基线安全水位:
- PASS_MAX_DAYS 90:新用户密码最多用90天,超期无法登录(建议值,非绝对上限)
- PASS_MIN_DAYS 7:两次改密至少间隔7天,防用户“改完立刻改回”绕过策略
- PASS_WARN_AGE 14:到期前14天起,每次登录都提示“Your password will expire in X days”
- PASS_MIN_LEN 12:密码最短12位(注意:该参数仅作参考,实际强度由PAM模块 enforce)
修改后无需重启,新建用户自动继承。已有用户不受影响,需单独处理。
单个用户精准控制:覆盖存量账户
用 chage 命令为任意用户设置生命周期,灵活且即时生效:
-
chage -M 90 username:设密码90天后过期(覆盖 /etc/login.defs 的 PASS_MAX_DAYS) -
chage -m 7 username:设最小修改间隔为7天 -
chage -W 14 username:设提前14天开始警告 -
chage -d 0 username:强制用户下次登录必须改密(将“上次修改时间”置为0) -
chage -l username:查看当前所有设置,确认是否生效
对已存在的关键账号(如运维、数据库用户),逐个执行以上命令是必要动作,不能依赖全局配置。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
密码复杂度与历史约束:堵住弱密码漏洞
仅设有效期不够——用户可能设 Password123! 用满90天再换成 Password123@。必须用 PAM 模块硬性拦截:
- 编辑
/etc/pam.d/common-password(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS) - 确保含这一行:
password requisite pam_pwquality.so retry=3 minlen=12 difok=4 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 reject_username enforce_for_root - 同时启用历史记录:
password [success=1 default=ignore] pam_pwhistory.so use_authtok remember=5,禁止重用最近5次密码
保存后立即生效,下次用户运行 passwd 时即受约束。root 用户也受控(enforce_for_root 参数保证)。
配套加固动作:让策略真正落地
策略不是写进文件就完事,还需日常闭环管理:
- 定期清理无用账号:
passwd -l username锁定,userdel -r username彻底删除 - 检查 UID 0 账户:
awk -F: '($3 == 0) {print $1}' /etc/passwd,确保只有 root - 批量验证状态:
for u in $(cut -d: -f1 /etc/passwd); do chage -l "$u" 2>/dev/null | grep -E "(Password|Account)"; done - SSH 登录禁用 root 直连,强制使用普通用户 + sudo,避免单点高危入口
密码策略不是一次配置终身无忧,而是需要定期审查、适时调整的持续过程。关键不在参数多严,而在每项都真实生效、每个账号都被覆盖、每次改密都合规校验。










