Comment puis-je avoir un mot de passe pour marionnettes uniquement lors de la création d'un utilisateur?

9

Je veux que Puppet ne gère pas un mot de passe (c'est-à-dire, le réinitialise quand il est changé) mais définit le mot de passe initial lorsque Puppet crée l'utilisateur.

Je pensais faire un notifyà une Execressource qui définit le mot de passe, mais cela se déclenche lorsque toute propriété gérée par Puppet est modifiée (par exemple, l'appartenance à un groupe, le répertoire personnel, etc.). Je ne veux pas ça.

Des idées?

Belmin Fernandez
la source

Réponses:

9

Puppet lui-même ne prend pas en charge nativement "définir le mot de passe à la création de l'utilisateur mais pas autrement".

Une option serait de configurer une source d'authentification externe, telle que LDAP.

Une autre solution serait votre notifyà une Execidée, mais faire le Execun peu plus intelligent.

exec {
  "/usr/sbin/usermod -p '${password}' ${user}":
    onlyif => "/bin/egrep -q '^${user}:[*!]' /etc/shadow",
    require => User[$user];
}

Je n'ai pas testé cela, mais en vérifiant si le mot de passe n'a pas été défini dans la Execressource, vous devriez obtenir le résultat que vous recherchez. Je pense que mis en place de cette façon, le notify/ refreshonlystuff n'est pas nécessaire, mais ne ferait probablement pas de mal.

freiheit
la source
1
J'ai vu certaines machines utiliser !pour no-password-set, dans ce cas, cela egrep -q '^${user}:[*!]:' /etc/shadowfonctionne mieux.
leedm777
1
Pour RHEL / Cent: egrep '^${username}:!!:.*:' /etc/shadow
rfelsburg
1
grep -Eq '^${user}:[*!]!?:' /etc/shadow"semble être le plus portable et ne réinitialisera pas les utilisateurs avec un mot de passe verrouillé.
CodeGnome