Linux /etc/shadow(影子文件)内容解析(超详细)

< 上一页Linux /etc/passwd Linux /etc/group下一页 >

pk10开户推出辅导班啦,包括「C语言辅导班、C++辅导班、算法/数据结构辅导班」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践 + 永久学习。QQ在线,随时响应!

这个文件中保存着用户的实际加密密码和密码有效期等参数。我们已经知道这个文件的权限是 000,所以保存的实际加密密码除 root 用户外,其他用户是不能查看的,这样做有效地保证了密码的安全。如果这个文件的权限发生了改变,则需要注意是否是恶意攻击。

我们打开这个文件看看,例如:

[root@localhost ~]#vi /etc/shadow
root: $6$9w5Td6lg
$bgpsy3olsq9WwWvS5Sst2W3ZiJpuCGDY.4w4MRk3ob/i85fl38RH15wzVoom ff9isV1 PzdcXmixzhnMVhMxbvO:15775:0:99999:7:::
bin:*:15513:0:99999:7:::
daemon:*:15513:0:99999:7:::
…省略部分输出…

这个文件的每行代表一个用户,同样使用":"作为分隔符,划分为 9 个字段。我们以 root 行为例,这 9 个字段的作用如下。

用户名称

第一个字段中保存的是用户名称,和 /etc/passwd 文件的用户名称相对应。

密码

第二个字段中保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,而原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。注意:这串密码产生的乱码不能手工修改,如果手工修改,就会算不出原密码,导致密码失效。

当然,我们也可以在密码前人为地加入"!"或"*"改变加密值让密码暂时失效,使这个用户无法登陆,达到暂时禁止用户登录的效果。

注意,所有伪用户的密码都是"!!"或"*",代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是"!!",代表这个用户没有密码,不能登录。

密码最后一次修改曰期

第三个字段是密码的修改日期,可是这里怎么是 15775 啊?代表什么意思呢?其实 Linux 更加习惯使用时间戳代表时间,也就是说,以 1970 年 1 日 1 日作为标准时间,每过去一天时间戳加 1,那么 366 代表的就是 1971 年 1 月 1 日。

我们这里的时间戳是 15775,也就是说,是在 1970 年 1 月 1 日之后的第 15775 天修改的 root 用户密码。好隐晦的表示啊!那么,到底 15775 的时间戳代表的是哪一天呢?我们可以使用如下命令进行换算:

[root@localhost ~]# date -d "1970-01-01 15775 days"
2013年03月11日 星期一 00:00:00 CST

用以上命令可以把时间戳换算为我们习惯的系统日期,那么我们可以把系统日期换算为时间戳吗?当然可以,命令如下:

[root@localhost ~]# echo $(($(date--date="2013/03/11" +%s)/86400+1))
15775

这里的 2013/03/11 是你要计算的曰期,+%s 是把当前日期换算成自 1970 年 1 月 1 日以来的总秒数,除以 86400(每天的秒数),最后加上 1 补齐 1970 年 1 月 1 日当天就能计算出时间戳了。其实不需要理解这里的命令,只要知道时间戳的概念就好,如果需要换算就套用命令。

密码的两次修改间隔时间(和第三个字段相比)

第四个字段是密码的两次修改间隔时间。这个字段要和第三个字段相比,也就是说密码被修改后多久不能再修改密码。如果是 0,则密码可以随时修改。如果是 10,则代表密码修改后 10 天之内不能再次修改这个密码。

密码的有效期(和第三个字段相比)

第五个字段是密码的有效期。这个字段也要和第三个字段相比,也就是说密码被修改后可以生效多少天。默认值 99999,也就是 27 年,大家可以认为永久生效。如果改为 90,那么密码被修改 90 天之后就必须再次修改,否则该用户就不能登录了。我们在管理服务器的时候可以通过这个字段强制用户定期修改密码。

密码修改到期前的警告天数(和第五个字段相比)

第六个字段是密码修改到期前的警告天数。这个字段要和第五个字段相比,就是密码到期前需提前几天修改。默认值是7,也就是说从密码到期前的 7 天开始,每次登录系统都会警告该用户修改密码。

密码过期后的宽限天数(和第五个字段相比)

第七个字段是密码过期后的宽限天数。也就是密码过期后,用户如果还是没有修改密码,那么在宽限天数内用户还是可以登录系统的;如果过了宽限天数,那么用户就无法再使用该密码登录了。天数如果是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。

账号失效时间

第八个字段是用法的账号失效时间。这里同样要写时间戳,也就是用 1970 年 1 日 1 日进行时间换算。如果超过了失效时间,就算密码没有过期,用户也就失效,无法使用了。

保留

这个字段目前没有使用。

小提示:在 Linux 中,如果遗忘了密码,则可以启动进入单用户模式。这时既可以删除 /etc/passwd 文件中的密码标识字段,也可以删除 /etc/shadow 文件中的密码标识字段,都可以达到清空密码的目的。
< 上一页Linux /etc/passwd Linux /etc/group下一页 >