作用
用来保存用户密码的相关信息。
范例
root:$6$U9Im4/RKkksdf...7oV3g5S2DVdsjfPGf1:18306:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
分析
以“:”分隔,共有九个字段。
【用户名;密码;最近修改密码的日期;密码不可被修改的天数;密码需要重新修改的天数;密码需要修改期限前的警告天数;密码过期后账号宽限时间;账号失效日期;保留】
密码
被编码的密码。通过一些加密算法得出。
若没有设置密码或密码过期,则会显示为”!!”。若是不可登录账号,则会显示“*”。
星号代表帐号被锁定,双叹号表示这个密码已经过期了。
密码的格式为:$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) |
$salt
是一个最多16个字符的随机生成的字符串,用来增加破解难度。
$encrypted
就是通过加密算法和salt算出来的密文。
最近修改密码的日期
以天为单位,从1970年1月1日开始计算。
如1971年1月1日则表示为数字366。
密码不可被修改的天数
如果为0则表示密码可以被修改。
如果设置为10则表示当密码设置后,10天内都无法再修改密码。
密码需要重新修改的天数
默认为99999,为273年,表示对密码修改无要求。
必需在这个设置的天数内重置密码,否则密码将会变为【过期特性】。
密码需要修改期限前的警告天数
当账号密码有效期快到的时候,系统会根据这个字段的数值,发出【警告】信息给该账号。提醒用户密码快到期了。
密码过期后的账号宽限时间(密码失效日)
这里并不是指原来的密码还可以继续登入系统,而是在登录系统后,系统会强制要求你修改密码。这是【密码过期】的意义。
而【密码失效】指的是,该密码无法登入系统了。
账号失效日期
这个字段通常会用在【收费服务】的系统中,可以规定一个账号的使用期限。
友好界面
首先是,将数字日期显示为正常的日期。可查看【date】。
awk '
BEGIN{
FS=":"
printf "UName PW Creation Fixed Fresh Warning Inactive Expire\n"
}
{
"date -d '\''1970/1/1 +"$3" day'\'' +%Y/%m/%d"|getline d
printf "%-20s %2s %10s %-6s %-5s %-7s %-8s %-10s\n",$1,substr($2,1,2),d,$4,$5,$6,$7,$8
}
' /etc/shadow