1. 介绍
今天登录自己的阿里云ECS服务器时(通过Xshell 利用用户名和密码登录的)。登录成功后,提示让我们修改root密码。
效果如下:
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user root.
New password:
翻译之后:
警告:您的密码已过期。
您必须立即更改密码,然后再次登录!
更改用户root的密码。
新密码:
需要我更新root密码。在更新时,不用输入老密码了,直接输入新密码。然后 Retype new password:(再次输入新密码)
当密码修改完毕后就会输出:
passwd: all authentication tokens updated successfully.
Connection closed.
Disconnected from remote host(新建会话) at 10:01:21.
Type `help' to learn how to use Xshell prompt.
[C:\~]$
密码修改完毕了,远程连接断开。我们需要重新开始链接。
这个时候,当我们再使用Xshell登录的时候,就会自动弹出密码输入界面(Xshell的会话属性界面)。在密码栏中输入我们的密码,就可以正确登录。
1.2 释疑
突然让我们改密码,是因为账户有风险被盗了么?在改密码的时候,其他人登录是不是也能直接改新密码?
当然不是这样,Linux系统自带的安全验证机制中,有一个密码过期管理功能。当该账户密码过期了。那么我们使用该账户密码进行登录时系统就会提示让我们改密码了。(PS:也就是我上面出现的突然让我们创建新密码的情况)。
当密码过期后,并不代表这个账户不用密码就能登录了。而是老密码登录之后系统强制跳转到新密码更新操作中来。
所以也不用担心密码过期时就怀疑可能被攻击了。
从密码角度而言,一段时间后更新一遍密码。可以提高密码的安全性。(PS:只要每次不是都用相同的几个字母数字来回来组合)
2. 密码管理
默认情况下,Linux的账户密码过期时间是90
天。从我们创建密码开始计算。90
天后就会过期。
然后在90-7=83
天前,就会在登录的时候进行提示。
如果账户状态为过期失效。那么在90天内还不进行修改,就会进入失效状态。无法登录。
密码失效也会无法登录,需要root账户进行修改后才能进行登录操作。
root账户也会有密码过期,但是账户不会失效。也就是说密码过期后我们仍然可以使用老密码登录,只是登录后需要修改密码。
2.1 chage 指令
PS: 你如果要使用该命令,请确保是root账户权限。普通用户没有操作Chage的权限。
查询当前账户的密码过期信息,例如我查下root用户的过期信息: chage -l [账户名]
[root@i0uh8g ~]# chage -l root
Last password change : Nov 09, 2022
Password expires : Feb 07, 2023
Password inactive : never
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 90
Number of days of warning before password expires : 7
上面的项目信息分别为:
Last password change:上次密码修改时间,例如我的是2022年11月9日。
Password expires:下次密码过期时间,例如 2023年2月07
Password inactive:密码失效 ,never (从不)。 因为我的账户是root所以不能失效
Account expires:账户过期,never(从不)。因为我的账户是root所以不能失效
Minimum number of days between password change:两次密码更改之间相距最小天数:7天
Maximum number of days between password change:两次密码更改之间相距最大天数;90天 (登录时出现密码失效,需要更新就是这个配置项决定的)
Number of days of warning before password expires:密码过期之前警告的天数。7天(也就是密码过期之前提前7天开始警告)
我们可以通过chage
查询。那么也可以通过该指令进行修改相关信息。相关参数:
-
-m
:两次密码更改之间相距最小天数,为零时代表任何时候都可以更改密码。(-m
是--mindays
的简写。两者等效)- 使用示例:
chage --mindays 5 root
或者使用chage -m 5 root
将最小间距改为5 。两者等效
- 使用示例:
-
-M
:两次密码更改之间相距最大天数。也就是最长有效间隔。(-m
是--maxdays
的简写,两者等效)- 使用示例:
chage -M 9999 root
设置为最长9999天过期。
- 使用示例:
-
-W
:用户密码到期前,提前收到警告信息的天数。(-W
是--warndays
的简写,两者等效)- 使用示例:
chage -W 6 root
将密码过期前的警告天数设置为7天。
- 使用示例:
-
-E
:帐号到期的日期。过了这天,此帐号将不可用。(-E
是--expiredate
的简写,两者等效)- 使用示例:
chage -E 2023-01-01 zinyan
设置账户zinyan 在2023年1月1日过期不可用。(PS:root账户不要设置为过期不可用)
- 使用示例:
-
-d
:修改账户的上次密码修改时间,例如已经过期了,我们可以通过修改该时间。让用户密码还处于有效期内。(-d
是--lastday
的简写,两者等效)- 使用示例:
chage -d 2022-11-11 zinyan
修改zinyan账户上一次密码修改时间为2022-11-11日
- 使用示例:
-
-I
:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。(-I
是--inactive
的简写,两者等效)- 使用示例:
chage -I 30 zinyan
如果账户密码过期30天后,还不进行密码修改。那么老密码将会失效,也就无法自己进行登录修改密码了。
- 使用示例:
-
-l
:例出当前账户的信息。可以用来确认指定账户的密码或帐号何时过期。(-l
是--list
的简写,两者等效)- 使用示例:
chage -l root
展示root的账户信息。
- 使用示例:
-
-R
:chroot到的目录,需要填写新的root目录地址。(-R
是--root
的简写,两者等效)- 使用示例:
chage -R /app/test zinyan
设置zinyan用户登录之后该账户的root根目录地址。 可以用来隔绝不同账户的访问范围,用来规范权限的。 更多的知识可以通过chroot命名进行了解。这里就不扩展了。(ps:关键我也并不是很懂这块)
- 使用示例:
-
-h
: 显示chage命令的一些指令介绍和帮助信息。(-h
是--help
的简写,两者等效)- 使用示例:
chage -h
显示帮助信息
- 使用示例:
密码过期和密码失效账户失效 是不一样的概念。
当密码过期的时候,我们可以用老密码进行继续登录,登录成功后会提示:
You must change your password now and login again!
我的秘密已经过期,会让我们输入新秘密进修过。
而如果账户或者密码失效,在登录的时候会提示:
Authentication failed.
账户过期,无法登录。
上面的示例,其实还可以拼接使用:
[root@i0uh8g ~]# chage -d 0 -m 7 -M 30 -W 5 -I 7 zinyan
2.2 login.defs配置文件
我们如果用户过多,不可能每次都通过chage
指令进行修改。可以通过login.defs
配置文件进行统一修改。
但是要注意:**已经创建的用户,不会再受该配置文件的影响。**要进行修改就只能通过chage指令进行修改了。
如果修改login.defs配置后,创建了一个新账户。然后再修改login.defs配置。后一次修改的效果不会在已创建的账户上生效哦。
该文件地址为: /etc/login.defs
通过vim 打开文件的效果如下:
[root@i0uh8g ~]# vim /etc/login.defs
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#
# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail
#MAIL_FILE .mail
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_MIN_LEN 5
PASS_WARN_AGE 7
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000
UID_MAX 60000
# System accounts
比较重要的的几个配置项:
PASS_MAX_DAYS 90 # 过期时间,默认是90, 我们可以调整为9999 表示密码永不过期
PASS_MIN_DAYS 7 # 修改间隔,默认是7
PASS_MIN_LEN 5 # 密码长度,默认是5
PASS_WARN_AGE 7 # 告警天数,默认是7,即过期前7天进行提醒
2.3 useradd配置文件
上面的示例中,我们可以发现login.defs中关于密码过期的选项不够全。没有chage的操作全。例如
密码到期日期,密码停滞时间等。这些信息在useradd文件中进行配置。该文件地址:/etc/default/useradd
。示例:
[root@i0uh8g ~]# vim /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
其中的INACTIVE
停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。-1就代表没有停滞时间,永远可用。
EXPIRE
帐号到期的日期。过了这天,此帐号将不可用。我们可以按照 YYYY-MM-DD 的格式进行配置。例如配置2023-11-11日所有账户过期。
问题和login.defs配置一样,只对之后创建的账户有效。已经创建的账户无效。需要通过chage指令进行修改。
3. 总结
到这里,关于Linux登录密码的过期逻辑和相关配置就总结的差不多了。
login.defs 和useradd配置文件,都是只针对之后创建的账户有效。而如果想让已有账户进行配置那么就需要chage命令进行修改了。
其次,chage命名。是需要权限才能进行操作的。不是所有账户都有该命令的权限。
评论区