0x00 前言
Linux系统下,用户的密码会被加密保存在文件/etc/shadow
中,本文尝试对这一部分内容进行整理,介绍相关基础知识,测试常用方法,帮助大家对此有更直观的认识。
0x01 Linux下用户密码的保存格式
Linux密码信息保存在两个文件中,分别为:/etc/passwd
和/etc/shadow
/etc/passwd:
普通用户权限能够查看
保存用户信息,每一行代表一个用户,每一行通过冒号:
分为七个部分
- 用户名
- 密码,x表示密码保存在
/etc/shadow
- UID,0代表root
- GID,表示所在组
- 描述信息,依次为Full Name、Room Number、Work Phone、Home Phone和Other
- 用户主目录
- 默认shell类型
eg.
test2:x:1001:1001:test2,11111,111111-11,222222-22,test:/home/test2:/bin/bash
- 用户名:test2
- 密码保存在
/etc/shadow
- UID为1001
- GID为1001
- 描述信息: Full Name []: test2 Room Number []: 11111 Work Phone []: 111111-11 Home Phone []: 222222-22 Other []: test
- 用户主目录为
/home/test2
- 默认shell为
/bin/bash
/etc/shadow:
只有root用户权限能够查看
保存加密后的密码和用户的相关密码信息,每一行代表一个用户,每一行通过冒号:
分为九个部分
- 用户名
- 加密后的密码
- 上次修改密码的时间(从1970.1.1开始的总天数)
- 两次修改密码间隔的最少天数,如果为0,则没有限制
- 两次修改密码间隔最多的天数,表示该用户的密码会在多少天后过期,如果为99999则没有限制
- 提前多少天警告用户密码将过期
- 在密码过期之后多少天禁用此用户
- 用户过期日期(从1970.1.1开始的总天数),如果为0,则该用户永久可用
- 保留
注:
参数说明可通过man shadow
获取
eg.
test2:$6$C/vGzhVe$aKK6QGdhzTmYyxp8.E68gCBkPhlWQ4W7/OpCFQYV.qsCtKaV00bToWh286yy73jedg6i0qSlZkZqQy.wmiUdj0:17470:0:99999:7:::
- 用户名:test2
- 加密后的密码:
$6$C/vGzhVe$aKK6QGdhzTmYyxp8.E68gCBkPhlWQ4W7/OpCFQYV.qsCtKaV00bToWh286yy73jedg6i0qSlZkZqQy.wmiUdj0
- 上次修改密码的时间(从1970.1.1开始的总天数为17470)
- 两次修改密码间隔:没有限制
- 两次修改密码间隔最多的天数:没有限制
- 提前7天警告用户密码将过期
- 该用户永久可用
由示例可知,加密的密码具有固定格式:
$id$salt$encrypted
id表示加密算法,1代表MD5
,5代表SHA-256
,6代表SHA-512
salt表示密码学中的Salt,系统随机生成 encrypted表示密码的hash。