侧边栏壁纸
  • 累计撰写 372 篇文章
  • 累计创建 60 个标签
  • 累计收到 109 条评论

目 录CONTENT

文章目录

一文了解 Linux 登录密码过期管理和相关配置

Z同学
2022-11-09 / 0 评论 / 2 点赞 / 70 阅读 / 2,829 字
温馨提示:
本文最后更新于 2022-11-09,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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命名。是需要权限才能进行操作的。不是所有账户都有该命令的权限。

2

评论区