背景
作为实验,我通过手动创建条目来添加新用户(作为 root 用户)
/etc/passwd
。openssl
特别是对我使用的密码进行哈希处理,OpenSSL 1.1.1g
但不同版本的结果应该是相同的。我注意到每次对字符串“
testing
”进行哈希处理时,我都会得到不同的结果。
# openssl passwd testing YY9E0oGqqamCM # openssl passwd testing csL9dpD2Iy3H2
然后我将两个哈希值添加到
/etc/passwd
文件中,如下所示:
# echo "root2:YY9E0oGqqamCM:0:0:root:/root:/bin/bash" >> /etc/passwd # echo "root3:csL9dpD2Iy3H2:0:0:root:/root:/bin/bash" >> /etc/passwd
最后,我成功切换到每个用户,尽管他们的哈希值不同:
$ whoami reguser
$ su root2 Password: testing
# whoami root # exit
$ whoami reguser
$ su root3 Password: testing
# whoami root
问题
testing
即使/etc/passwd
文件中的实际哈希值不同, 我如何能够使用相同的密码(即)?- 如果有人能够解释幕后发生的事情,使其发挥作用,那就太好了。
- 我假设字符串“testing”每次被哈希时都会被赋予不同的盐,但是当我输入密码来切换用户时,linux如何知道相应的盐是什么?
- 如果有人能够解释幕后发生的事情,使其发挥作用,那就太好了。
答案1
密码哈希值通常是盐腌的。如果您不指定盐,那么它是随机生成的。因此结果不同。盐是输出的一部分:
openssl passwd -salt xx foo
xxY8K1xpBNqPg
openssl passwd -salt xx foo
xxY8K1xpBNqPg
答案2
哈希条目中的前两个字符是盐。
openssl passwd
必须有一个盐,它总是 2 个字符长,不能多也不能少。YY9E0oGqqamCM
因此,在和 的情况下csL9dpD2Iy3H2
,YY
和cs
是各自的盐。$ openssl passwd -salt YY testing YY9E0oGqqamCM $ openssl passwd -salt cs testing csL9dpD2Iy3H2