linux系统,确认账户密码正确
- 1、问题背景
- 2、解决方法
1、问题背景
有时在linux系统安装软件时,有的软件可能会在安装过程中创建系统用户,同时会给出这个用户的密码。过了一段时间我们不确定这个密码是否还正确,那怎么确认这个密码就是这个账户的正确密码呢?[假设这个账户被设置为不能登录,或者不想登录这个账户的情况下。无法通过登录账户确认密码是否正确]
2、解决方法
创建test用户
useradd test
查看/etc/shadow 文件中记录的test账户信息
cat /etc/shadow | grep test
给test用户设置密码
passwd test
再次查看/etc/shadow 文件中记录的test账户信息
cat /etc/shadow | grep test
文件中每行代表一个用户,使用 “:” 作为分隔符,每行用户信息被划分为 9 个字段。
第一列是用户名
第二列是加密的密码
“该字段存放的是加密后的用户口令字,如果为空,则对应用户没有口令,登录时不需要口令; 星号代表帐号被锁定; 双叹号表示这个密码已经过期了。 $6$开头的,表明是用SHA-512哈希加密的, $1$ 表明是用MD5哈希加密的 $2$ 是用Blowfish哈希加密的 $5$ 是用 SHA-256哈希加密的。)
第三列
最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。(一般这个时间起点是1970年1月1日)
第四列
最小时间间隔”指的是两次修改口令之间所需的最小天数。
第五列
最大时间间隔 指的是口令保持有效的最大天数。
第六列
警告时间 字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
第七列是密码过期后的宽限天数
不活动时间 表示的是用户没有登录活动但账号仍能保持有效的最大天数。
第八列是账号失效时间
失效时间 给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
第九列是保留字段,暂时没有含义。
我们关注第二列
在用户名test之后有$1$ ,这表明它是MD5哈希加密的,第二个$和第三个$之间的hFz7FF30是盐值,第三个$之后是哈希后的密码,使用盐进行哈希处理 - 在本例中为ZweMBsio/Jp4FN4GhvyPf.
可以使用openssl使用相同的盐值来计算给定的密码的哈希值,如下所示:
openssl passwd -1 -salt 盐值
可以看到输入给定密码后,openssl passwd 命令计算出的密码哈希值和/etc/shadow文件中查询到的密码哈希值是相同的,则说明我们输入的密码是test账户的正确密码。
我们输入的如果是test账户的错误密码,可以看到openssl passwd 命令计算出的密码哈希值和/etc/shadow文件中查询到的密码哈希值是不同的