如果人们使用密码登录UNIX服务器,则可能被迫使密码失效,然后他们将其更改。
如果人们使用ssh密钥并且没有密码,没有密码有效期,那么没有什么强迫他们定期更改其SSH密钥。
问题:哪种解决方案更安全?为什么用于加固服务器的“ howto”总是建议使用ssh密钥而不是密码?
更新:不算暴力破解-关于密码,因为如果没有类似Fail2ban的解决方案,可能会猜到密码。
#1 楼
密钥和密码都有其优缺点。 “ howtos”之类建议使用SSH密钥的原因是,他们发现自己的缺点不如密码的缺点令人担忧。SSH密钥又长又复杂,远远超过了任何密码。但是,正如您所说,它们没有到期时间,它们位于可以从中被盗的磁盘上。另一方面,它们不会传输到需要密码的远程系统(密钥转发,natch除外)。
密码通常是不可避免的弱密码。虽然可以使用强密码,但是一次又一次地证明人们会使用弱密码并且使用不良的密码习惯……简短,简单,基于单词的简单模式(“ p @ ssw0rd!”),编写他们下来,在多个站点上使用它们,并基于他们的电话号码,孩子的生日,自己的名字。您指出密钥不会过期,但是为什么密码也会过期?为确保暴力攻击在更换密码之前不太可能破解密码。这不是影响密钥的问题。
而且,除了错误的密码外,即使是“好的”密码,在正确的条件下也容易受到暴力(联机或脱机)的攻击。它们必须被传输到其他系统,或者传输到用户可能被误认为发送它们的任何其他地方。
证据的平衡强烈表明,密码较弱,密钥较强。
评论
然后将它们放在可以从中被盗的磁盘上。您可以为ssh密钥设置密码短语。
–user10008
2014年10月10日21:12
同意-返回密码/密码问题:)
– gowenfawr
2014年10月10日21:18
一点也不。即使从哈希表中也不会到达服务器。除非他们可以访问您的驱动器,否则任何人都无法强行使用它;当ssh拥有密码时,每个人都可以将其强行使用。它提供了两种方法的优点。
–user10008
2014年10月10日21:21
抱歉,我应该明确指出-“ :)”的意思是“它返回到人性密码问题”
– gowenfawr
2014年10月10日21:26
即使在代理转发的情况下,私钥也永远不会离开所有者的计算机。在这种情况下,转发的是远程系统可以用来检查本地密钥的端口,但是实际的检查是本地的。远程系统中的某人可以使用私钥签名,但是只有在转发代理时,才不会公开实际的私钥。
–重写
2014年10月11日7:39
#2 楼
使用密码,然后将密码发送到服务器,因此密码的安全性与服务器保护其用于验证密码的内容(例如/etc/shadow
文件)的保护程度有关。当您使用SSH密钥时,您的私钥将保留在客户端,并且不会向服务器发送任何秘密值。即使服务器处于恶意控制之下,或者由于某种原因诱使您连接到假服务器,您的SSH密钥仍然保持安全。伪造的服务器无法获取有关密钥的足够信息来恢复它或执行某些MitM。从这个意义上讲,SSH密钥比密码更健壮,可以防止服务器端的攻击。<br /> 另一方面,SSH密钥必须存储在计算机上的某个位置,这可能是一个漏洞。您必须使用密码保护私钥;否则,笔记本电脑被盗会导致帐户受损。相反,密码只能存储在您的大脑中,这(据说)使其泄漏的可能性较小。
因此,可以说SSH密钥比密码“更安全”,但是相反也可以争论。这取决于上下文。大多数HowTo都会采取更好的键的姿态,因为这种情况通常会导致人类用户对密码的不良记录。用户选择弱密码,然后重用它们(密码重用非常不好)。
评论
我的印象是ssh中的密钥和传递保护了服务器。关于使用密钥保持客户端秘密完整的说法似乎很奇怪:如果服务器已经受到威胁,那么保持客户端密钥/传递秘密的价值是什么? (这仍然保留了false-server参数。)攻击者可以在受到感染的服务器上执行任何操作,包括安装后门。
–n611x007
2015年8月4日,11:50
在SSH中,客户端密钥不是特定于服务器的(通常)。给定的用户具有一个公用/专用密钥对,并使用它来连接到多个服务器。我在这里谈论的问题是,间接损害一台服务器是否会导致访问用户有权连接的所有其他服务器-答案是否定的,因为SSH中使用了客户端密钥。
–汤姆韭菜
15年8月4日在12:16
就像重用私钥/公钥安全性。SE/ 10203。感谢清理!
–n611x007
15年8月4日在12:41
#3 楼
如果我在您的更新中理解的是,如果您可以在密码和密钥中提供相同的熵,那么就其安全性而言,则无济于事。您可能会认为密钥更好,因为它不会每次都输入密码,因此会提供更好的“用户体验”。我认为到您的初衷更多,我们正在讨论密钥的可管理性。 SSH密码与SSH密钥。是的,可以为密码分配策略,该策略允许基本的安全措施(例如,IE密码过期,密码历史记录,mix-max密码长度等),但这不会改变用户的习惯,也不会使安全受到困扰的用户不满意生产(组织级别的平衡)。
密钥提供了一种维护一定程度的熵和可管理性的方法,同时还提供了一种不会妨碍用户的访问方法(一旦设置了密钥对,您可以在没有密码提示的情况下进行身份验证,直到被取消。)
最重要的是,您知道密钥可以受密码保护并提供另一层。
评论
您似乎认为与密钥具有相同熵的密码具有与该密钥相同的安全性,但这是不正确的,因为无论密码仍然传输到没有密钥的远程服务器上,密码是多长时间。使用您的密码连接到流氓服务器,密码就会被盗,使用密钥连接,流氓服务器将无法对其进行任何操作。
–user42178
2014年10月10日22:05
实际上,并非所有密码系统都通过网络传输密钥。例如,Kerberos不会:而是向声称是用户的任何人发送票证,但首先使用用户密码对票证进行加密。因此,必须先在客户端将其解密,然后才能对它有用,为此,密码必须正确。这就需要始终保持通过网络发送密码。另一方面,这意味着您必须有一台以明文形式存储所有密码的计算机,因此必须严格锁定该计算机。
–最傻的
2014年10月11日,11:45
@TheSpooniest Kerberos不需要在KDC上存储纯文本密码;它不使用用户密码对票证进行加密,而是使用从用户密码派生的某种方式对票证进行加密,最好使用单向功能。破坏它会破坏该Kerberos领域内的帐户(派生密钥是攻击者需要认证的全部内容),但是与让/ etc / shadow受到危害相比,攻击者只能使用受到破坏的密码来攻击独立服务。
–cpast
2014年10月11日在21:41
评论
fail2ban不是灵丹妙药。他们在自己的网站上写道:“如果您真的想保护服务,则将服务配置为仅使用两个因素或公共/专用身份验证机制。”我想可以通过使用libpam-google-authenticator配置2要素身份验证来缓解这些问题。这可能比只选择其中两个中的任何一个更好的策略。
我看不到它的价值,但是(服务器端)应该不难启动“使” authorized_keys文件中的密钥“过期”的cron作业。或(客户端)产生一项“过期”密钥的Cron作业(使客户端更改密码)。
我学会喜欢按键的一件事是,您可以为不同的设备(或人)使用不同的按键。这样,您就可以分别“撤消”(从authorized_keys中删除)每个设备的密钥(例如,当您出售或丢失设备时)并完成操作。
相关:在多台机器unix上使用相同的ssh密钥对的良好实践。SE27661