Actualmente estoy trabajando en un despliegue de un gran número de Mac's, en el que quiero establecer la contraseña de una cuenta de administrador sin poner la contraseña en texto plano en el script. ¿Hay alguna manera de proporcionar un hash de la contraseña a dscl/passwd?
Respuestas
¿Demasiados anuncios?Sí puedes cambiar la contraseña proporcionando un hash a un script. Esto funciona para 10.7 y posteriores (hasta al menos 10.9.1).
-
Necesitas el hash que quieres poner. La forma más fácil de hacerlo es crear una cuenta con la contraseña que quieras y leer el hash. El hash se almacena en
/var/db/dslocal/nodes/Default/users/[username].plist
en elShadowHashData
campo -
Cree el usuario de la manera estándar (usando dscl) pero no establezca la contraseña usando dscl en su lugar use el comando defaults.
Ejemplo para el usuario llamado 'lana':
#!/bin/bash
#hash to set obtained from:
#defaults read /var/db/dslocal/nodes/Default/users/lana.plist ShadowHashData
pw_hash='(<10145341 4c544544 ...really long...2d534841>)'
#needs to be unique
$uid=510
#gid of an existing group
$gid=510
dscl . -create /Users/lana
dscl . -create /Users/lana UserShell /bin/bash
dscl . -create /Users/lana RealName "Lana May"
dscl . -create /Users/lana UniqueID $uid
dscl . -create /Users/lana PrimaryGroupID $gid
dscl . -create /Users/lana NFSHomeDirectory /Users/lana
dscl . -merge /Groups/admin GroupMembership lana
defaults write "/var/db/dslocal/nodes/Default/users/lana.plist" ShadowHashData "$pw_hash"
Hace muchos años, me metí con algunos sistemas UNIX donde el hash de la contraseña se almacenaba en /etc/passwd, u opcionalmente en /etc/shadow.
He buscado un poco y he encontrado dos artículos que describen cómo se almacenan los hash de las contraseñas en OS X:
http://www.defenceindepth.net/2009/12/cracking-os-x-passwords.html http://www.defenceindepth.net/2011/09/cracking-os-x-lion-passwords.html
El artículo de 2011 dice:
Cada usuario tiene su propio archivo sombra, y cada archivo sombra se almacena en un archivo .plist ubicado en /var/db/dslocal/nodes/Default/users/
Los dos artículos tratan sobre cómo descifrar las contraseñas, más que sobre cómo establecer otras nuevas, pero podrían proporcionarte alguna información útil.
Luego hice una búsqueda en Google de dscl set ShadowHashData
. El primer resultado fue este "paquete libre de carga para crear un usuario en un sistema 10.7" Python script:
https://gist.github.com/rustymyers/1242589
Ese script parece llamar a dscl -create
, seguido de dscacheutil -flushcache
seguido de la escritura de algunos datos en /var/db/dslocal/nodes/Default/users/%s.plist
.
No he mirado el script con mucha profundidad, pero quizás pueda darte un punto de partida.