【问题标题】:How do I determine the password attribute value for the Chef "user" resource?如何确定 Chef“用户”资源的密码属性值?
【发布时间】:2014-04-18 16:02:51
【问题描述】:

我正在尝试使用 Chef 11 创建用户帐户,但不确定如何计算 password 属性的值。我已经阅读了用户资源文档http://docs.opscode.com/resource_user.html,特别是“密码影子哈希”部分,但我仍然不确定到底该怎么做。

这个用户是在 Ubuntu 系统上创建的,所以我是否使用他们提供的 openssl 示例并将该命令的输出作为 password 属性值传递?

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

更新:

我已经确定您为 password 属性指定的字符串会直接写入用户的 /etc/shadow 条目。我想剩下的问题是确定该文件期望的值是什么,以及它与配置用户密码的关系。

【问题讨论】:

    标签: passwords chef-infra


    【解决方案1】:

    关键是看到 password 属性值直接写入 /etc/shadow 文件。然后就是阅读 shadowcrypt 的手册页,并最终了解(希望)它们是如何组合在一起的。如果您对某些背景感兴趣,请参阅下面的血腥细节

    如果您对密码的 MD5 哈希表示满意,请使用 openssl 命令生成加密字符串。我使用的版本似乎不支持 SHA 算法。使用 openssl passwd --help 查看您可以使用哪些选项。

    openssl passwd -1 -salt "yoursaltphrase"
    Password: <enter the password>
    $1$yoursalt$fIque2U6AZ.YRAqOu5Eyo/
    

    现在在配方的 password 属性中使用该字符串:

    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 复制了它的加密字符串作为配方的 password 属性值。

    从 /etc/shadow 中,mytestuser: 之后的第二个字段是加密密码。

       mytestuser:THIS_IS_THE_FIELD_YOU_WANT:16063:0:99999:7:::
    

    参见man shadowman crypt

    血腥细节

    从手册页和各种用户论坛拼凑起来,这就是我学到的东西。请注意,这里的术语 encrypted 实际上表示 hashed,因为我不相信密码实际上可以被解密。

    passwd 命令加密用户的纯文本密码并将其写入 /etc/shadow。

    /etc/shadow 条目包含多种格式之一的用户名和加密密码。 “crypt”的手册页描述了这些格式,请参阅其注释部分。

    加密值的格式为:

    $id$salt$encrypted
    

    把它想象成有两部分:盐和实际的加密密码。

    盐部分由两部分组成:

    1. 可选的 id 前缀,用于标识所使用的加密算法,并以“$”作为前缀和后缀,例如“$id$”。
    2. 盐值,最多 16 个字符,以“$”结尾,例如“盐值$”。该值用于计算加密密码。它是一个随机字符串,每次生成密码时都不一样。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      相关资源
      最近更新 更多