在Linux中,/etc/shadow配置文件作为/etc/passwd配置文件密码部分的补充文件使用,因此被称为影子文件。
比较两个配置文件,可以看出/etc/shadow文件的权限要比/etc/passwd文件严格很多,因此,用户密码是较关键的信息被保存在/etc/shadow配置文件中。

  1. ## passwd和shadow两个配置文件的权限比较
  2. [root@localhost /]# ll /etc/passwd
  3. -rw-r--r--. 1 root root 2545 5 16 01:29 /etc/passwd
  4. [root@localhost /]# ll /etc/shadow
  5. ----------. 1 root root 1682 5 15 06:40 /etc/shadow

/etc/shadow

文件格式说明

配置文件中,每一行标识一个用户的关键信息,每一行有九个部分,每个部分通过“:”隔开,和/etc/passwd配置文件对应。 该配置文件需要重点保密,即使文件中的密码被加密过,也不应当随意传送。 实例:root:DzSmpvxb4iarthxasdf2oklmoxaowemcxow:18754:0:99999:7:3::

第一部分:用户名
第二部分:加密密码

加密算法为SHA512散列加密算法。不同的用户,即使密码相同,加密后的字符串也不一样。 如果该部分内容为“!!”或“”代表没有密码,不能登录。 绝大多数的系统用户,该部分的内容均为“!!”或“”。

第三部分:密码最后一次修改日期

使用1970年1月1日作为标准时间,每过一天该部分的时间戳数值加1。

第四部分:下一次允许修改密码的时间间隔

需要和第三部分做比较,即第三部分时间戳加第四部分的数值得出的新的时间戳,为下一次允许修改密码的最早时间。

第五部分:密码有效期数

需要和第三部分做比较,即第三部分时间戳加第五部分的数值得出的新的时间戳,为密码失效时间。

第六部分:密码失效前Num天发出警告

和第五部分做比较,即密码失效前Num天,每次用户登录,系统都会发出修改密码的警告。

第七部分:密码过期后的宽限天数

0 或 空:代表密码过期后立即失效 -1:代表密码永远不会失效

第八部分:账号失效时间

时间戳格式,账号一失效,前面的字段也就不做判断了

第九部分:暂无作用,保留

  1. ## 时间戳计算
  2. [root@localhost etc]# date -d "1970-01-01 18754 days" ## 显示1970-01-01过去18754天后时间
  3. 2021 05 07 星期五 00:00:00 CST
  4. ## 计算1970-01-01至2020-05-13过去了多少天
  5. [root@localhost etc]# echo $(($(date --date="2020/05/13" +%s)/86400+1))
  6. 18395