安全地限制对私有Debian存储库的访问


9

我在寻找一种方法来限制对私有Debian存储库的访问,并能够以非交互方式(例如,使用脚本)对其进行身份验证

我发现最有用的文章实际上是Debian管理站点上的文章,但是安全方法使用ssh和公共/专用密钥。它工作得很好,但是每个主机的公钥都必须位于远程authorized_keys文件中才能成功进行身份验证。关于提供密码给ssh://并没有说什么,但我想应该可以。

您是否尝试过其他替代方法(例如ftps)?

提前致谢


我上面的文章有一个问题,就是它不仅赋予APT存储库访问权限,而且还提供了对我的APT存储库机器的外壳访问权限。那是不可接受的风险。
BobDoolittle 2014年

Answers:


5

如果您始终apt-get手动在服务器上运行(apt-getcron 不会启动自动命令),则可以考虑使用ssh代理转发。这样可以避免必须在您管理的每个服务器上管理一个公钥/私钥对,这比在每台服务器上保留私钥更安全。

初始配置 -连接到要管理的服务器,并向其中添加以下内容/etc/apt/sources.list(此示例假定您希望服务器连接到该manager帐户):

    deb ssh://manager@my.repository.org/path other stuff
  • 在您自己的计算机上创建一对私钥/公钥johndoe,例如以您的登录名(只要您的计算机在debian上运行:如果没有,则可以从专用于管理的debian服务器上进行此操作):

    ssh-keygen
    
  • 确保它受到强大的短语保护
  • 将您的公钥复制到以下位置的存储库服务器中/home/manager/.ssh/authorized_keys

    ssh-copy-id manager@my.repository.org
    

每个管理会话一次

  • 通过键入以下命令在计算机上启动ssh代理:

    eval `ssh-agent`
    
  • 将密钥添加到代理(这需要您的密码):

    ssh-add
    

管理服务器

  • 使用连接到要管理的服务器ssh -A-A激活代理转发):

    ssh -A some.server.org
    
  • 切换到root(如果要使用sudo,则需要配置/etc/sudoers,否则sudo将破坏代理转发,请阅读):

    su
    
  • 由于代理程序转发,您现在应该可以使用ssh连接到存储库的经理帐户,而无需再次输入密码。因此,apt-get应该可以正常工作:

    apt-get udate
    

结束管理会话

  • 完成服务器管理后,从代理中删除密钥:

    ssh-add -D
    

优点

  • 不需要太多的初始配置
  • 只需要一个私钥
  • 私钥受强大的密码短语保护
  • 如果某人获得了对您其中一台服务器的超级用户访问权限,则他们将无法立即访问您的存储库服务器。
    • 请注意,如果黑客耐心且有资格,他可以等到您使用代理转发连接到服务器,然后他可以劫持转发机制以获取对您的存储库服务器的访问权限。
    • 为了防止这种情况的发生,您可以使用ssh-ask接受/拒绝每次使用密钥的尝试。
    • 无论如何,黑客都无法访问私钥本身:只有在您连接到服务器时,他才能劫持转发机制以使用私钥。

再次感谢MiniQuark。实际上,更新是无人值守的,但是这是我可以用于测试目的的一种很棒的方法。
汉伯,2010年

我的荣幸!:)很高兴,如果有帮助。
MiniQuark 2010年

4

一种方法是仅允许一组IP访问存储库。这对于LAN和VPN非常有效。

简单高效。


1
谢谢安托万:)。实际上,现在可以使用该方法(通过OpenVPN连接访问http)访问我拥有的存储库。我限制了属于VPN的IP。此处的缺点是,每个主机都需要连接到VPN才能访问存储库,这有点烦人(管理多个证书/密钥)。很抱歉没有在问题中指定。
亨伯2010年

没错,管理OpenVPN很麻烦,但是它使管理存储库的安全性非常简单。同样,用户无需在VPN中使用凭证就麻烦。
Antoine Benkemoun,2010年

2

该SSH +公钥/私钥的解决方案是不是不好:

  • 以root用户身份在客户端计算机上登录
  • 类型ssh-keygen,然后ssh-copy-id your_login@your.repository.org
  • 编辑/etc/apt/sources.list并添加如下内容:

    deb ssh://your_login@your.repository.org/path other stuff
    

当然,它要求您将每台服务器的公钥放入服务器上的~/.ssh/authorized_keys文件中,但并没有那么复杂(请参见上文),它使您可以控制在任何给定时间允许或不允许的服务器(可以在以下位置删除密钥)随时都可以authorized_keys)。


感谢MiniQuark。是的,该解决方案还不错,但是如果在openssh服务器中禁用了密码身份验证,则ssh-copy-id无效。我考虑过使用存储库在每个客户端上分发相同的密钥文件,以便能够使用它。为了提高安全性,将使用具有最小权限的用户。这几乎与共享凭据相同。我目前正在测试此方法,以检查行为/工作方式。
亨伯2010年


0

您问题中的链接显示了多种方法。您需要数字2,https +基本身份验证。


谢谢贾斯汀。我认为只有在安装了apt-transport-https的情况下,使用apt才能进行https传输。这是一个有趣的选择。唯一的缺点是sources.list中的凭据
Humber 2010年

chmod 600 /etc/apt/sources.list
贾斯汀
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.