更改 Linux 映像的 root 密码

Kou*_*sha 5 linux compiling password

我正在构建 Debian 的 jessie 版本。密码保存在/etc/shadow构建树中,但它们显然已加盐,因此我无法仅通过编辑文件来更改它。如果这是我安装的系统,我可以调用passwd,但在这里我想更改构建树中文件中的密码。

在使用新版本刷新 SD 之前,如何更改 root 密码?

Gil*_*il' 5

在您拥有包含文件的目录树的阶段…/etc/shadow(在构建文件系统映像之前),修改该文件以注入您想要的密码哈希。

最简单的方法是使用chpasswd来自 Linux shadow 实用程序套件(Debian wheezy 足够新)的最新版本的工具,并带有该-R选项。示例用法:

chpasswd -R /path/to/build/tree <passwords.txt
Run Code Online (Sandbox Code Playgroud)

passwords.txt像含有线

root:swordfish
alibaba:opensesame
Run Code Online (Sandbox Code Playgroud)

如果您的构建环境不支持chpasswd -R,您可以使用通过调用crypt函数生成密码哈希的工具,并shadow通过文本操作将其注入文件。例如(未经测试的代码):

#!/usr/bin/python
import base64, crypt, os, re, sys
for line in sys.stdin.readlines():
    (username, password) = line.strip().split(":")
    salt = "$6$" + base64.b64encode(os.urandom(6))
    hashes[username] = crypt.crypt(password, salt)
old_shadow = open("etc/shadow")
new_shadow = open("etc/shadow.making", "w")
for line in old_shadow.readlines():
    (username, password, trail) = line.lstrip().split(":", 3)
    if hashes.has_key(username):
        line = username + ":" + hashes[username] + ":" + trail
    new_shadow.write(line)
old_shadow.close()
new_shadow.close()
os.rename("etc/shadow.making", "etc/shadow")
Run Code Online (Sandbox Code Playgroud)