linux的root密码存在于“/etc/shadow”这个文件中,不过要有root权限才能在linux下看到“/etc/shadow”这个文件。我用自己的虚拟机做一个演示,如下图所示:
上面这个图中,我没有设置root的密码,可以看到root那一行最开始有个“!”。接着看下面的图,已经设置了root密码:
在这里,主要是对shadow密码存储结构做一些介绍,参考了一下网络上的相关内容,自己总结一下。
密文字符串格式为:$id$salt$encrypted,通过$来分割,其中$id用来指定使用的算法,如下表格所示:
ID | Method |
1 | MD5 |
2a |
Blowfish(not in mainline glibc;added in some Linux distribution) |
5 |
SHA-256(since glibc 2.7) |
6 |
SHA-512(since glibc 2.7) |
从我上面的截图可以看到,密文采用的是SHA-512算法。$salt是一个最多16个字符的随机生成的字符串,用来增加破解难度。$encrypted就是通过加密算法和salt算出来的密文。
接下来,描述一下这个密码存储的结构。
- 账户名:账户名与/etc/passwd里面的账户名是一一对应的关系。
- 密码:这里可以看到3类,分别是奇奇怪怪的字符串、*和!!其中,奇奇怪怪的字符串就是加密过的密码文件。星号代表帐号被锁定,双叹号表示这个密码已经过期了。奇奇怪怪的字符串是以$6$开头的,表明是用SHA-512加密的,$1$ 表明是用MD5加密的、$2$ 是用Blowfish加密的、$5$是用 SHA-256加密的。
- 修改日期:这个是表明上一次修改密码的日期与1970-1-1相距的天数密码不可改的天数:假如这个数字是8,则8天内不可改密码,如果是0,则随时可以改。
- 密码需要修改的期限:如果是99999则永远不用改。如果是其其他数字比如12345,那么必须在距离1970-1-1的12345天内修改密码,否则密码失效。
- 修改期限前N天发出警告:比如你在第五条规定今年6月20号规定密码必须被修改,系统会从距离6-20号的N天前向对应的用户发出警告。
- 密码过期的宽限:假设这个数字被设定为M,那么帐号过期的M天内修改密码是可以修改的,改了之后账户可以继续使用。
- 帐号失效日期:假设这个日期为X,与第三条一样,X表示的日期依然是1970-1-1相距的天数,过了X之后,帐号失效。
- 保留:被保留项,暂时还没有被用上。
参考文章:http://www.yucoat.com/linux_opensource/linux_etc_shadow.html
时间: 2024-09-28 23:04:11