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、または他の何かを使用する必要があることを認識しています。ただし、これはパペット迷走テストの実行のためだけに行っているので、ユーザーパスワードをハードコードしてもかまいません。
私は成功しました(要旨) Puppetパーサー関数内からのRubyのString#cryptメソッドで。
AFAICS crypt libc関数を使用しています(参照:info crypt
)、および同じ引数を取ります$n$[rounds=<m>$]salt
、nはハッシュ関数(SHA-512の場合は6ドル)、mはキー強化ラウンドの数(デフォルトでは5000)です。
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/',
}
人形のsha1
関数は、おわかりのように、passwdエントリを直接対象とするものではありません。パスワードではなくハッシュを設定することをお勧めします!とにかくパスワードを回復できるはずではありません-一度生成するか、毎回パペットで生成することができます-そのハッシュを一度生成するだけで十分です... Debian/Ubuntuでパスワードを生成できますこのような:
pwgen -s -1 | mkpasswd -m sha-512 -s
... CentOSでは、mkpasswdの代わりにgrub-cryptコマンドを使用できます...
generate
関数を使用して、Puppetにハッシュを作成させることができます。
$password = 'hello'
user { 'test_user':
ensure => 'present',
password => generate('/bin/sh', '-c', "mkpasswd -m sha-512 ${password} | tr -d '\n'"),
}
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),
}
_
shaタグは、crypt
に指定するハッシュメソッドを指定するためにここにあります:6はSHA-512のハッシュのタイプです
thx davey および wiki_crypt
print
の_sys.stdout.write is here
_を回避する_'\n'
_
base64.b64encode(os.urandom(16))[:8])
:
os.urandom(16)
は16ビット長のバイナリ文字列を作成しますbase64.b64encode
_この文字列をbase64でエンコードします[:8]
_は、この文字列の最初の8文字を取得します(base64エンコーディングの長さが異なる場合があるため)generate
は、puppet masterでテキストを作成するパペット関数です。この関数は「保護されている」ため、希望どおりに使用できません ê.é ( 最終投稿 このprotection- or-whatever)
hth
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 ],
}
grub-crypt --sha-512から暗号化されたパスワードを生成して貼り付けます。