web-dev-qa-db-ja.com

puppetでのlinuxのユーザーパスワードの管理

Puppetを使用して、パスワードを使用してテストユーザーを作成する必要があります。

私はパペットが一般的なクロスプラットフォームの方法でユーザーのパスワードを管理できないことを読んだことがありますが、これは残念です。 Red Hat Enterprise Linux Serverリリース6.3でこれを行っています。

私は次のようにします:

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

puppetはユーザーのパスワードを更新しますが、Linuxがログインしようとするとlogin/pwdが間違っています。

linuxでSudo passwd test_userを使用してパスワードを手動で設定し、次に/etc/shadowを見て、puppetでその値をハードコードすると、動作します(ログインできます)。何かのようなもの:

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

sha1('hello')の前に$1$を追加することも試みましたが、どちらも機能しません(注、$1$はsha1を表します)。

最初の例を修正して動作させる方法(パペットファイルのプレーンテキストパスワードを使用)?

ps:puppetファイルにユーザーパスワードをハードコーディングする代わりに、LDAP、またはsshkeys、または他の何かを使用する必要があることを認識しています。ただし、これはパペット迷走テストの実行のためだけに行っているので、ユーザーパスワードをハードコードしてもかまいません。

36

私は成功しました(要旨) Puppetパーサー関数内からのRubyのString#cryptメソッドで。

AFAICS crypt libc関数を使用しています(参照:info crypt)、および同じ引数を取ります$n$[rounds=<m>$]salt、nはハッシュ関数(SHA-512の場合は6ドル)、mはキー強化ラウンドの数(デフォルトでは5000)です。

10
Paul Schyska

Linuxユーザーのパスワードは、/ etc/shadowファイルにハッシュとして保存されています。 Puppetは、/ etc/shadowファイルのユーザータイプ定義で指定されたパスワードを渡します。

Opensslコマンドを使用してハッシュパスワードを生成します。

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

前の例では、このハッシュを生成します:$ 1 $ HTQUGYUGYUGwsxQxCp3F/nGc4DCYM /

示されているように、このハッシュパスワードをクラスに追加します(引用符を忘れないでください)

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

Puppetlabsのstdlibパッケージは、同様の pw_hash 受け入れられた回答の機能。

ライブラリを構成に追加してください。 librarian を使用する場合は、Puppetfileを追加するだけです

mod 'puppetlabs-stdlib'

次に、ユーザーを作成するには、単に:

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

人形のsha1関数は、おわかりのように、passwdエントリを直接対象とするものではありません。パスワードではなくハッシュを設定することをお勧めします!とにかくパスワードを回復できるはずではありません-一度生成するか、毎回パペットで生成することができます-そのハッシュを一度生成するだけで十分です... Debian/Ubuntuでパスワードを生成できますこのような:

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

... CentOSでは、mkpasswdの代わりにgrub-cryptコマンドを使用できます...

12
bryn

generate 関数を使用して、Puppetにハッシュを作成させることができます。

$password = 'hello'

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

Puppet:SHA 512ハッシュ化されたパスワードを持つユーザー

python 2.6の場合、追加する必要のないメソッドを思い付きました。これを_puppet 3.6.2_でテストしました_CentOS 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),
}
_

説明

  1. shaタグは、cryptに指定するハッシュメソッドを指定するためにここにあります:6はSHA-512のハッシュのタイプです

    • $ 1 $-> MD5
    • $ 2a $-> Blowfish(メインラインglibcではなく、一部のLinuxディストリビューションで追加)
    • $ 5 $-> SHA-256(glibc 2.7以降)
    • $ 6 $-> SHA-512(glibc 2.7以降)

thx davey および wiki_crypt

  1. printの_sys.stdout.write is here_を回避する_'\n'_

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

    • os.urandom(16)は16ビット長のバイナリ文字列を作成します
    • _base64.b64encode_この文字列をbase64でエンコードします
    • _[:8]_は、この文字列の最初の8文字を取得します(base64エンコーディングの長さが異なる場合があるため)
  3. generateは、puppet masterでテキストを作成するパペット関数です。この関数は「保護されている」ため、希望どおりに使用できません ê.é最終投稿 このprotection- or-whatever

hth

2
Boop

Vagrantfileで、これを行いました:

$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

そして、私のmain.ppファイルで:

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

grub-crypt --sha-512から暗号化されたパスワードを生成して貼り付けます。

0
Creek