让用户上传公钥的安全方法

让用户上传公钥的安全方法

我需要让不受信任的用户、陌生人将其上传id_rsa.pub到我的服务器和给定用户authorized_keysgit在我的例子中是用户)。无需手动执行任何操作即可实现这一目标的最安全方法是什么?

我特别考虑网络界面,但如果另一种方法有很强的优势,我愿意接受想法。

http 守护进程以 user 身份运行http,并且git不得容易受到用户的攻击http,以防http受到损害。

答案1

使用另一个进程作为中间人。您的网络服务(或其他服务)将新请求写入某处的假脱机中。中间人监视假脱机,删除新条目并进行健全性检查,并将有效内容附加到git的authorized_keys 文件中。同一个中间人可以提供 Web 服务可以读取的反馈。但受感染的http用户无法操纵中间人或 git 用户。你的中间人可以是一个守护进程,甚至是一个 cron 作业。

或者,由于您显然有坏主意:),我们可以利用以下事实:1)无论如何,用户git都将拥有对其自己authorized_keys文件的写访问权限,2)您对任何拥有 SSH 的人都可以接受访问用户git。因此,由于您的http用户属于“任何人”,因此请为您的http用户提供一个 ssh 密钥对并将公钥添加到git用户的授权密钥文件中。现在,您的 Web 服务可以简单地执行一个ssh -n git@localhost echo $key >> ~/.ssh/authorized_keys.这里没有安全漏洞,因为具有 SSH 访问权限的陌生人无论如何都可以做到这一点。

如果您不希望您的开放访问git用户能够获得 shell(因为安全性很重要,您知道),但如果您仍然允许git push通过 SSH 发布,那么您可以通过以下方式获得真正的元数据:仅为公钥提交创建一个存储库。您的http用户将拥有此存储库的克隆,并且您的 Web 服务将发出提交和推送。然后,服务器端挂钩可以对提交中的密钥进行健全性检查,并git在验证后将其添加到用户的authorized_keys 文件中。

但我们假设这一切都以某种方式完成。您将拥有一个任何人都可以为您的用户授予自己 SSH 访问权限的系统git。那么 SSH 身份验证到底有什么意义呢?你想让陌生人有 shell 访问权限吗?为什么不直接将git用户密码清空并允许空密码呢?或者,如果您不希望这些用户除了通过 SSH 进行克隆的能力之外拥有任何其他功能,那么为什么不通过 h​​ttp 或 git 协议为您的存储库提供服务来避免整个混乱呢?

答案2

既然您可以让不受信任的用户将其公钥添加到用户authorized_keys的文件中git,那么您不妨让他们知道 的密码git

相关内容