我正在阅读“可靠地部署 Rails 应用程序”
关于定义由 Chef 设置的用户,它说:
“接下来我们需要定义用户,在data_bags/users里面将deploy.json.example文件复制到deploy.json。
使用以下命令为您的部署用户生成密码:
openssl passwd -1 "plaintextpassword"
并相应地更新 deploy.json。”
我的问题是,目的是openssl passwd
什么?只是为了生成一个强密码吗?如果我输入随机字符会不会一样好?
然后,我的“实际”密码是什么?纯文本版本,还是加密版本?我需要将两者的副本保存到我的密码管理器吗?
更新:
是的,我已经阅读了手册。是的,我知道它会生成我密码的 md5 加密版本。我的问题更多是关于你为什么要使用它,而不是使用你自己组成的非常安全的随机字符串(或使用密码生成器生成)。
我能想到的一个好处是您可以键入一个可记住的密码,并在openssl passwd -1 "plaintextpassword"
每次需要输入时运行它。因此,就易于记忆的密码和安全的随机密码而言,您将拥有两全其美的优势。并且每次需要时通过“openssl passwd -1”运行可记忆/纯文本版本,这样您就不必存储密码的加密版本并在每次需要输入密码时输入/粘贴。
这是唯一的好处吗?如果不是,其他是什么?
该命令的目的是通过单向散列算法(
-1
输出 MD5)提供您的密码。得到的是一个字符串,它以密码方式从您的密码中派生出来,但如果攻击者掌握了散列版本,则不能使用它自己找到您的密码(理论上 - 包含一个盐有助于防止彩虹表,但是攻击者仍然可以有效地暴力破解它)。通过散列函数运行您的密码将始终产生相同的散列,然后服务器可以将其与存储的散列进行比较,以验证您具有与通过
openssl
命令运行的相同的密码。在#chef IRC 频道上聊天后,这就是我最终需要知道的。其中大部分实际上是外围信息,而不是
openssl passwd
具体信息,但无论如何......Chef 使用标准
adduser
命令 ( http://linux.die.net/man/8/adduser ) 来添加用户。该命令接受已加密的密码- 因此您需要openssl passwd -1 "plaintextpassword"
在data_bags/users/deploy.json
.因此,您的纯文本密码是“真实”密码。但是因为该
adduser
命令要求您传递的密码已经加密,所以您需要存储的密码是加密版本data_bags/users/deploy.json
这很好用,因为您绝对不想将纯文本密码存储在
data_bags/users/deploy.json
!回到我最初的问题:
我的“实际”密码是什么?纯文本版本,还是加密版本?
纯文本版本是您的真实版本。
我需要将两者的副本保存到我的密码管理器吗? 不,您只存储纯文本版本。每当您想登录时,您都可以使用它。然后系统会对其进行加密,并将其与为您的帐户存储的加密版本进行比较。
openssl passwd 的好处/目的是什么?
没有这样的“好处”。它只是必需的,因为该
adduser
命令将期望它提供的密码已经加密。说了这么多,显然最好不要在 中输入密码
data_bags/users/deploy.json
,只允许通过 SSH 密钥访问。甚至存储密码的加密版本也不是一个好习惯,
data_bags/users/deploy.json
因为 Linux 密码加密的记录如此糟糕。(编辑:阅读下面的评论以获得更好的解释)