Linux中通过配置文件 /etc/shadow 来存储用户密码的相关信息, 本篇文章用于简要分析该配置文件中各个字段代表的意义及其相关操作.
之前在系统中添加了用户帐户user1, 现在通过user1在配置文件/etc/shadow中各个字段分析
user1:$id$salt$encrypted:16655:50:100:20:10:17021:
配置文件/etc/shadow中共有9个字段, 每个字段通过 : 隔开, 每个字段的含义如下:
1. login name: 用户名 2. encrypted password: 加密后的密码, 其格式为: $加密级别$系统随机添加的杂质字符串$密码的铭文形式 # 加密级别表示方法: 1为MD5加密, 5为SHA256加密, 6为SHA512加密 # 如果第2字段为: !或*表示该为无效字段, 用户无法通过密码方式登录账户, 可以通过root用户使用passwd指令来对指定账户进行修改; 空表示用户登录时就会强制要求修改密码 3. date of last password changed: 最近一次修改密码的时间: 表示上次修改密码的日期距离Unix元年(1970-01-01)的天数, 0表示用户下次登录后自行修改密码, 空表示该字段无意义 4. minimum password age: 密码最短使用时长: 表示修改完密码后至少经过多少天可以再次修改密码, 0或空表示没有设置该字段 5. maximum password age: 密码最长使用时长: 表示修改完密码后最多使用多少天系统会发出警告要求用户更改密码, 空表示用户密码不会有最长使用时长, 警告时长和容忍市场的限制 # 如果该字段有意义时, 如果超出该期限但在失效日期之前密码可以使用, 但是会向用户发出警告 6. password warning period: 密码过期前警告时长: 表示在距离账户失效日期(第8字段)前多少天会发出警告要求用户更改密码, 0或空表示没有警告时长 7. passwoerd inactivity period: 密码过期后容忍时长: 表示在距离账户实现日期(第8字段)后多少天会强制用户修改密码, 空表示没有容忍时长 8. account expiration date: 账户失效日期: 表示账户失效日期距离Unix元年的天数, 空表示永不失效 9. reserved field: 保留字段
说明:
3-8字段都是以相对时间长度而不是具体日期来表示, 单位都是天, 各自的参考点不一样:
3和8字段都是以Unix元年(1970-01-01)为参考点,
4和5字段都是以第3字段表示的日期为参考点,
6和7字段都是以第8字段表示的日期为参考点
3-8字段的相对关系如下图所示:
=============================================================
以下是通过指定来对用户在/etc/shadow中个字段的相关配置(因为涉及到用户管理操作, 因此需要通过root账户来进行操作):
对于第2字段用户密码可以通过passwd命令来进行修改
passwd
作用: 修改指定用户密码的相关信息
格式: passwd [OPTIONS] USERNAME
主要选项:
-e: 强制指定用户的密码现在过期, 迫使用户下次登录时修改密码
--stdin: 从标准输入接收输入的字符串作为密码, 此时只需要出入一次字符串就行
# echo 'user@123' | passwd --stdin user1 #将user1密码修改为user@123 查看修改后的user1的密码 # cat /etc/shadow | grep 'user1' user1:$6$YKpyiOFB$qTIZ1zqAtDTO7Ztb.K5PdpIfIMrt/lREJUop0N0BqJxoq62ih2NIBgCNwsIMN/QwMz88x5MAah1yU48YcL4d70:0:0:99999:7::: #第2字段已经修改为加密格式的密码
对于第3-8字段用户密码的各个时间限制可以通过chage来进行修改
chage
作用: 修改用户密码相关信息
格式: chage [OPTIONS] USERNAME
主要选项:
-d LAST_DAY: 修改/etc/shadow的第3字段, 可使用YYYY-MM-DD的日期格式或使用距离1970-01-01的天数
-m MIN_DAYS: 修改/etc/shadow的第4字段, 使用距离第3字段的天数
-M MAX_DAYS: 修改/etc/shadow的第5字段, 使用距离第3字段的天数
-W WARN_DAYS: 修改/etc/shadow的第6字段, 使用距离第8字段的天数
-I INACTIVE: 修改/etc/shadow的第7字段, 使用距离第8字段的天数
-E EXPIRE_DATE: 修改/etc/shadow的第8字段, 可使用YYYY-MM-DD的日期格式或使用距离1970-01-01的天数
# chage -d 2015-08-01 -m 50 -M 100 -W 30 -I 10 -E 2016-08-01 user1 #将user1的上次修改密码时间为2015-08-01, 最短修改密码时长为50天, 最长修改密码时长为100天, 发出警告时长为密码过期前30天, 密码容忍时长为过期后10天, 密码失效时间为2016-08-01 # cat /etc/shadow | grep 'user1' user1:$6$YKpyiOFB$qTIZ1zqAtDTO7Ztb.K5PdpIfIMrt/lREJUop0N0BqJxoq62ih2NIBgCNwsIMN/QwMz88x5MAah1yU48YcL4d70:16648:50:100:30:10:17014: #第3-8字段已经按要求修改
小结:
修改配置文件/etc/shadow中各字段的参数比较简单, 只是第3-8字段表示的意义不同, 关键是各个字段的参照物不相同, 理解时注意各个字段的参考点, 在实际操作中会有很大帮助.
本人水平有限, 如有理解不当的地方, 请大家给予指正, 非常感谢!