返回 登录
0

安全的安装你的MongoDB

阅读4138

有很多关于MongoDB数据泄漏的故事,人们发现许多MongoDB数据会暴露在互联网上,并且没有采取任何保护措施

出现这种问题的根源可能是由于一个糟糕的默认设置所导致的。当你在首次安装时,MongoDB已经开始帮你自动默认,并且无需任何身份的验证。开发人员经常下载MongoDB,在配置时无需身份验证,并且访问MongoDB实例时,也没有任何有关于MongoDB安全模型的知识。然而,这种简单的使用可能会导致在使用过程中不安全的安装。

虽然在内部网上这是可以接受的MongoDB例子,但它从来不是让MongoDB完全未经身份验证就使用的好方法。事实证明,启用一个真实的基本认证是相当简单的,即使是社区共享版。

一旦你启用了MongoDB实例没有认证的话,就会连接到你选择的工具(如robomongo),并要求在管理数据库中创建用户管理员。

use admin

db.createUser(

 {

 user: "admin",

 pwd: "mybeautifulpassword",

 roles: [ { role: "root", db: "admin" } ]

 }

)

一旦创建这个用户之后,就停止MongoDB和改变这个配置启用了身份验证:

security:

 authorization: enabled

如果在配置文件中启用授权,MongoDB将要求所有连接到服务器都要进行身份验证。在MongoDB网站上,有一个很好的教程,但基本上一旦启用授权你可以验证单个数据库或管理数据库。有了上面的指示,在管理数据库中已经创建了一个用户管理。这是最低级别的身份验证,单个用户可以做任何事。

这个配置远远没有达到真正的安全,但至少可以避免在访问MongoDB实例时,不会出现没有密码的情况。它相当于在SQL Server上只启用用户“SA”。

下一步是更改您的软件中的连接字符串,来指定用户和密码。URL的格式是:

mongodb://user:password@localhost/newDb?authSource=admin

就像在SQL Server本地认证、用户名和密码存储在连接字符串,并注意连接字符串的authsource参数。如果省略该参数,C #驱动程序可能尝试去验证指定的数据库(在这个例子中newDB),并且会以失败而告终,因为在管理数据库中只有唯一的用户。然而,authSource参数还可以指定你要使用的数据库进行身份验证。

你不需要更改任何代码,因为连接字符串包含所有的信息来验证连接。

为了避免无保护的MongoDB例子出现,我们直接可以在开发阶段就开始进行保护数据库,那么以后每个人在安装MongoDB时,都会意识到他们需要一个密码来访问数据库。


原文:Secure Your MongoDB Installation

评论