我的机器中有一个新的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匿名连接到它(即使我没有任何权限做任何事情):
我应该怎么做才能阻止任何匿名连接?
发布于 2014-04-30 20:44:14
身份验证阻止您在数据库上执行操作(如您的屏幕截图所示-您甚至不能列出数据库),它不会阻止连接-毕竟,您必须能够连接才能进行身份验证。
有一个feature request to add timeouts,但现在这基本上是服务器的行为方式。
值得注意的是,在你尝试做一些事情之前,这与仅仅使用telnet
连接端口没有什么不同--“连接到:”等开头显示的文本来自客户端,而不是服务器。一旦它试图做任何未经身份验证的事情,甚至列出服务器警告,就会抛出一个错误,因为它没有足够的权限。
如果您想从连接的角度锁定所有内容,那么从MongoDB的角度来看,唯一的选择就是使用bindIp
选项限制它侦听的IP地址(默认为all)。例如,使用127.0.0.1
会将其锁定为本地使用(但您将无法从远程主机连接),这会使复制成为一个问题,因此在选择绑定地址时要小心。
在MongoDB之外,您应该从防火墙的角度来考虑如何锁定内容。在Linux上,这应该是IPTables、ufw、hosts.allow/deny或类似的。Windows防火墙不是我的专业领域,但我想你也可以在那里做类似的事情。
发布于 2019-09-20 19:18:54
尽管您可以通过在mongo.conf文件的安全部分启用身份验证来保护您的数据库,如下所示:
security:
authorization: enabled
https://stackoverflow.com/questions/23387689
复制相似问题