我需要使用puppet创建一个带密码的测试用户.
我已经读过,木偶无法以通用的跨平台方式管理用户密码,这很可惜.我正在为Red Hat Enterprise Linux Server 6.3版做这个.
我这样做:
user { 'test_user':
ensure => present,
password => sha1('hello'),
}
Run Code Online (Sandbox Code Playgroud)
puppet更新了用户的密码,但Linux在我尝试登录时说login/pwd不正确.
如果我在Linux中手动设置密码sudo passwd test_user,然后/etc/shadow在puppet中查看并硬编码该值,它可以工作(我可以登录).就像是:
user { 'test_user':
ensure => present,
password => '$1$zi13KdCr$zJvdWm5h552P8b34AjxO11',
}
Run Code Online (Sandbox Code Playgroud)
我也试过$1$在前面添加sha1('hello'),但它也不起作用(注意,$1$代表sha1).
如何修改第一个例子使其工作(使用puppet文件中的明文密码)?
ps:我知道我应该使用LDAP或sshkeys或其他东西,而不是在puppet文件中硬编码用户密码.但是,我这样做只是为了运行puppet vagrant测试,所以可以硬编码用户密码.
Avi*_*ngh 35
Linux用户将其密码存储为/ etc/shadow文件中的哈希值.Puppet传递/ etc/shadow文件中用户类型定义中提供的密码.
使用openssl命令生成哈希密码:
#openssl passwd -1
#Enter your password here
Password:
Verifying - Password:
$1$HTQUGYUGYUGwsxQxCp3F/nGc4DCYM
Run Code Online (Sandbox Code Playgroud)
上一个示例生成此哈希:$ 1 $ HTQUGYUGYUGwsxQxCp3F/nGc4DCYM /
将此哈希密码添加到您的类中,如图所示(不要忘记引号)
user { 'test_user':
ensure => present,
password => '$1$HTQUGYUGYUGwsxQxCp3F/nGc4DCYM/',
}
Run Code Online (Sandbox Code Playgroud)
mpe*_*rin 13
puppetlabs的stdlib包实现了pw_hash接受的答案的类似功能.
请务必将库添加到您的配置中.如果您使用图书管理员,只需添加您的Puppetfile
mod 'puppetlabs-stdlib'
Run Code Online (Sandbox Code Playgroud)
然后创建一个用户,只需:
user { 'user':
ensure => present,
password => pw_hash('password', 'SHA-512', 'mysalt'),
}
Run Code Online (Sandbox Code Playgroud)
bry*_*ryn 12
sha1正如你所想的那样,puppet中的函数并不直接用于passwd条目.我会说设置哈希而不是密码是好习惯!你不是真的应该能够恢复密码 - 你可以生成一次,或者你可以让puppet每次都生成它 - 生成一次哈希应该足够喔......你可以在Debian/Ubuntu上生成密码像这样:
pwgen -s -1 | mkpasswd -m sha-512 -s
Run Code Online (Sandbox Code Playgroud)
...在CentOS上你可以使用一些grub-crypt命令而不是mkpasswd ...