修改Linux镜像的root密码

修改Linux镜像的root密码

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

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

答案1

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

最简单的方法是使用足够新的版本chpasswdLinux 影子实用程序套件中的工具(Debian wheezy 已经足够新了)以及该-R选项。使用示例:

chpasswd -R /path/to/build/tree <passwords.txt

包含passwords.txt像这样的行

root:swordfish
alibaba:opensesame

如果您的构建环境不支持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")

相关内容