首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >仍然可以在没有凭据的情况下访问MongoDB服务器

仍然可以在没有凭据的情况下访问MongoDB服务器
EN

Stack Overflow用户
提问于 2014-04-30 20:07:13
回答 2查看 19.3K关注 0票数 20

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

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

后来,我通过mongo shell连接到了这个mon神实例,并创建了一个admin用户:

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匿名连接到它(即使我没有任何权限做任何事情):

我应该怎么做才能阻止任何匿名连接?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-30 20:44:14

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

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

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

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

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

票数 29
EN

Stack Overflow用户

发布于 2019-09-20 19:18:54

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

security:
  authorization: enabled
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23387689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档