Linux 系统账号安全策略设计

11次阅读

chage -d 0 可强制用户首次登录修改密码,需在账号创建后、交付前执行;passwd -l安全禁用账号但不删数据;/etc/login.defs仅影响新建用户;ssh需配置PAM支持shadow验证。

Linux 系统账号安全策略设计

如何用 chage 强制用户首次登录修改密码

新创建的账号默认不强制改密,攻击者若截获初始密码即可长期使用。chage 是最直接的控制手段,但关键不在执行命令,而在时机和参数组合。

必须在用户创建后、交付前执行,否则无效:

  • chage -d 0 :将密码最后修改日期设为 0(即 unix epoch),系统检测到“已过期”会强制下次登录时重设
  • 不能只设 -M 90(最大有效期)或 -W 7(警告天数),这些不触发首次强制改密
  • 若用户已登录过一次,-d 0 仍有效,但需确保其 shell 未被禁用且 /etc/shadow 中密码字段非 *!

为什么 passwd -l 比直接删用户更安全

临时禁用账号时,删用户会丢失主目录、邮件队列、cron 任务等上下文;而 passwd -l 只锁密码字段,保留全部归属关系。

它本质是往 /etc/shadow 密码字段前加 ! 前缀,使哈希失效。但要注意:

  • 锁定后,该用户仍可通过 SSH key 登录(如果配置了 PubkeyAuthentication yes 且 key 未被移除)
  • 若同时使用 usermod -s /sbin/nologin ,可双重阻断密码+shell,但需确认服务账户是否依赖此 shell
  • 解锁必须用 passwd -u,而非简单编辑 /etc/shadow——手动删 ! 容易留空格或换行符,导致解析失败

/etc/login.defs 中哪些参数实际生效

这个文件常被误认为“全局开关”,其实多数参数仅对 useradd 新建用户起作用,已有用户不受影响。

真正需要检查并同步应用的只有:

  • PASS_MAX_DAYS 90:影响新建用户,老用户需配合 chage -M 90 单独设置
  • ENCRYPT_METHOD SHA512:决定新密码哈希算法,但不会自动重算旧密码,旧密码仍保持原算法(如 MD5)直到用户改密
  • FaiL_DELAY 4FAILLOG_ENAB yes:控制暴力尝试响应延迟和日志记录,重启 auth.log 即生效,无需用户级操作

注意:UID_MIN/GID_MIN 等数值范围参数,若与现有用户冲突,useradd 会报错而非跳过,必须提前清理 ID 重叠。

SSH 登录绕过密码策略的常见漏洞点

即使 chagepasswd -l 配置无误,SSH 仍可能成为旁路。根本问题在于认证链分层,每层策略要独立验证。

必须检查三项:

  • 确认 /etc/ssh/sshd_configPasswordAuthentication no 已启用(禁用密码),且 PubkeyAuthentication yes 同时存在——否则密钥登录也会被拒
  • 用户 ~/.ssh/authorized_keys 文件权限必须是 600,目录 700,否则 OpenSSH 直接忽略该密钥
  • 若启用 AllowGroupsDenyUsers,需确认目标用户未被意外排除,这类配置优先级高于 PAM 密码策略

最易忽略的是:sshd 默认不读取 /etc/shadow 过期状态,必须在 /etc/pam.d/sshd 中明确包含 pam_faildelay.sopam_unix.soshadow 选项,否则 chage 设置对 SSH 无效。

text=ZqhQzanResources