在puppet中管理linux的用户密码

Dav*_*lla 36 linux puppet

我需要使用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)

  • 如何避免存储明文密码并同时使用`pw_hash`? (3认同)
  • 到目前为止最好的方法因为OS独立.所有其他显示的方法需要特定的操作系统或包才能工作,ps_hash似乎适用于所有*nix操作系统.此外,它默认支持盐,其他显示的方法不支持.@mperrin你的例子中有一个错字:"myhash"应该是"mysalt". (2认同)

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 ...

  • 如果即使使用正确的哈希算法也无法使密码验证正常工作,则Puppet安装可能由于缺少libshadow库而无法修改`/ etc / shadow`。我在[这里](http://www.relativkreativ.at/articles/two-common-pitfalls-when-using-hashed-passwords-with-puppet)中详细介绍了这个陷阱。 (2认同)

Pau*_*ska 10

从Puppet解析器函数中获得了ruby的String#crypt方法的成功(要点).

AFAICS它使用crypt libc函数(参见:) info crypt,并采用相同的参数$n$[rounds=<m>$]salt,其中n是散列函数(SHA-512为6美元),m是密钥强化轮次数(默认为5000).