在linux中,有一些针对用户管理的工具,今天我们要提及到的是Chage工具。二话不多说,先man再说:
#man chage //要养成man习惯!!
得出如下信息:
名称
chage - 更改用户密码过期信息大纲
chage [选项] 登录描述
The chage command changes the number of days between password changes
and the date of the last password change. This information is used by
the system to determine when a user must change his/her password.
由信息可以得知chage是针对用户密码进行的,但是也不全是针对密码,因为chage有个选项,是针对账户修改的:
注:只有 root 才可以使用 chage,但也有个例外情况,下面会讲到
-E:--expiredate 过期日期
该选项的功能是设定账户的可用时长,即在什么时间过期;
命令如下:
chage -E 2019-04-29 test //其中,test为用户,用户将在2019年4月29日失效(不可登录)
//注:必须为大写E
除了-E选项外,还有其他的选项,我们可以敲入命令:chage 查看,如下所示:
选项:
-d, --lastday
-h, --help
-I, --inactive
-l, --list
-m, --mindays
-M, --maxdays
-R, --root
-W, --warndays
以上大多数选项是针对用户密码进行设置的,下面逐一解释并进行举例说明:
-d:根据man出来的信息翻译为:最近日期,它的作用是将更改{用户最近一次修改密码}的日期;
eg:chage -d 2019-06-30 test //设置test用户最后一次修改密码的日期为2019年6月30日
注:chage -d 0 test //则代表该test用户需立即修改密码
可能有人会这么想,修改最近一次修改密码的日期有什么用呢?
个人觉得,该选项为其他选项的条件,其他所有选项成立的前提都是根据该选项(-d)。
下面逐一分析其他选项:
【-m】
-m --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
//该解释理解起来可能有点拗,实际上它作用很简单,就是以最近修改密码的日期为开始,到设定天数内,用户不能修改密码
eg:chage -m 5 test
//该命令表示为:从最近修改密码的日期开始的5天内,用户test不能再次修改密码,如果修改,会出现如下提示:
[test@testhost ~]$passwd
更改用户test的密码
为test更改STRESS密码
(当前)UNIX密码:
您需要等待更长时间以更改密码
【-M】
-M --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数”
//即自修改密码的日期开始,修改后密码的有效期限
eg:chage -M 8 test
//test用户自修改密码的日期开始,修改后的密码将在8天后过期;
//如修改密码的日期为:2019年6月30日。修改过后的密码将会在2019年7月8日过期
注:这里有个概念:密码过期;先记着,因为跟下面所讲的选项有关,所以等下一起解释:
【-I】
-I --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
//该选项为大写的i,它的作用是:当密码过期状态超过所设定的时间后,密码会变为失效状态
eg:chage -I 3 test
//用户test从密码过期开始算起,3天不修改密码则密码失效,
//如密码在2019年7月8日过期,如果不进行修改,则会在2019年7月11日失效
这里出现了另外个概念:密码失效;
它跟密码过期有什么不一样呢?
密码过期:设置的密码经过一段的时间后,系统会认为该密码不安全,于是将密码设置为过期状态,用户登录的时候,系统会提示用户进行密码修改;如下所示:
$ssh test@192.168.2.5 //ssh连接
test@192.168.2.5's password:
You are required to change your password immediately (password aged)
Last login: Sun Jun 30 16:20:31 2019WARNING: Your password has expired. //你的密码已过期
You must change your password now and login again!
Changing password for user test.
Changing password for test.
密码失效:经过一段时间,如果用户没有进行密码修改,则系统会将该密码设置为失效状态(此时用户不可通过该密码进行登录)
如下所示:
$ ssh test@192.168.2.5
test@192.168.2.5's password:
Permission denied, please try again. //第一次输错密码后,提示错误;
test@192.168.2.5's password:
Your account has expired; please contact your system administrator //第二次输对后,提示账户过期
Authentication failed.
注:以上两个解释中的“经过一段时间”,均可通过选项设置;
【-W】
-W --warndays 警告天数 将过期警告天数设为“警告天数”
//当所设置的密码快要接近过期时间后,系统会对用户进行警告,如前面例子所示:
eg:chage -W 8 test
//用户test的密码快要过期的的8天内,系统会持续对用户进行警告,
//如用户密码在2019-06-30过期,则在2019-06-22日后,系统会对用户test提出警告
【-R】
-R --root CHROOT_DIR //chroot 到的目录
//这个涉及到chroot的概念,不进行解释,知道是这个就好!
【-l】
-l, --list 显示帐户年龄信息。 //这里应该为日期信息;
//小写的L,显示出账户的日期信息;
eg:chage -l test
最近一次密码修改时间 :6月 30, 2019
密码过期时间 :7月 08, 2019
密码失效时间 :7月 11, 2019
帐户过期时间 :4月 26, 2019
两次改变密码之间相距的最小天数 :5
两次改变密码之间相距的最大天数 :8
在密码过期之前警告的天数 :8
注:以上信息,就是在这次所讲指令输入完成后的最终结果;
【-h】
-h, --help 显示此帮助信息
eg:chage -h
用法:chage [选项] 登录
选项:
-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期”
-h, --help 显示此帮助信息并推出
-I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
-l, --list 显示帐户年龄信息
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
-M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数”
-R, --root CHROOT_DIR chroot 到的目录
-W, --warndays 警告天数 将过期警告天数设为“警告天数”
除了通过chage修改外,也可以通过修改文件:/etc/login.defs来修改m、M、W选项的内容,但是修改后需要重启系统,相比之下,没有用chage方便。
以上,总结为:
1.chage工具是更改用户密码过期信息,它的命令格式为:chage [选项] 登录用户
2.选项分为三种类型:一种是针对密码的设定选项(-i、-d、-m、-M、W、-R),一种是命令显示选项(-h,-l),一种是针对账户选项(-E);(知识结构,方便记忆)
注:命令显示选项不需要root用户也可以执行;
3.两种修改密码设定的方式;
拓展部分:
当我们输入命令:
#cat /etc/shadow //
test:!!:18077:5:8:8:3:18012:
第一个字段为:用户名;
第二个字段为:加密的密码
第三个字段为:密码最后一次修改的时间 (chage -d)
第四个字段为:密码最小修改间隔时间 (chage -m)
第五个字段为:密码的有效期 (chage -M)
第六个字段为:密码需要变更前的警告天数 (chage -W)
第七个字段为:密码过期后的宽限天数 (chage -I)
第八个字段为:账号失效时间 (chage -E)
第九个字段为:保留
注:
1.第三个字段中,显示18077的原因是:Linux 计算日期的起始时间是以 1970 年 1 月 1 日开始,不断累加得到的时间, 到 1971 年 1 月 1 日,则为 366 天。这里显示 18077 天,也就是说,此 root 账号在 1970 年 1 月 1 日之后的第 18077 天修改的 root 用户密码。通过命令计算,结果如下所示:
[root@test ~]# date -u -d "1970-01-01 UTC $((18077 * 86400 )) seconds"
2019年 06月 30日 星期日 00:00:00 UTC
第八个字段运算同理
2.对于普通账户的密码遗失,可以通过 root 账户解决,它会重新给你配置好指定账户的密码,而不需知道你原有的密码(利用 root 的身份使用 passwd 命令即可)。
如果 root 账号的密码遗失,则需要重新启动进入单用户模式,系统会提供 root 权限的 bash 接口,此时可以用 passwd 命令修改账户密码;也可以通过挂载根目录,修改 /etc/shadow,将账户的 root 密码清空的方法,此方式可使用 root 无法密码即可登陆,建议登陆后使用 passwd 命令配置 root 密码。