我们在一些系统中使用 Capistrano 作为部署系统。我们的新系统管理员说我们的设置非常危险,我想知道如何修复它。
我们有一个名为“foo”的部署用户,我们使用它来进行部署”:
cap deploy
这个 foo 用户可以重新启动 apache、清理 tmp 文件等等。
问题是,如果有人窃取了我们的私人 ssh 密钥并以 foo 用户身份访问我们的机器,就能够关闭该网站。
ssh foo@server <-- Able to shutdown apache!
我们如何才能解决这个安全漏洞?
还有其他解决方案可以考虑吗?
答案1
我想补充一点,最好将 foo guy 排除在 ssh 登录之外,我的意思是以用户“superman”的身份连接到服务器,然后使用su foo
成为 foo 用户并执行您想要的任何命令
使用这种方式,攻击者需要密码/私钥才能使用 capistrano。如果他有私钥,他可以连接到服务器但无法执行 capistrano。如果他有密码,他甚至无法连接到服务器,因为用户 foo 无权登录。
答案2
如果有人窃取了我们的私人 ssh 密钥并以 foo 用户身份访问我们的机器,那么就能够关闭网站
使用安全密码加密您的 SSH 私钥,不要将其复制到远程服务器。
如果有人获得了您的私钥,那么没有密码对他们来说就毫无用处。
答案3
这实际上不是 capistrano 的问题,更多的是 ssh 的问题。如果您被允许通过 ssh 登录一台机器(使用密钥或密码),如果攻击者找到这些凭据,他也可以做您在这些机器上被允许做的事情。您的系统管理员必须为您的部署帐户可以做的事情设置界限(文件权限、命令权限……)。这里有一个关于如何为这些任务保护 ssh 的很好的演练http://www.linuxjournal.com/article/8257
答案4
你确定这是一个问题吗?
如果有人窃取了我们的公共 ssh
那将是私钥,而不是公钥。您的管理用户可能以相同的方式进行身份验证,这是一个合理的设置。
您确实需要同样保护这些密钥。对存放私钥的管理主机进行良好的防火墙保护和严格的访问控制。
有一些可以改进的选择:
您可以完全使用双因素身份验证,但如果不对您的管理访问权限执行同样的操作,那么这毫无用处。
另一个选择是让 capistrano 使用 ssh-agent 身份验证。
如果您不使用 capistrano 进行任何操作,除了初始部署,您可以让该用户自毁,即从 .ssh 目录中删除公钥。