![Google 身份验证器/SSH:每个用户有多个共享密钥,并且多个用户之间共享密钥](https://linux22.com/image/662433/Google%20%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E5%99%A8%2FSSH%EF%BC%9A%E6%AF%8F%E4%B8%AA%E7%94%A8%E6%88%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E5%85%B1%E4%BA%AB%E5%AF%86%E9%92%A5%EF%BC%8C%E5%B9%B6%E4%B8%94%E5%A4%9A%E4%B8%AA%E7%94%A8%E6%88%B7%E4%B9%8B%E9%97%B4%E5%85%B1%E4%BA%AB%E5%AF%86%E9%92%A5.png)
我想补充一下Google 的身份验证器应用到我们的 SSH 身份验证工具链,如本文
但是,PAM 模块似乎基本上在“linux 用户”和“身份验证用户”之间建立了硬链接。这给我们带来了以下两个问题:
- 如果系统上有多个用户(用于多个不同目的),则很难(不可能?)在他们之间共享 google 身份验证方法(TOTP 共享密钥)。
- 如果多个真实的人想要以同一个 Linux 用户身份登录,这就迫使我们在真实用户之间共享秘密。
在标准 SSH 方法中,任何真实用户的密钥都可以添加到任何给定 Linux 用户的 authorized_keys 中,这些问题不适用。如何在 Google-pam 设置中创建等效项?
答案1
共享帐户与双因素身份验证不兼容,因为双因素身份验证通常用于证明用户的身份。您应该使用角色或用户切换来代替共享帐户:某人使用自己的凭据作为自己的帐户进行连接,然后执行操作sudo
以成为共享帐户。这有多种好处,包括大大提高审计能力。
我认为,如果不创建共享密钥并将其提供给所有用户,您就无法让 PAM 按照自己的意愿工作 —— 即使这样,当人们由于令牌重用而被锁定时,您也会遇到麻烦(例如,用户 A 连接并使用令牌 555555,然后用户 B 同时连接并尝试使用相同的令牌 555555,但由于已经使用过一次而失败)。我相信您可以在现有的 Google 身份验证器中允许令牌重用,但这基本上否定了“OTP”的整个“一次性”部分。
答案2
有一种方法可以在登录过程中区分人,尽管所有 5 个人都使用相同的“root”帐户。
当然,PAM 模块在这一点上也有其局限性。
但你应该看看隐私理念。我的这个项目可以让您管理任何类型的令牌(包括 TOTP、HOTP Google Authenticator、硬件令牌、yubikey……)并将这些令牌分配给用户。
现在有两种可能性:
A) 您可以为用户 root 分配多个令牌。并且您知道哪个令牌被交给了哪个人。在服务器上,您安装了一个 privacyidea pam 模块,该模块针对 privacyidea 服务器进行身份验证。privacyidea 确定哪个令牌用于以用户 root 身份进行身份验证,并将其记录在数字签名的审计日志中。因此,您可以推断出哪个人登录了。
B)在 privacyidea 中,每个人都有自己的用户帐户。你为每个用户帐户分配一个令牌,并将该令牌交给人类。现在你可以分配“远程”令牌给 root 用户。因此,root 用户会获得某种虚拟令牌,这些令牌链接到人类用户的真实令牌。当用户“root”进行身份验证时,您会在审计日志中获得有关虚拟/远程令牌和领域用户令牌的信息。因此,您可以直接看到哪个人以 root 用户身份登录。
共享账户是个坏主意
有人说共享账户是个坏主意。我会赞成这个说法。避免使用共享账户!但有时避免使用共享账户可能真的很难。所以问题是,共享账户有什么坏处。如果我们可以减轻共享账户的这种坏处,共享账户可能就不再那么邪恶了。
我猜共享账户最大的坏处是,你无法区分哪个人登录并执行了操作。所以如果你有可能区分哪个人以共享用户A,那么问题可能就没那么大了。在这种情况下,2FA 是一个很好的选择,因为你可以识别出使用哪个第二个持有因素登录共享帐户。如果你能将持有因素的序列号与人类相匹配,那么你又相对干净了。
在您的 SSH 场景中,您可能希望将 ssh 密钥(在授权密钥中)与共享 TOTP Google Authenticator 相结合。人类必须同时拥有一个唯一的 ssh 密钥(您可以通过它识别人类)和一个共享 TOTP。