我正在阅读“ 可靠部署Rails应用程序 ”
对于由大厨设置的用户来说,它说:
“接下来我们需要定义用户,在data_bags / users里面将deploy.json.example文件复制到deploy.json。
使用以下命令为您的部署用户生成密码:
openssl passwd -1 "plaintextpassword"
并相应地更新deploy.json。“
我的问题是, openssl passwd的目的是什么? 只是为了生成一个强大的密码? 如果我input随机字符,会不会同样好?
然后,我的“实际”密码是什么? 纯文本版本还是encryption版本? 我是否需要将两者的副本保存到我的密码pipe理器中?
更新:
是的,我已阅读手册。 是的,我知道它会生成密码的MD5encryption版本。 我的问题是关于为什么要使用它,而不是使用一个非常安全的随机string,你自己组成(或使用密码生成器生成)。
我能想到的一个好处是,你可以input一个可记忆的密码,并且每次需要input时都可以通过openssl passwd -1 "plaintextpassword"来运行它。 所以,就一个容易记住的密码和一个安全随机的密码而言,你会有两全其美的。 并且每次需要时通过“openssl passwd -1”运行可记忆/纯文本的版本,这将节省您不得不存储encryption版本的密码,并在每次需要input密码时input/粘贴该密码。
这是唯一的好处吗? 如果不是,其他的呢?
该命令的目的是通过单向散列algorithm( -1输出MD5)提供密码。 得到的是一个string,它是密码的密码,但是如果攻击者拿到哈希版本的话,就不能自己find你的密码(理论上,这里有一个帮助彩虹表的盐,攻击者仍然可以有效地对付它)。
运行完散列函数的密码将始终导致相同的散列,然后可以通过服务器将其与存储的散列进行比较,以validation您是否具有与通过openssl命令运行的密码相同的密码。
在#chef IRC频道上进行了一些聊天之后,这里是我最终需要知道的。 大部分是实际的外围信息,而不是openssl passwd特定的,但无论如何…
厨师用户添加用户的标准adduser命令( http://linux.die.net/man/8/adduser )。 该命令接受已经encryption的密码 – 因此,为什么需要在data_bags/users/deploy.json存储encryption版本(由openssl passwd -1 "plaintextpassword"生成的openssl passwd -1 "plaintextpassword" )。
所以,你的纯文本密码是“真正的”密码。 但是,因为adduser命令期望您传递的密码已经被encryption,所以您需要将encryption的版本存储在data_bags/users/deploy.json
这很好,因为你肯定不想在data_bags/users/deploy.json存储一个纯文本密码!
回到我原来的问题:
我的“实际”密码是什么? 纯文本版本还是encryption版本?
纯文本版本是你真正的。
我是否需要将两者的副本保存到我的密码pipe理器中? 不,您只存储纯文本版本。 每当你想login的时候,你都会使用它。然后系统对它进行encryption,并将它与它为你的帐户存储的encryption版本进行比较。
openssl passwd有什么好处/目的?
没有这样的“好处”。 这只是需要的,因为adduser命令会期望它的密码已经被encryption。
说了这么多的话,显然在data_bags/users/deploy.json中data_bags/users/deploy.json不痛苦一个密码,只允许通过SSH密钥访问。
在data_bags/users/deploy.json存储密码的encryption版本并不是一个好习惯,因为Linux密码encryption的logging很糟糕。 (编辑:阅读下面的评论以获得更好的解释)