无需凭据即可访问MongoDB服务器

时间:2014-04-30 12:07:13

标签: mongodb

我的机器上有一个新的mongodb服务器(2.6.0),我使用以下配置文件启动了mongod实例:

dbpath = c:\mongo\data\db
port = 27017
logpath = c:\mongo\data\logs\mongo.log
auth = true

后来,我通过mongo shell连接到这个mongod实例,并创建了一个管理员用户:

use admin
db.createUser(
  {
    user: "tugberk",
    pwd: "12345678",
    roles:
    [
      {
        role: "userAdminAnyDatabase",
        db: "admin"
      }
    ]
  }
)

然后,我从shell注销并使用以下命令重新连接:

mongo --host localhost --port 27017 -u tugberk -p 12345678 --authenticationDatabase admin

然后,我创建了一个具有root访问权限的用户:

use admin
db.createUser(
    {
      user: "tugberkRoot",
      pwd: "12345678",
      roles: [ "root" ]
    }
)

此处不需要最后一步,但现在应该完全禁用匿名访问。但是,我仍然可以通过mongo shell匿名连接它(即使我没有任何访问权限):

enter image description here

如何防止匿名连接?

2 个答案:

答案 0 :(得分:21)

身份验证阻止您对数据库执行操作(如屏幕截图所示 - 您甚至无法列出数据库),它不会阻止连接 - 毕竟,您必须能够连接到能够验证。

有一个feature request to add timeouts,但目前这基本上就是服务器的行为方式。

值得注意的是,在您尝试做某事之前,这与仅使用telnet连接到端口没有什么不同 - 开头显示的文本"连接到: "等等来自客户端,而不是服务器。一旦它尝试执行任何未经身份验证的操作,甚至列出服务器警告,就会抛出错误,因为它没有足够的权限。

如果要从连接角度锁定内容,MongoDB透视图中唯一的选项是使用bindIp选项限制它侦听的IP地址(默认为all)。例如,使用127.0.0.1将其锁定为本地使用(但您将无法从远程主机连接),这会使复制成为问题,因此在选择绑定地址时要小心。

在MongoDB之外,您应该从防火墙的角度来看待锁定问题。在Linux上,这将是IPTablesufwhosts.allow/deny或类似的。 Windows防火墙不是我的专业领域,但我想你也可以在那里做类似的事情。

答案 1 :(得分:0)

尽管您可以通过在mongo.conf文件的security部分中启用身份验证来保护数据库,如下所示:

security:
  authorization: enabled