您可能知道在Linux系统上密码是散列的,并且散列存储在受限制的访问中/etc/shadow文件。但是您知道您还可以确定所使用的哈希方法,并从该文件报告密码最后更改的天数吗?
来查看用户记录/etc/shadow文件,运行如下命令:
$ sudo grep nemo /etc/shadow
你应该会看到这样一行:
尼莫:6美元FVYIIgcEcObSsUcf FsSBlV9soVt美元。Owbd4xnvhlZzjx73ZBQQBT0WM
yah6qcdnH91tBf9C4EaYbRtr7jKGETP / TwBNjyrDFqhvK0NV1:18698:7:90:7
:::
不管这一行有多长,它都很容易解析。这个以冒号分隔的文件存储行的前两个字段:
- 用户名(nemo)
- 密码哈希(包括使用的哈希方法),格式为$id$salt$哈希
这个字符串的$6$部分表示所使用的哈希算法。
- $ 1 $意味着MD5
- 2美元意味着河豚
- 2 y美元意味着河豚
- 5美元意味着sha - 256
- 6美元意味着sha - 512
尼莫的主要部分/etc/shadow文件条目表示密码散列。下面的数字字段(18698:7:90:7:::)表示:
- 上次修改密码的日期,格式为“自纪元以来的天数”(18698)
- 密码修改间隔的最短天数(7天)
- 密码修改间隔的最长天数(90)
- 提前显示密码到期消息的天数(7)
- 密码到期后禁用帐户的天数(上面没有设置)
- 帐户到期日期(未在上面设置)
- 预留字段(上面没有设置)
要在“自纪元以来的天数”形式中查找今天的日期,可以运行如下别名所示的命令,该命令将“自Unix纪元开始的秒”除以86,400(一天中的秒数)。
别名epoch_date美元= " echo $(((日期+ % s) / 86400美元))”epoch_date 18855美元
的数字字段(18698)中显示的第一个字段/etc/shadow文件并确定密码是在几天前更改的。在这个例子中,是157天前。
$ expr 18855 - 18698
属性还可以确定上次修改密码的日期恰克命令从/etc/shadow将该日期和其他密码统计数据归档并报告。
$ sudo恰克- l nemo最后密码更改:3月12日,2021密码过期:2022密码无效:3月12日,从未账户到期:从来没有密码更改之间的最小数量的天:7密码更改之间的最大天数:90天密码到期之前的警告:7
总结
的/etc/shadow文件存储了Linux系统上许多重要的密码设置,包括用于创建密码哈希的算法、密码最后一集和过期日期。