在生产环境中保护密码

时间:2011-10-18 16:16:51

标签: java linux security

我们有一个在JBoss和Linux上运行的Java Web应用程序。生产环境数据库连接参数来自仅存在于生产环境应用程序服务器上的配置文件。该配置文件只能由运行应用程序的用户ID读取(让我们称之为用户appuser),只有那些可以登录到生产环境服务器并且sudo到appuser的人才是我们运营团队的成员。生产环境本身可以防御所有其他环境。

我们希望这更安全。具体来说,我们希望阻止操作团队读取数据库连接密码和当前配置文件中的其他密钥。

要记住的另一个因素是运营团队负责构建和部署应用程序。

我们有什么选择?该解决方案需要支持手动重启应用程序,以及在操作系统重新启动时自动启动应用程序。

更新

我正在调查的解决方案(向Adamski提示他的建议,大致转化为第1步):

  1. 将一个包装器可执行文件setuid写入启动/停止应用程序的用户,并拥有JBoss目录树中的配置文件和所有内容。

  2. 构建WAR后,使用jarsigner对WAR进行签名。 WAR的构建将通过开发完成。 setuid包装器将验证签名,验证WAR未被篡改。

  3. 将部署过程更改为仅部署已签名的WAR。 setuid包装器也可以将WAR移动到JBoss部署目录中。

3 个答案:

答案 0 :(得分:3)

您可能会发现Jetty人员如何解决此问题很有趣:

http://wiki.eclipse.org/Jetty/Howto/Secure_Passwords

这至少可以确保您不仅可以直接读取密码,还需要付出一些努力才能获得人性化的可读版本。

如果Jetty许可证与您要执行的操作兼容,则可以解除其代码。

答案 1 :(得分:3)

为什么不为操作团队创建第二个用户sudo to,与应用程序的用户ID相比,只有一部分文件权限?

无需更改代码;好又简单。

答案 2 :(得分:0)

简单的方法是使用Unix权限来控制谁可以读取这些文件。但是,密码等敏感数据永远不应该以普通方式存储。还有一些选择。它们需要一些努力,但这是大多数商业产品所遵循的方法。

将加密的密码存储在文件系统中。您可以使用Java加密或XML encryption来执行此操作。

OR

将密码等敏感信息与其他配置详细信息一起存储在数据库中,并使用数据库工具对其进行加密。您仍然需要在文件系统上的某处存储数据库密码。 Oracle提供了一个钱包来存储密码。如果您的数据库供应商没有提供,那么还有一些第三方钱包可以做到这一点。