gestion d'un mot de passe utilisateur pour linux dans puppet

je dois créer un utilisateur test avec un mot de passe en utilisant puppet.

j'ai lu que puppet ne peut pas gérer les mots de passe utilisateurs d'une manière générique multiplateformes, ce qui est dommage. Je le fais pour Red Hat Enterprise Linux Server release 6.3.

je fais comme suit:

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

marionnette à jour le mot de passe de l'utilisateur, mais Linux dit que login / pwd est incorrect quand j'essaie de me connecter.

cela fonctionne (je peux me connecter) si je mets le mot de passe manuellement dans Linux sudo passwd test_user, et puis regardez /etc/shadow et coder en dur la valeur de la marionnette. quelque chose comme:

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

j'ai essayé aussi en ajoutant $ devant sha1('hello'), mais il ne fonctionne pas non plus (remarque, $ signifie sha1).

comment modifier le premier exemple pour le faire fonctionner (en utilisant le mot de passe en clair dans le fichier puppet)?

ps: je suis conscient que je devrais utiliser LDAP, ou sshkeys, ou autre chose, au lieu de coder les mots de passe de l'utilisateur dans le dossier de marionnettes. cependant, je ne le fais que pour exécuter un test de vagabondage puppet, donc il est correct de hardcode le mot de passe de l'utilisateur.

32
demandé sur Abhijeet Kasurde 2013-10-01 14:52:47

8 réponses

j'ai eu du succès (gist) avec la méthode String#crypt de ruby à partir d'une fonction D'analyseur de marionnettes.

AFAICS il utilise les fonctions libc de crypt (voir: info crypt), et prend les mêmes arguments $n$[rounds=<m>$]salt, où n est la fonction de hachage ($6 pour SHA-512) et m est le nombre de tours de renforcement de clés (5000 par défaut).

9
répondu Paul Schyska 2014-07-22 09:33:16

les utilisateurs de Linux ont leurs mots de passe stockés sous forme de hachage dans le fichier /etc/shadow. Puppet passe le mot de passe fourni dans la définition du type d'utilisateur dans le fichier /etc/shadow.

générer votre mot de passe de hachage en utilisant la commande openssl:

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

l'exemple précédent générer ce hachage: $1$HTQUGYUGYUGwsxQxCp3F/nGc4DCYM/

ajouter ce mot de passe de hachage à votre classe comme montré (n'oubliez pas les guillemets)

user { 'test_user': 
  ensure   => present,
  password => '$HTQUGYUGYUGwsxQxCp3F/nGc4DCYM/',
}
34
répondu Avinash Singh 2014-10-31 18:13:04

le paquet stdlib de puppetlabs implémente un pw_hash fonction de la réponse acceptée.

assurez-vous d'ajouter la bibliothèque à votre configuration. Si vous utilisez bibliothécaire, ajoutez juste votre Puppetfile

mod 'puppetlabs-stdlib'

Ensuite créer un utilisateur, il suffit de :

user { 'user':
  ensure => present,
  password => pw_hash('password', 'SHA-512', 'mysalt'),
}
12
répondu mperrin 2015-08-20 15:08:19

sha1 la fonction puppet n'est pas directement destinée aux entrées passwd, comme vous l'avez compris. Je dirais que configurer le hachage plutôt que le mot de passe est une bonne pratique! Vous n'êtes pas vraiment censé être en mesure de récupérer un mot de passe de toute façon - vous pouvez le générer une fois, ou vous pouvez avoir puppet le générer à chaque fois - générer ce hachage une fois devrait être assez IMHO... Vous pouvez générer un mot de passe sur Debian/Ubuntu comme ceci:

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

...sur CentOS vous pouvez utiliser un peu de grub-crypt commande au lieu de mkpasswd...

10
répondu bryn 2013-11-06 14:54:11

Vous pouvez utiliser le generate fonction permettant à Puppet de créer le hash pour vous:

$password = 'hello'

user { 'test_user':
    ensure   => 'present',
    password => generate('/bin/sh', '-c', "mkpasswd -m sha-512 ${password} | tr -d '\n'"),
}
3
répondu Behrang 2014-10-14 11:09:19

Marionnette: l'utilisateur avec un SHA 512 hachage de mot de passe

j'ai trouvé une méthode qui n'a pas besoin d'ajouter quoi que ce soit si vous avez python 2.6. J'ai testé cela sur puppet 3.6.2CentOS 6.4:

$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),
}

Explications

  1. la balise sha est ici pour spécifier crypt la méthode de hachage que nous voulons: 6 est le type de hash pour SHA-512

    • $1$ - > MD5
    • $2a$ -> Blowfish (pas dans la canalisation principale de la glibc; ajout dans certains Linux les distributions)
    • $5$ -> SHA-256 (depuis la glibc 2.7)
    • $6$ -> SHA-512 (depuis la glibc 2.7)

thx davey et wiki_crypt

  1. sys.stdout.write is here à éviter '\n'print

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

    • os.urandom(16) créer un 16 bits de longueur de chaîne binaire
    • base64.b64encode encoder cette chaîne dans base64
    • [:8] prenez les 8 premiers caractères de cette chaîne (La longueur d'encodage de base64 peut varier)
  3. generate est une fonction de marionnette qui crée du texte sur le puppet master. Vous ne pouvez pas utiliser cette fonction comme vous le voulez parce qu'elle est 'protégée' ê.é (dernier message suggérez une solutionprotection-ou-quoi)

hth

2
répondu Boop 2017-04-13 12:13:50

Dans mon Vagrantfile, j'ai fait ceci:

$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

Et dans ma main.pp fichier:

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 ],
}
1
répondu Lyle Z 2014-11-06 16:45:54

il suffit de générer un mot de passe crypté à partir de grub-crypt --sha-512 et coller

0
répondu Creek 2015-08-16 23:32:31