/etc/shadow
影子文件,通常是现代Linux系统用户密码存储的文件。此文件由shadow
工具集使用。并非所有的用户密码管理工具都会使用。
特别注意此文件的权限 —— 一旦此文件的权限被不合理的放大,将导致相关认证模块拒绝使用该文件而造成用户无法登录系统。
该文件格式和/etc/passwd
文件相同,一样使用:
分割几个有意义的字段。使用man [5] shadow
即可查看该文件的帮助。
此文件的对应的字段意义如下:
- 登录名: 必须是有效的账户名,且已经存在于系统中。
- 加密的密码: 该字段存储单向加密后的密码,现代Linux通常是使用
sha-512
算法加密的字符串,一般有以下几个特点:- 如果密码字段包含一些不是 crypt(3) 合法结果的字符,比如 ! 或 *,用户将无法使用 unix 密码登录(但是可以通过其它方法登录系统)。
- 此字段可以为空,此时认证为特定的登录名时,不要求密码。然而,一些读取 /etc/shadow 文件的应用程序,在密码字段为空时,可能决定禁止任何访问。
- 以叹号开始的密码字段意味着密码被锁定。该行的剩余字符表示锁定之前的密码。
- 最后一次更改密码的日期:
- 最近一次更改密码的时间,表示从1970年1月1日开始的天数。
0
有特殊含义,表示用户应该在下次登录系统时更改密码。- 空字段表示密码年龄功能被禁用。
- 密码的最小年龄: 最小密码年龄是指,用户一次更改密码之后,要等多长时间才再次被允许更改密码。空字段或
0
表示没有最小密码年龄。 - 最大密码年龄:
- 最大密码年龄是指,这些天之后,用户必须更改密码。
- 这些天之后,密码仍然可用。用户将会在下次登录的时候被要求更改密码。
- 空字段表示没有最大密码年龄,没有密码警告时间段,没有密码禁用时间段
- 如果最大密码年龄小于最小密码年龄,用户将会不能更改密码。
- 密码警告时间段:
- 密码过期之前,提前警告用户的的天数(请参考上边的密码的最大年龄)。
- 空字段或者 0 表示没有密码警告期。
- 密码禁用期:
- 密码过期(查看上边的密码最大年龄)后,仍然接受此密码的天数(在此期间,用户应该在下次登录时修改密码)。
- 密码到期并且过了这个宽限期之后,使用用户的当前的密码将会不能登录。用户需要联系系统管理员。
- 空字段表示没有强制密码过期。
- 账户过期日期:
- 账户过期的日期,表示从1970年1月1日开始的天数。
- 注意,账户过期不同于密码过期。账户过期时,用户将不被允许登录;密码过期时,用户将不被允许使用其密码登录。
- 空字段表示账户永不过期。
- 应该避免使用
0
,因为它既能理解成永不过期也能理解成在1970年1月1日过期。
- 保留字段: 此字段保留作将来使用。
试描述下面的/etc/shadow
行代表什么含义:
sshd:*:16794:0:99999:7:::
sinoiot:$6$ZCen4Hf5$I.qeZtCaY7zecgyJy9yNEdMq/2.p7qUjoQ5FbID7FWez/UejUJVtsSFNBZfWhCf0pt62.7l6u8YwjeDDThs1o0:16794:0:99999:7:::
TIPS: 和
/etc/shadow
文件一样,同样不建议直接使用文本编辑器修改这个文件,使用passwd
命令或其他相关命令修改(后面章节将涉及)。