我们有一个在 JBoss 和 Linux 上运行的 Java 网络应用程序。生产环境数据库连接参数来自一个只存在于生产环境应用服务器上的配置文件。该配置文件只能由同时运行该应用程序的用户 ID 读取(我们称该用户为 appuser),并且唯一可以登录生产环境服务器并向 appuser 执行 sudo 操作的人是我们的运营团队的成员。生产环境本身与所有其他环境隔离开来。
我们想让它更安全。具体来说,我们希望防止运营团队读取当前在配置文件中的数据库连接密码和其他 key 。
要记住的另一个因素是运营团队负责构建和部署应用程序。
我们有哪些选择?该解决方案需要支持手动重启应用程序以及在操作系统重启时自动启动应用程序。
更新
我现在正在研究的解决方案(向 Adamski 提示他的建议,大致转化为步骤 1):
为启动/停止应用程序并拥有配置文件和 JBoss 目录树中的所有内容的用户编写
setuid
的包装器可执行文件。构建后使用
jarsigner
对WAR 进行签名。 WAR的 build 将通过开发来完成。setuid
包装器将验证签名,确认 WAR 未被篡改。更改部署过程以仅部署签名的 WAR。
setuid
包装器还可以将 WAR 移动到 JBoss 部署目录中的适当位置。
最佳答案
为什么不直接为运营团队创建第二个用户来执行 sudo,与您的应用程序的用户 ID 相比,该用户仅具有文件权限的子集?
无需更改代码;漂亮而简单。
关于java - 在生产环境中保护密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7810461/