密码哈希是在/etc/shadow.您可以简单地用生成的(盐渍)哈希替换它.密码哈希的格式在crypt(3)中描述.默认值为DES,但在glibc2系统上,它可以包含几种不同的加密方法之一:
ID | Method
---------------------------------------------------------
1 | MD5
2a | Blowfish (not in mainline glibc; added in some
| Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)
Run Code Online (Sandbox Code Playgroud)
因此,影子密码字符串可能如下所示: $5$saltysalt$KhboodWTnuXJ5siXvWx5mxYXbnuNJOxROfD1inCILfD
在这种情况下,第一个$ 5 $部分表示它是SHA-256哈希,中间部分是盐,其余部分是实际哈希.
要生成一个,最好使用系统的crypt(3)函数,例如使用最小的C程序:
#include <stdio.h>
#include <crypt.h>
int main(int argc, char *argv[]) {
printf("%s\n", crypt(argv[1], argv[2]));
}
Run Code Online (Sandbox Code Playgroud)
编译cc mkpass.c -o mkpass -lcrypt然后使用明文密码和salt字符串运行以生成可以放入的字符串/etc/shadow:
./mkpass yourpassword yoursalt # DES (default)
./mkpass yourpassword '$6$yoursalt$encrypted' # SHA-512 (quote your $)
Run Code Online (Sandbox Code Playgroud)
旧Linux系统可能不支持第二种形式.最好查看影子文件中的现有字符串,并使用相同的哈希类型(从顶部的$ id $列表).