openssl passwd 的目的是什么

jos*_*ing 5 password openssl password-management passwd chef-solo

我正在阅读“可靠地部署 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` 运行可记忆/纯文本版本,这样您就不必存储密码的加密版本,并在每次需要输入密码时键入/粘贴。

这是唯一的好处吗?如果不是,其他的又是什么?

Sha*_*den 9

该命令的目的是通过单向散列算法(-1输出 MD5)提供您的密码。得到的是一个字符串,它以密码方式从您的密码中派生出来,但如果攻击者获得了散列版本,则不能用于自行查找您的密码(理论上 - 包含了一种盐,可以帮助对抗彩虹表,但是攻击者仍然可以有效地对其进行暴力破解)。

通过散列函数运行您的密码将始终产生相同的散列,然后服务器可以将其与存储的散列进行比较,以验证您的密码与通过openssl命令运行的密码相同。


jos*_*ing 5

在#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 密码加密有如此糟糕的记录。(编辑:阅读下面的评论以获得更好的解释)

  • `因为 Linux 密码加密有如此糟糕的记录` 这​​不是一个真正准确的表示 - 这更像是一个问题,让攻击者访问您的散列密码,然后他们可以使用并蛮力(试图恢复您的原始密码)在他们自己的系统上 - 由于 MD5 是一种计算速度相对较快的算法,攻击者每秒可能能够对您的密码进行数十万或数百万次猜测。MD5 是一个行业标准,由于不是 Linux 特有的弱点,现在不建议使用它。 (2认同)