我们的服务器上有一个 Ubuntu12.04+PHP+nginx 设置。我们的开发人员可以访问 /usr/lib/php5/ 和 /var/www/ 文件夹。我们从事很多项目,在特定时间有 50-100 个不同的应用程序/模块,每个应用程序/模块都具有活动数据库。
我们想提出一种机制来保护我们的数据库密码,并考虑以下因素:
- 系统管理员创建密码并将其注册到某处(文件或 sqlite db 等)
- 应用程序提供了一个键,指示他们想要哪个数据库和什么权限级别,并且此模块返回一个对象,其中包含连接所需的所有内容。类似“user_manager.client1.ro”、“user_manager.client1.rw”的东西。
- 该机制应向应用程序提供特定密码,因此可以通过“www-data”访问,但除非知道其密钥,否则无法看到所有其他密码。
我们已经设法得到了一个原型,但是中央密码提供模块在 www-data 空间中运行,因此文件/sqlite 总是可以被 /var/www/ 或 /usr/lib/ 中的任何其他文件访问php5,因此所有密码都可能被泄露。
有没有办法设置密码提供模块以root权限运行并且应用程序从中请求密码?我知道我们可以为此构建一个全新的服务,但构建和维护似乎太多了(特别是因为该服务成为我们的单点故障。)
有什么建议么?