usuarios usuario saber recuperar password listar esta contraseña como cambiar bloqueado puppet

puppet - saber - listar usuarios linux



administrar una contraseña de usuario para linux en marioneta (8)

Necesito crear un usuario de prueba con una contraseña usando el uso de marionetas.

He leído que el títere no puede administrar las contraseñas de los usuarios de una manera genérica multiplataforma, lo cual es una lástima. Estoy haciendo esto para la versión 6.3 del Servidor Red Hat Enterprise Linux.

Yo hago lo siguiente:

user { ''test_user'': ensure => present, password => sha1(''hello''), }

títere actualiza la contraseña del usuario, pero Linux dice login / pwd incorrecto cuando intento iniciar sesión.

funciona (puedo iniciar sesión) si establezco la contraseña manualmente en Linux con sudo passwd test_user , y luego miro /etc/shadow y sudo passwd test_user ese valor en puppet. algo como:

user { ''test_user'': ensure => present, password => ''$1$zi13KdCr$zJvdWm5h552P8b34AjxO11'', }

Lo intenté también agregando $1$ al frente del sha1(''hello'') , pero tampoco funciona (nota, $1$ significa sha1).

cómo modificar el primer ejemplo para que funcione (usando la contraseña de texto claro en el archivo títere)?

ps: soy consciente de que debería usar LDAP, o sshkeys, o algo más, en lugar de codificar las contraseñas de los usuarios en el archivo títere. sin embargo, estoy haciendo esto solo para ejecutar una prueba de vagabundo de títeres, por lo que está bien codificar la contraseña de usuario.


Marioneta: usuario con una contraseña hash SHA 512

Se me ocurrió un método que no necesita agregar nada si tienes Python 2.6. Probé esto en puppet 3.6.2 en CentOS 6.4 :

$newuserid = ENV["USERNAME"] config.vm.provision :puppet do |puppet| puppet.module_path = "modules" puppet.manifests_path = "manifests" puppet.manifest_file = "main.pp" puppet.facter = {"newuserid" => $newuserid} puppet.options = "--verbose" end

Explicaciones

  1. la etiqueta sha está aquí para especificar crypt el método hash que queremos: 6 es el tipo de hash para SHA-512

    • $ 1 $ -> MD5
    • $ 2a $ -> Blowfish (no en glibc principal, agregado en algunas distribuciones de Linux)
    • $ 5 $ -> SHA-256 (desde glibc 2.7)
    • $ 6 $ -> SHA-512 (desde glibc 2.7)

thx davey y wiki_crypt

  1. sys.stdout.write is here para evitar ''/n'' de print

  2. base64.b64encode(os.urandom(16))[:8]) :

    • os.urandom(16) crea una cadena binaria larga de 16 bits
    • base64.b64encode codifica esta cadena en base64
    • [:8] tome los primeros 8 caracteres de esta cadena (ya que la longitud de codificación base64 puede variar)
  3. generate es una función de títeres que crea texto cuando está en el titiritero . No puede usar esta función como desee porque está ''protegida'' ê.é (la última publicación sugiere una solución alternativa a esta protección o lo que sea )

hth


El paquete stdlib de puppetlabs implementa una función pw_hash similar a la respuesta aceptada.

Asegúrese de agregar la biblioteca a su configuración. Si usa pw_hash , solo agregue su Puppetfile

mod ''puppetlabs-stdlib''

Entonces, para crear un usuario, simplemente:

user { ''user'': ensure => present, password => pw_hash(''password'', ''SHA-512'', ''mysalt''), }


En mi Vagrantfile, hice esto:

user { $newuserid : ensure => present, home => "/home/${newuserid}", managehome => true, gid => "mygid", } exec { ''set password'': command => "/bin/echo /"${newuserid}:${newuserid}/" | /usr/sbin/chpasswd", require => User [ $newuserid ], }

Y en mi archivo main.pp:

$pass="password" $shatag="/$6/$" $cmd="import crypt, base64, os, sys; sys.stdout.write(crypt.crypt(''$pass'', ''$shatag'' + base64.b64encode(os.urandom(16))[:8]))" user { ''boop'': ensure => present, password => generate ("/usr/bin/python", "-c", $cmd), }


La función sha1 en el títere no está destinada directamente a las entradas de contraseña, como descubriste. Diría que configurar el hash en lugar de la contraseña es una buena práctica. Realmente no se supone que puedas recuperar una contraseña de todos modos - puedes generarla una vez, o puedes hacer que la marioneta la genere todo el tiempo - generar ese hash una vez debería ser suficiente en mi humilde opinión ... Puedes generar una contraseña en Debian / Ubuntu Me gusta esto:

pwgen -s -1 | mkpasswd -m sha-512 -s

... en CentOS puedes usar algún comando grub-crypt en lugar de mkpasswd ...


Los usuarios de Linux tienen sus contraseñas almacenadas como hash en el archivo / etc / shadow. Puppet transfiere la contraseña proporcionada en la definición de tipo de usuario en el archivo / etc / shadow.

Genere su contraseña de hash usando el comando openssl:

#openssl passwd -1 #Enter your password here Password: Verifying - Password: $1$HTQUGYUGYUGwsxQxCp3F/nGc4DCYM

El ejemplo anterior genera este hash: $ 1 $ HTQUGYUGYUGwsxQxCp3F / nGc4DCYM /

Agregue esta contraseña hash a su clase como se muestra (no olvide las comillas)

user { ''test_user'': ensure => present, password => ''$1$HTQUGYUGYUGwsxQxCp3F/nGc4DCYM/'', }


Puede usar la función de generate para que Puppet cree el hash por usted:

$password = ''hello'' user { ''test_user'': ensure => ''present'', password => generate(''/bin/sh'', ''-c'', "mkpasswd -m sha-512 ${password} | tr -d ''/n''"), }


solo genere una contraseña encriptada de grub-crypt --sha-512 y péguelo


Tuve éxito (esencia) con el método String # crypt de ruby ​​desde una función de analizador de Puppet.

AFAICS está usando las funciones crypt libc (ver: info crypt ), y toma los mismos argumentos $n$[rounds=<m>$]salt , donde n es la función hash ($ 6 para SHA-512) y m es el número de rondas de fortalecimiento clave (5000 por defecto).