我正在构建 Debian 的 jessie 版本。密码保存在/etc/shadow
构建树中,但它们显然是加盐的,因此我无法仅通过编辑文件来更改它。如果这是我安装的系统,我可以调用passwd
,但在这里我想更改构建树中文件中的密码。
在使用新版本刷写 SD 之前,如何更改 root 密码?
答案1
在您拥有包含文件的目录树的阶段…/etc/shadow
(在构建文件系统映像之前),修改该文件以注入您想要的密码哈希。
最简单的方法是使用足够新的版本chpasswd
Linux 影子实用程序套件中的工具(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")