我需要使用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) .
如何修改第一个例子使其工作(使用puppet文件中的明文密码)?
ps:我知道我应该使用LDAP或sshkeys或其他东西,而不是在puppet文件中硬编码用户密码 . 但是,我这样做只是为了运行puppet vagrant测试,所以可以硬编码用户密码 .
8 回答
I had success (gist)使用来自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命令生成哈希密码:
上一个示例生成此哈希:$ 1 $ HTQUGYUGYUGwsxQxCp3F / nGc4DCYM /
将此哈希密码添加到您的类中,如图所示(不要忘记引号)
puppetlabs的stdlib包实现了一个类似的接受答案的函数pw_hash函数 .
请务必将库添加到您的配置中 . 如果您使用librarian,只需添加
Puppetfile
然后创建一个用户,只需:
正如你所知,puppet中的
sha1
函数不直接用于passwd条目 . 我会说设置哈希而不是密码是好习惯!你不是真的应该能够恢复密码 - 你可以生成一次,或者你可以让puppet每次都生成它 - 生成一次哈希应该足够喔......你可以在Debian / Ubuntu上生成密码像这样:...在CentOS上你可以使用一些grub-crypt命令而不是mkpasswd ...
您可以使用generate函数让Puppet为您创建哈希:
Puppet:具有SHA 512哈希密码的用户
如果你有python 2.6,我想出了一个不需要添加任何东西的方法 . 我在
CentOS 6.4
上的puppet 3.6.2
测试了这个:解释
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
sys.stdout.write is here
以避免'\n'
的print
base64.b64encode(os.urandom(16))[:8])
:os.urandom(16)
创建一个16位长的二进制字符串base64.b64encode
在base64中对此字符串进行编码[:8]
取此字符串的前8个字符(因为base64编码长度可能会有所不同)generate
是一个在 puppet master 上创建文本的木偶函数 . 你可以't use this function like you want because it is '保护'ê.é(last post建议解决这个保护或其他方法)心连心
在我的Vagrantfile中,我这样做了:
在我的main.pp文件中:
只需从grub-crypt --sha-512生成加密密码并粘贴