SSH 密码与密钥认证

信息安全 公钥基础设施 密码管理 SSH
2021-09-06 09:09:25

我通常被告知,对于 SSH,公钥身份验证优于密码身份验证。然而,我们以前的管理员反对公钥,只发布密码,并注意为不同的服务器使用不同的密码(pwgen 生成的密码;它们相当难以暴力破解,但保证由用户写下来)。所以我想问:

  1. 使用密码对管理(具有或多或少 sudo 功能的非 root 用户)完整 shell 登录是否更有意义。鉴于密码不同,其中密钥可能不存在,并且密码也不同于用于 sudo 的密码。
  2. 即使对于 sftp 上传的特殊帐户(仅限于特定目录),密码最终在其他服务器上的文件中也可以,因为上传需要无人看管?公钥最终将未加密地存储在同一台其他服务器上。
4个回答

有点像这样……我离婚了,有一个刻薄的前妻。我还有三个很棒的男孩,他们像大多数男孩一样健忘,失去东西,也很爱他们的妈妈。当我的孩子们长大到需要我家的钥匙时,我做出了一个决定:我是使用钥匙锁还是其中一个数字键盘?如果我使用钥匙锁,我的儿子们肯定会经常丢失钥匙。我会接到电话让他们下班回家;而且很有可能我不得不更换锁或不时重新输入钥匙,因为“丢失的钥匙”的数量(或我尖刻的前妻现在拥有一把的可能性)达到了令人不舒服的极限。

虽然可能不是世界上最安全的,但有了数字锁,我不用担心钥匙丢失;当他们忘记时,我可以给我的儿子发短信(不用回家);当我觉得它受到损害时,我可以定期更改它。我还可以决定我想要它多长时间和/或复杂程度。如果我认为我的前任有,我也可以改变它。更简单,总拥有成本更低。

钥匙锁就像PK。数字锁就像密码。最后,我可以告诉你,使用数字锁我更安全,因为我选择自己的命运,并且可以随心所欲地动态地这样做。请记住,现实是门只是进入我家的途径之一。

在密码验证的情况下,用户记住密码并负责不向任何人透露密码。使用基于公钥的身份验证,用户在某处拥有私钥,存储为文件

用户更喜欢基于密钥的身份验证,因为它在实践中使用起来更方便(SSH 客户端将透明地使用密钥,因此对人类用户来说是零努力)。但是,基于密钥的身份验证意味着以下内容:

  • 用户自己通过将公钥放在他的.ssh/authorized_keys文件中来管理密钥,以及哪些密钥被接受或不被接受。
  • 私钥必须作为文件存储在某处,可能(但不一定)受密码保护。
  • 服务器系统管理员完全无法选择本地密码(或缺少密码)。

一些系统管理员更喜欢用户使用基于密钥的身份验证,因为他们不相信人类用户会记住强密码;他们认为,与生成和使用强密码相比,普通用户更容易维护私钥文件的安全性。然而,大多数系统管理员认为私钥文件是一个明显的漏洞,而对于密码,他们有缓解机制:他们可以在选择密码时强制执行“密码规则”,并且他们可以在需要时集中阻止或重置密码。这实际上是系统管理员对用户的信任程度(信任他们的能力,而不是他们的诚实)与系统管理员是多少控制狂之间的平衡

密码

  • 很容易忘记。
  • 可以很容易猜到/破解。
  • 在您可以使用的字符、长度...方面可以有不同的限制。
  • 经常在不同的服务上重复使用。
  • 你听说过那些密码数据库泄露了吗?

挑战-响应

SSH 密钥(或 api 令牌)

  • 不必记住(存储在您的计算机上)。
  • 更难猜测/破解(与字典攻击相比)。
  • 不需要在不同的服务上共享。

不对称/密码强度。

  • 大多数公钥/私钥解决方案都使用非对称密钥(没有听说过,但不会把钱花在上面)。如果您的公钥被泄露,那么攻击者就无法访问系统。
  • 密码数据库需要单向加密;一个足够强大或浪费了足够多的计算周期以致难以暴力破解的算法。

重置工作流程

在这里使用密码或 ssh 密钥是无关紧要的,在某些时候用户会忘记他们的密码(例如他们在创建密码时有 CAPS LOCK...)或重新安装他们的系统(例如时间机器/升级...)。你如何应对这种情况?您将不得不更改密码/密钥(假设之前的密码已泄露)并将新密码安全地传达给用户。

请参阅接受的答案如果你的孩子试图进入你的房子。挑战是你首先需要确认是你的儿子(例如你知道这是他们的电话号码,你认出他们的声音,这就是挑战部分)。非常常见的工作流程是生成一个临时密码/一次性密码,然后让您的儿子更改密码。但是,这很可能是:给他们一个一次性密码,让他们上传新的 ssh 密钥/api 令牌。哎呀,如果您的键盘/键锁已连接,您甚至根本不用费心让他们更改他们的凭据,而只是远程让他们进入。

注意:没有什么可以阻止您的前妻与您的儿子勾结以欺骗您并进入房屋。

哪一个更好?

这取决于您的用例和可接受的损失。由于用户拥有两个密码/ssh 密钥/api 令牌,因此用户可以共享它们。如果您支持密码验证并且密码被泄露,那么您的一些用户可能不得不在外部网站上更改他们的密码——因为他们在其他地方重复使用相同的密码。如果您使用公钥/私钥,那么您就不必担心了。

您不必选择其中之一。你可以同时使用!例如,您可以同时拥有钥匙锁(您的个人副本)和数字挂锁(客人)。

密码可以被暴力破解。猜测公钥本质上是不可能的,以至于它们可以被认为是完全安全的。每个用户只能分配一个密码,而一个用户帐户可以安装多个密钥。如果我丢失了我的笔记本电脑,我只需要在 authorised_keys 文件中删除我的笔记本电脑的密钥条目,并且该帐户仍然可以从我的其他设备使用自己的密钥访问。单个键也可以被赋予命令限制,允许运行特定命令但不是完整 shell 的自动连接。密码有任何好处的唯一方法是在不登录的情况下共享对现有帐户的访问(上传新密钥),如果您需要删除密钥是个人的访问权限,这会打开必须更改密码的安全漏洞。