我应该保护我的MongoDB数据库吗?

时间:2015-10-29 15:06:06

标签: mongodb security

我正在设置两台计算机来运行Web应用程序。 web-host托管MongoDB数据库和NodeJS Web服务器,而worker运行一些要求更高的进程并填充数据库。使用来自worker的SSH隧道,可以使用web-host:27017中的localhost:9999访问workerweb-host:80已设置为可在http://our.corporate.site/my_site/上访问。

目前MongoDB没有对其进行身份验证 - 任何可以联系web-host:27017的内容都可以读取或写入任何数据库。

通过这种设置,我应该如何对MongoDB的请求进行身份验证? this question的答案似乎并不是很明显。考虑只能从localhost进行访问,它似乎与本地文件系统一样安全。在MySQL中,我通常有一个特殊的'web'用户,它具有有限的权限来限制注入攻击的损害,以防我错误地清理输入,但是与MySQL相比,MongoDB似乎不太容易注入(或者至少更容易消毒)。

1 个答案:

答案 0 :(得分:1)

以下是问题:如果您设置了Mongo身份验证,则需要将密钥存储在访问它的计算机上。

因此,假设web-host:80被泄露,密钥也很脆弱。

您可以使用一些缓解流程来保护您的环境,但如果攻击者获得对您环境的root访问权限,则没有灵丹妙药。

首先,我会考虑将mongodb放在专用内部网络上的单独机器上,该机器只能由DMZ中的机器访问(机器可以与内部网络和外部世界通信的网络部分)。

接下来,假设您运行的是基于Linux的系统,您应该能够使用AppArmor或SELinux来限制允许哪些进程发出出站网络请求。在这种情况下,只有您的webapp进程应该能够启动网络请求,例如连接到Mongo数据库。

如果攻击者能够在您的计算机上获得非root访问权限,则SELinux / AppArmor系统策略将阻止他们从自己的脚本启动与数据库的连接。

使用这种架构,您应该比仅通过身份验证扩充当前架构更安全。在SELinux / AppArmor之间进行选择时,我会使用SELinux,因为它更加成熟,并且在我上次检查时具有更精细的控制。