Linux如何设置密码过期策略_Linux密码过期策略设置教程

落晨小哥_5941

落晨小哥_5941

2026-04-15

281人浏览

原创

linux如何设置密码过期策略_linux密码过期策略设置教程

chage 是设置单个用户密码过期策略的核心命令,但直接敲 chage -M 90 username 并不能让所有新用户自动继承该策略——它只改当前用户。真正起效的,是 `/etc/login.defs` 配置 + chage 补漏 + PAM 模块协同。

如何用 chage 快速修改已有用户的密码有效期

这是最常用、最直接的操作,适合运维人员临时调整或批量脚本处理。

  • chage -M 90 -m 7 -W 14 username:设密码最多用 90 天、最少隔 7 天才能改、到期前 14 天开始警告
  • chage -d 0 username:强制用户下次登录必须改密码(last password change 被设为 epoch 时间 0)
  • chage -E 2026-12-31 username:账户级硬截止(注意不是密码过期,是整个账号禁用)
  • 执行后务必用 chage -l username 核对输出,重点看 Password expiresAccount expires 两行是否符合预期
  • 常见错误:把 -M 设成 0 或负数,会导致密码立即过期;设成 9999910000 才算“永不过期”,-1-M 上无效

为什么改了 /etc/login.defs 新建用户还是不生效

因为部分发行版(如较新 Ubuntu)默认不读取 PASS_MAX_DAYS 等字段,而是依赖 PAM 的 pam_pwquality.sopam_unix.so 行为。

onewo-rtlinux
onewo-rtlinux

Linux 实时编程助手。生成、审查并修改用于周期性控制任务和中断驱动程序的 C 代码。强制实施实时调度策略。

下载
  • 先确认创建用户时是否调用了 useradd:只有 useradd(非 adduser 交互脚本)会严格读取 /etc/login.defs
  • 检查 /etc/login.defs 中的 PASS_MAX_DAYSPASS_MIN_DAYSPASS_WARN_AGE 是否已取消注释并设值(如 PASS_MAX_DAYS 90
  • 若用 adduser,它可能绕过 /etc/login.defs,此时需在 /etc/adduser.conf 中同步配置 ADD_USER_CMD 或直接改用 useradd
  • 新建用户后立刻运行 chage -l newuser,如果 Maximum number of days between password change 显示 99999,说明 /etc/login.defs 没被读取

密码过期但用户无法改密码?检查 PAM account 堆栈

即使 chage 设置正确,用户登录后仍提示 Your password has expired. You must change it now. 却卡在无 TTY 环境(如 SSH 非交互式连接、cron 任务),本质是 PAM account 类型模块未启用过期检查。

  • 打开 /etc/pam.d/sshd(或 /etc/pam.d/login),确认存在这一行:account required pam_unix.so
  • 缺这行会导致系统跳过 /etc/shadow 中的过期字段校验,用户永远收不到过期提示,或提示了却无法触发改密流程
  • 某些最小化安装(如 Alpine、CoreOS)默认不启用该模块,需手动添加
  • 验证方式:用普通用户 SSH 登录一个已过期密码的账号,如果直接拒绝登录(而非弹出改密提示),大概率是 account 模块缺失

强制首次登录改密后,密码策略为何没生效

执行 passwd --expire usernamechage -d 0 username 后,用户确实会被迫改密,但新密码仍可能绕过复杂度要求——问题出在 PAM password 堆栈顺序和模块类型上。

  • pam_pwquality.so 必须放在 pam_unix.so 之前,否则 pam_unix.so 先写入密码,pam_pwquality.so 的校验就失效了
  • /etc/pam.d/common-password(Debian/Ubuntu)或 /etc/pam.d/system-auth(RHEL/CentOS)中,确保类似这行在靠前位置:password requisite pam_pwquality.so minlen=10 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
  • 避免混用 pam_cracklib.sopam_pwquality.so,二者功能重叠且冲突,现代系统推荐只用后者
  • 改完配置后无需重启服务,PAM 规则即时生效;但已启动的 shell 进程不会重新加载,需新开终端测试
chage 参数本身简单,但真正落地时,/etc/login.defs 决定默认值、PAM account 模块决定是否检查、PAM password 模块决定是否强制复杂度——三者缺一不可。最容易被忽略的是 PAM account 行的缺失,它会让所有过期策略变成“纸上谈兵”。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

9044

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

5501

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2015

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3408

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4074

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3191

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

4517

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

3522

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

11582

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

CLion 远程开发实战
CLion 远程开发实战

共0课时 | 0人学习