passwd 和 shadow 文件详解

passwd

1
2
3
4
5
6
7
8
9
10
11
12
# /etc/passwd
# man 5 passwd

hzz:x:1000:1000::/home/hzz:/bin/bash
| | | | | | |
|---|---|---|---|---|-------|-------- 用户名
|---|---|---|---|-------|-------- 密码(x为占位符,具体密码存储于shadow)
|---|---|---|-------|-------- UID(用户ID)
|---|---|-------|-------- GID(用户所属主组ID)
|---|-------|-------- GECOS(用户注释信息)
|-------|-------- 用户主目录
|-------- 默认shell

shadow

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# /etc/shadow
# man 5 shadow

# 整体使用:分隔
hzz:(加密区):17236:0:99999:7:::
# 用户名:加密了的密码:最近一次更改密码的日期(从1970/1/1到当前密码修改日期的天数):密码的最小使用期限:最大密码使用期限:密码警告时间段:密码禁用期:账户过期日期:保留字段

# 加密区

# 加密区用$分隔
$6$DNyFSKo1$P8daYpB748rXd9oaqND8dTC85mUYCOlLarKV6NyGTujMHGRjeaHrO6HeTdgOFx0zUIOxWtik5rucRHTOk0hYx1
# !! # 若在$前面出现!!,则表示禁止登录。
# 6 # sha512加密。
# DNyFSKo1 # 为了使相同的密码加密不同而加的随机数,每个账号都不同。
# P8daYpB... # 密码加入随机数后重新加密而成的密文。

加密机制

Linux的用户密码加密使用单向加密,即:

1
密文=用户密码+随机数+sha256

解密方式为:

1
输入的密码+随机数+sha256=密文

由于有随机数的存在,即使两个用户的密码相同,加密后的密文也是不同的。