一、什么是/etc/shadow文件
/etc/shadow文件存储了操作系统中所有用户的密码哈希值等用户信息,是Linux系统安全性的重要组成部分。在计算机安全领域中,密码哈希值是一种被广泛使用的技术,它充分利用了哈希算法的不可逆性及其输入输出不同的特点,保证密码传输和存储的安全性。/etc/shadow文件只有root用户可读取,并且只有在系统内部调用才会启用。
二、/etc/shadow文件的格式
root:$6$hPdqehM/$ocAQs9Pn7esFrx3CCJKTt9Ft9xGlf8CVJUW5L2SmOqzhdGPU2iSGiXlC5fN83vxNCUf67uBQrUJ/gfvhh8prw.:17113:0:99999:7::: bin:*:17062:0:99999:7::: daemon:*:17062:0:99999:7::: adm:*:17062:0:99999:7::: lp:*:17062:0:99999:7::: sync:*:17062:0:99999:7::: shutdown:*:17062:0:99999:7::: halt:*:17062:0:99999:7::: mail:*:17062:0:99999:7::: nobody:*:17062:0:99999:7:::
/etc/shadow文件是一个文本文件,每个用户对应着一行,每行包含9个字段,字段间用“:”分隔。字段意义如下:
1. 用户名: 用户的登录名,必选字段,长度最大为8个字符
2. 密码哈希值: 密码的哈希值,必选字段
3. 最近修改时间: 上次修改密码的时间,是一个数字类型的字段,表示的是从1970年1月1日0时0分0秒开始到上次修改时间的天数,可以通过date命令将其转换为人类可读的日期格式
4. 密码最短使用期限: 表示设置的密码最小使用时间,单位是天数;0表示可以立即修改密码
5. 密码最长使用期限: 表示设置的密码最大使用时间,单位是天数;99999表示永不过期
6. 密码过期提前警告天数: 表示密码到期之前,提前N天向用户发出提示,建议设置为7天
7. 密码过期后宽限时间: 表示密码过期之后,还能够使用N天,建议设置为0天
8. 账户失效时间: 表示账户失效时间,是一个数字类型的字段,表示的是从1970年1月1日0时0分0秒开始到用户的账户失效时间的天数;表示账户过期的日期,一旦过期,用户在登录的时候,系统就会提示账户已经过期
9. 保留字段: 该字段暂时没有被使用,用于以后扩展。
三、/etc/shadow文件中密码哈希值的类型
/etc/shadow文件中的密码哈希值是由不同的算法生成的,常用的算法有md5、sha-256、sha-512等。不同的算法生成的哈希值长度不同,也会影响加密速度和安全程度。以$6$开头的是sha-512,以$5$开头的是sha-256,以$1$开头的是md5。
四、如何修改/etc/shadow文件
如果需要修改用户密码或者其他信息,可以使用passwd命令。passwd命令会先提示输入当前用户的密码,如果密码正确才能修改。修改过程中,passwd会自动更新/etc/shadow文件。
$ passwd Changing password for user xxx. Current password: New password: Retype new password:
除了使用passwd命令,也可以手动编辑/etc/shadow文件,但千万不要直接使用文本编辑器进行编辑,因为这样容易出错,并且导致系统安全性问题。需要使用专门的工具进行编辑,比如vipw或者usermod命令。
五、如何保护/etc/shadow文件
/etc/shadow文件是非常敏感的系统文件,只有root用户才可以读取。如果其他用户可以读取这个文件,他们就可以看到所有用户的密码哈希值,从而造成系统安全性问题。
在Linux系统中,保护/etc/shadow文件的方法有很多,比如将其改为只读文件,只允许root用户读写,使用ACL控制用户访问等。具体的方法可以通过修改文件权限来进行,如下所示:
$ chmod 600 /etc/shadow
将/etc/shadow文件的权限改为600,即只有root用户可以读写访问。这样可以最大程度保护系统的安全性。