在多开发nginx设置中保护密码

时间:2013-06-05 02:27:11

标签: php mysql security ubuntu nginx

我们的服务器上安装了Ubuntu12.04 + PHP + nginx。我们的开发人员可以访问/ usr / lib / php5 /和/ var / www / folders。我们在很多项目上工作,并且在给定时间有50-100个不同的应用/模块,每个应用/模块都有db active。

我们希望提出一种机制来保护我们的数据库密码,并考虑以下因素:

  • 系统管理员创建密码并在某处注册(文件,或sqlite数据库或其他类似的)
  • 应用程序提供一个键,指示他们想要哪个数据库和哪些权限级别,并且此模块返回包含连接所需的所有内容的对象。像“user_manager.client1.ro”,“user_manager.client1.rw”这样的东西。
  • 该机制应该为应用程序提供特定密码,因此可以通过“www-data”访问,但除非知道密钥,否则无法看到所有其他密码。

我们设法获得了原型,但是中央密码提供模块在www-data空间中运行,因此文件/ sqlite总是可以被/ var / www /或/ usr中的任何其他文件访问/ lib / php5因此所有密码都可能被泄露。

有没有办法设置密码提供模块以root权限运行,应用程序从中请求密码?我知道我们可以为此建立一个全新的服务,但是构建和维护似乎太多了(特别是因为这项服务成为我们的单点故障。)

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:0)

我在different answer中提到的另一种方法是 当应用程序要求时,通过API提供加密密钥。

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

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

答案 2 :(得分:0)

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

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

在apache下我会指向suexec或suPHP。但是既然你不使用apache,那对你来说就不是一个选择了。