9

我们的服务器上有一个 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权限运行并且应用程序从中请求密码?我知道我们可以为此构建一个全新的服务,但构建和维护似乎太多了(特别是因为该服务成为我们的单点故障。)

有什么建议么?

4

3 回答 3

1

使用权限,您可以执行以下操作:

1) 给一个开发者一个用户

2)chown /var/www/ 下的每个文件夹到用户 www-data,以及该站点的特定组,例如: /var/www/site-a www-data group-a /var/www/site-b www-data group-b 等

3)chmod每个目录(以及所有带有-R的子目录和文件)到770

4)将每个开发人员添加到他实际开发的每个组中。

于 2013-06-05T22:45:08.137 回答
0

正如我在另一个答案中提到的,另一种方法是在应用程序要求时通过 API 提供加密密钥。

然后,您受信任的开发人员将使用唯一密钥查询 API 以获取相关凭据。密钥可以映射到一组凭据(用于多个项目的开发人员)。

如果您通过客户端证书或 IP 过滤保护 API,您将降低数据泄露的风险(如果访问密钥丢失,您仍然需要在正确的网络中或拥有访问 API 的证书)。如果您信任开发人员(根据您的评论),我会支持证书。

于 2015-04-12T18:36:09.633 回答
0

最简单的解决方案是运行管理凭据的应用程序,并将它们从 Web 服务器的不同实例(显然侦听不同的端口)交给开发人员,然后您可以以不同的用户身份运行该实例并收紧权限,以便只有该用户有权访问它需要的秘密文件。

但是创建一个额外的用户,不要以root身份运行它。

在 apache 下,我会指向 suexec 或 suPHP。但由于您不使用 apache,所以这不是您的选择。

于 2015-05-20T22:47:55.067 回答