Ubuntu 上的 SVN+SSH:锁定安全性 - 密码

Ubuntu 上的 SVN+SSH:锁定安全性 - 密码

再会,

我已经设置了一台运行 Ubuntu 12.04 LTS 的服务器。我暂时保留了默认的 SSH 端口,并设置了一个 DynDNS.org 帐户。

从运行 Linux 的单独网络机器上,我能够通过 SVN+SSH 查询我的服务器:

svn --username myName ls svn+ssh://[email protected]/usr/local/svn/repos/private

到目前为止一切顺利:系统询问我用户的密码,并且似乎生成了 SSH 私钥/公钥对。但是,我很担心。

我认为私钥/公钥的意义在于我必须提前向客户端提供适当的密钥。我想锁定此服务器,以便连接到我的 SVN 服务器的人既拥有我提前提供给他们的密钥文件,又拥有用户“myName”的密码。我是否遗漏了什么?此时,似乎某人只需要我的 SVN 服务器的 URL 和用户“myName”的密码,他们就可以登录了。

我怎样才能将其锁得更紧?

谢谢你!

答案1

在 SSH 中,公钥身份验证和密码身份验证(或键盘交互式身份验证)是分开的。您可以使用 PAM、密码或公钥(或任何其他可用工具,如 kerberos GSSAPI)。使用哪一个由客户端和服务器根据功能协商决定。

因此,您不能同时要求公钥和密码;您必须使用其中之一。当然,密钥也本质上与特定用户绑定。理论上,您可以使用 PAM 来实现这一点,但事实上没有 SSH 客户端支持它。

如果我没记错的话,您可以加密密钥,以便用户需要密码才能解密它们,但用户可以使用 openssl 解密密钥并将其存储为解密状态以避免输入密码(如果您担心它们被盗),如果您真的担心它们被破解,攻击者可以做同样的事情,无论您是否向用户提供加密的私钥(但就目前情况而言,这非常非常难以做到)。

另一个方面是服务器的指纹,最好提前发布,方法是将其提供给客户端或使用 DNS 中的 SSHFP RRtype。这样客户端就可以验证它是否连接到正确的服务器,并且无论使用哪种身份验证机制,都可以验证。这始终很重要,但对于密码和键盘交互身份验证来说更重要(以防止凭据被盗)。

相关内容