No estágio em que você tem uma árvore de diretórios contendo um arquivo …/etc/shadow
(antes de construir a imagem do sistema de arquivos), modifique esse arquivo para injetar os hash (s) de senha que você deseja ter.
A maneira mais fácil de fazer isso é com versões recentes suficientes da ferramenta chpasswd
da sombra do Linux utilities suite (o Debian wheezy é recente o suficiente) com a opção -R
. Uso de amostra:
chpasswd -R /path/to/build/tree <passwords.txt
com passwords.txt
contendo linhas como
root:swordfish
alibaba:opensesame
Se o seu ambiente de criação não suportar chpasswd -R
, você poderá usar uma ferramenta que gere um hash de senha chamando o crypt
funciona e injeta no arquivo shadow
pela manipulação de texto. Por exemplo (código não testado):
#!/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")