卡皮斯特拉诺安全

我们在一些系统中使用Capistrano作为部署系统。 我们所说的新系统pipe理员说我们的设置非常危险,我想知道如何解决这个问题。

我们有一个名为“foo”的部署用户,我们用它来部署“:

cap deploy

这个foo用户可以重新启动apache,清理tmp文件等等。

问题是,如果有人窃取我们的私人ssh密钥,并作为foo用户访问我们的机器,能够取下网站。

 ssh foo@server <-- Able to shutdown apache! 

我们如何解决这个安全漏洞?

还有其他解决scheme需要考虑吗?

有一件事我想补充说,最好是排除foo的人能够从sshlogin我的意思是以用户“超人”的身份连接到服务器,然后使用su foo成为foo用户并执行任何你想要的命令

使用这种方式,攻击者需要密码/私钥才能够使用capistrano。 如果他是私钥,他可以连接到服务器,但不能执行capistrano。 如果他有密码,他甚至不能连接到服务器,因为用户foo是不允许login的。

如果有人窃取我们的私人ssh密钥并作为foo用户访问我们的机器,可以将网站取下

使用安全密码encryptionSSH私钥,不要将其复制到远程服务器。

如果有人拿到你的私钥,没有密码就没有用。

这不是一个真正的capistrano问题,更是一个ssh的问题。 如果您被允许通过ssh(使用密钥或密码)login计算机,如果攻击者find这些凭据,他也可以执行您在这些计算机上允许执行的操作。 您的系统pipe理员必须设置您的部署帐户可以执行的操作(文件权限,命令权限等)。 有一个很好的如何在这里保证ssh的任务http://www.linuxjournal.com/article/8257

如果您使用SSH密钥进行身份validation,并且有人盗取了密码,那么情况就像是有人盗取了该用户帐户的密码一样; 在这两种情况下,他都会获得与该账户相关的特权。

这就是为什么SSH 不能从公司networking以外的地方访问公共服务器:这样,即使有人知道root密码,他也无法使用它连接到您的Web服务器。

我希望你用防火墙来保护服务器,否则,你至less要使用Web服务器的内置服务器(Linux上的IPTABLES,我猜)只允许来自外部的HTTP / S通信。 如果你不是…那么做吧。 现在。

你确定这是个问题吗?

如果有人窃取我们的公共ssh

那将是私钥,不是公开的。 您的pipe理用户可能以相同的方式进行身份validation,这是一个合理的设置。

你需要同样保护这些键。 让pipe理主机的私钥防火墙和访问控制严密。

有一些改进的select:

您可以使用双因素身份validation进行一切操作,但是如果不对pipe理访问进行相同的操作,则这是无用的。

另一个select是让capistrano使用ssh-agentauthentication。

如果你没有使用capistrano除了初始部署,你可以让这个用户自毁,IE从.ssh目录中删除pubkey。