我尝试使用Chef 11创建用户帐户,但我不确定如何计算密码属性的值。我已经阅读了用户资源文档http://docs.opscode.com/resource_user.html,特别是"密码阴影哈希"部分,我仍然不确定究竟要做什么。
此用户是在Ubuntu系统上创建的,所以我是否使用他们提供的 openssl 示例并将该命令的输出作为密码属性值传递?< / p>
openssl passwd -1 "theplaintextpassword"
但是,每次运行命令时,输出都不同。它还支持各种选项(-crypt,-1,-apr1),我应该使用哪一个?
我一直在查看unix passwd命令帮助,它说它加密了值,但没有说明它使用的是哪种方法。阴影和地穴的帮助也不会消除任何光线。
对于这个例子,数据包太过分了,我有一个我想用于这个帐户的值,只想用密码属性来指定它。
这是用户资源部分:
user 'mytestuser' do
comment "Test User"
home "/home/mytestuser"
shell "/bin/bash"
supports :manage_home => true
password "what goes here?"
action :create
end
更新
我已确定您为密码属性指定的字符串会直接写入用户的/ etc / shadow条目。我想剩下的问题是确定该文件期望值是什么,以及它与配置用户密码的关系。
答案 0 :(得分:18)
关键是看到密码属性值直接写入/ etc / shadow文件。然后是阅读 shadow 和 crypt 的手册页,最后理解(希望)事情是如何组合在一起的。如果您对某些背景感兴趣,请参阅下面的 The Gory Details 。
如果您对密码的MD5哈希没问题,请使用 openssl 命令生成加密字符串。我正在使用的版本似乎不支持SHA算法。使用 openssl passwd --help 查看您可以使用哪些选项。
openssl passwd -1 -salt "yoursaltphrase"
Password: <enter the password>
$1$yoursalt$fIque2U6AZ.YRAqOu5Eyo/
现在在食谱的密码属性中使用该字符串:
user 'mytestuser' do
comment "Test User"
home "/home/mytestuser"
shell "/bin/bash"
supports :manage_home => true
password '$1$yoursalt$fIque2U6AZ.YRAqOu5Eyo/'
action :create
end
就我而言,我最终手动创建测试用户,然后将其加密字符串从/ etc / shadow复制为配方的密码属性值。
从/ etc / shadow, mytestuser:之后的第二个字段是加密密码。
mytestuser:THIS_IS_THE_FIELD_YOU_WANT:16063:0:99999:7:::
参见 man shadow 和 man crypt 。
血腥细节
从手册页和各种用户论坛拼凑起来,这就是我所学到的。请注意,术语加密在这里实际上意味着哈希,因为我不相信密码实际上可以被解密。
passwd 命令加密用户的纯文本密码并将其写入/ etc / shadow。
/ etc / shadow条目包含各种格式之一的用户名和加密密码。 “crypt”的手册页描述了这些格式,请参阅其NOTES部分。
加密值的格式为:
$id$salt$encrypted
将其视为两部分:盐和实际加密密码。
盐部分由两部分组成:
id可以是以下之一,表示使用的加密算法:
blank = DES (the default when no $id$ prefix is found)
1 = MD5
2a = Blowfish
5 = SHA-256
6 = SHA-512
加密密码长度根据加密算法确定:
DES = 8 characters
MD5 = 22 characters
SHA-256 = 43 characters
SHA-512 = 86 characters
Blowfish = ???
您可以使用 openssl passwd 命令生成各种密码哈希值。 它支持以下选项:
-crypt DES-based standard Unix password algorithm (default)
-1 MD5-based password algorithm
-apr1 MD5-based password algorithm, Apache variant
-salt string use provided salt