webentwicklung-frage-antwort-db.com.de

verwalten eines Benutzerpassworts für Linux in der Marionette

Ich muss einen Testbenutzer mit einem Kennwort mithilfe von Marionette erstellen.

Ich habe gelesen, dass Marionette Benutzerpasswörter nicht generisch und plattformübergreifend verwalten kann, was sehr schade ist .. __ Ich mache das für Red Hat Enterprise Linux Server Version 6.3.

Ich mache folgendes:

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

marionette aktualisiert das Kennwort des Benutzers Linux gibt jedoch an, dass login/pwd falsch ist, wenn ich versuche, sich anzumelden.

es funktioniert (ich kann mich anmelden), wenn ich das Passwort in Linux manuell mit Sudo passwd test_user, einstelle und dann /etc/shadow und hardcode diesen Wert in der Marionette betrachte. so etwas wie:

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

Ich habe es auch versucht, indem Sie $1$ vor der sha1('hello'), Hinzugefügt haben, aber es funktioniert auch nicht (Anmerkung, $1$ steht für sha1).

wie kann das erste Beispiel geändert werden, damit es funktioniert (unter Verwendung des Klartextkennworts in der Puppendatei)?

ps: Ich bin mir bewusst, dass ich LDAP, sshkeys oder etwas anderes verwenden sollte, anstatt die Benutzerkennwörter in der Marionettendatei fest zu codieren. Ich mache dies jedoch nur, um einen Puppet-Vagrant-Test auszuführen, daher ist es in Ordnung, das Benutzerpasswort fest zu codieren.

33

Ich hatte Erfolg (Gist) mit Rubys String # Crypt-Methode aus einer Puppet-Parser-Funktion.

AFAICS verwendet die Crypt-libc-Funktionen (siehe: info crypt) und verwendet die gleichen Argumente $n$[rounds=<m>$]salt, wobei n die Hash-Funktion ist ($ 6 für SHA-512) und m die Anzahl der Schlüsselverstärkungsrunden (standardmäßig 5000).

9
Paul Schyska

Linux-Benutzer haben ihre Kennwörter als Hash in der Datei/etc/shadow gespeichert. Puppet übergibt das in der Benutzertypdefinition angegebene Kennwort in der Datei/etc/shadow.

Generieren Sie Ihr Hash-Passwort mit dem Befehl openssl:

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

Im vorherigen Beispiel wurde dieser Hash generiert: $ 1 $ HTQUGYUGYUGwsxQxCp3F/nGc4DCYM /

Fügen Sie dieses Hash-Passwort wie gezeigt Ihrer Klasse hinzu (Vergessen Sie nicht die Anführungszeichen)

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

Das stdlib-Paket von puppetlabs implementiert eine ähnliche pw_hash - Funktion der akzeptierten Antwort.

Stellen Sie sicher, dass Sie die Bibliothek zu Ihrer Konfiguration hinzufügen. Wenn Sie Bibliothekar verwenden, fügen Sie einfach Ihre Puppetfile hinzu.

mod 'puppetlabs-stdlib'

Dann legen Sie einfach einen Benutzer an:

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

Die sha1-Funktion in der Marionette ist nicht direkt für Passwd-Einträge gedacht, wie Sie herausgefunden haben . Ich würde sagen, dass das Setzen des Hashes anstelle des Passworts eine gute Praxis ist! Man sollte eigentlich nicht in der Lage sein, ein Passwort wiederherzustellen - Sie können es einmal generieren, oder Sie können es jedes Mal von Puppet generieren lassen - das Erzeugen eines Hashes sollte genug sein, IMHO ....__ Debian/Ubuntu gefällt Folgendes:

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

... unter CentOS können Sie anstelle von mkpasswd einen Grub-Crypt-Befehl verwenden ...

10
bryn

Sie können die Funktion generate verwenden, um Puppet den Hash für Sie erstellen zu lassen:

$password = 'hello'

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

Marionette: Benutzer mit einem SHA 512 Hash-Passwort

Ich habe eine Methode gefunden, die nichts hinzuzufügen braucht, wenn Sie python 2.6 haben. Ich habe dies mit puppet 3.6.2 Auf CentOS 6.4 Getestet:

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

Erklärungen

  1. das sha-Tag ist hier, um crypt die gewünschte Hash-Methode anzugeben: 6 ist der Hash-Typ für SHA-512

    • $ 1 $ -> MD5
    • $ 2a $ -> Blowfish (nicht in mainline glibc; hinzugefügt in einigen Linux Distributionen)
    • $ 5 $ -> SHA-256 (seit glibc 2.7)
    • $ 6 $ -> SHA-512 (seit glibc 2.7)

thx davey und wiki_crypt

  1. sys.stdout.write is here Um '\n' Von print zu vermeiden

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

    • os.urandom(16) Erstellt eine 16 Bit lange Binärzeichenfolge
    • base64.b64encode Verschlüsselt diesen String in base64
    • [:8] Nimm die ersten 8 Zeichen dieser Zeichenkette (da die Länge der Base64-Codierung variieren kann)
  3. generate ist eine Marionettenfunktion, die auf dem Marionettenmaster Text erzeugt. Sie können diese Funktion nicht wie gewünscht verwenden, da sie 'geschützt' ist ê.é ( letzter Beitrag schlägt eine Problemumgehung für vor dies Schutz-oder-was auch immer)

hth

2
Boop

In meiner Vagrantfile habe ich folgendes gemacht:

$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

Und in meiner main.pp-Datei:

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
Lyle Z

erzeugen Sie einfach ein verschlüsseltes Passwort aus grub-crypt --sha-512 und fügen Sie es ein

0
Creek