在Linux系统上可以使用几种不同的身份验证方案。最常用和标准的方案是对 /etc/passwd 和 /etc/shadow 文件执行认证。

/etc/shadow 是一个文本文件,其中包含系统用户密码的信息。它由 root 用户和 shadow 组拥有,并且具有 640 权限

/etc/shadow 格式

/etc/shadow 文件每行包含一个条目,每个条目代表一个用户帐户。您可以使用文本编辑器cat 命令查看文件的内容。

通常,第一行描述 root 用户,然后是系统用户和普通用户帐户。 每当创建新的用新条目将追加到文件末尾。

sudo cat /etc/shadow
mark:$6$.n.:17736:0:99999:7:::
[--] [----] [---] - [---] ----
|      |      |   |   |   |||+-----------> 9. Unused
|      |      |   |   |   ||+------------> 8. Expiration date
|      |      |   |   |   |+-------------> 7. Inactivity period
|      |      |   |   |   +--------------> 6. Warning period
|      |      |   |   +------------------> 5. Maximum password age
|      |      |   +----------------------> 4. Minimum password age
|      |      +--------------------------> 3. Last password change
|      +---------------------------------> 2. Encrypted Password
+----------------------------------------> 1. Username

/etc/shadow 文件的每一行包含九个冒号分隔的字段,

Username 登录系统时输入的字符串,系统上存在的用户帐户。

Encrypted Password 加密密码,密码使用 $type$salt$hashed 格式。 $type 是密码哈希算法。在过去的 Linux 系统,用户的加密密码存储在 /etc/passwd 文件。

可能的值包括 $1$ – MD5,$2a$ – salt,$2y$ – Eksblowfish,$5$ – SHA-256,$6$ – SHA-512。

如果密码字段包含星号 * 或感叹号 ! ,用户将无法使用密码身份验证登录到系统。但仍然允许使用其他登录方法,例如基于密钥的身份验证切换到该用户

Last password change 这是上次更改密码的日期。从1970年1月1日(纪元日期)开始计算天数。

Minimum password age 修改用户密码之前必须经过的天数。通常将其设置为零,这意味着没有最小密码年龄期限。

Maximum password age 多少天后必须更改用户密码。默认情况下,此数字设置为 99999 。

Warning period 警告周期,也就是闲置期。在密码过期之前,警告用户必须修改密码。用户密码过期后,禁用用户帐户之前的天数。通常,此字段为空。

Expiration date 到期日期。帐户被禁用的日期。

Unused 未使用,该字段被忽略,它保留供将来使用。

除非您知道自己在做什么,否则不要手动编辑 /etc/shadow 文件。始终使用专门为此目的设计的命令。

例如,要修改用户密码,请使用 passwd 命令,要更改密码时效信息,请使用 chage 命令。

实例详解

myfreax:$6$zHvrJMa5Y690smbQ$z5zdL...:18009:0:120:7:14::
  • 条目包含用户 myfreax 密码的信息。
  • 密码已使用SHA-512加密,为了更好的可读性,密码已被截断。
  • 密码最后一次更改是在2019年4月23日 18009。
  • 没有密码使用期限的下限。
  • 必须至少每120天更改一次密码。
  • 用户将在密码到期日期的前7天收到警告消息。
  • 如果用户在密码过期14天后仍未尝试登录系统,则该帐户将被禁用。
  • 没有帐户有效期。

结论

/etc/shadow 文件保存已加密的用户密码以及其他与密码相关的信息的记录。如果您有任何问题或反馈,请随时发表评论。