即使启用了auth,mongodb也允许访客连接

时间:2013-09-04 05:06:38

标签: mongodb

MongoDB版本:2.4.5

在mongodb配置中启用auth = true。我仍然可以从远程主机连接到mongodb实例。它确实强制执行身份验证,因为我无法执行大多数查询,因为我获得了“未经授权”访问但我仍然可以运行查询以获取有关服务器的信息,例如我希望服务器在启用身份验证时拒绝没有凭据的连接。

2 个答案:

答案 0 :(得分:4)

是的,基本上你可以在没有身份验证的情况下连接但几乎不能做任何事情。你可以运行db.serverBuildInfo()

db.version()

db.adminCommand({ping:1})

db.adminCommand({whatsmyuri:1})

db.adminCommand({features:1})

例如,也许还有一些其他命令。

对我来说似乎有点痛苦的是能够运行:

for(var i=0;i++<20000;){db.adminCommand({forceerror:1})}

会生成一些日志。

我查看了源代码,你可以看到这种行为是一种bug。 shell启动的源代码位于:https://github.com/mongodb/mongo/blob/master/src/mongo/shell/dbshell.cpp

基本上,有两种类型的测试针对mongoshell的密码和用户名参数中给出的参数值运行。启动时会检查您是否提供了--password参数并且之后没有写入密码。如果没有指定在没有db的情况下启动,并且您指定的用户名长于0,则会检查是否会尝试进行身份验证(检查第1043行)

if (!nodb && username.size())

但这就是全部。如果你根本没有指定凭据,它似乎将连接,甚至没有尝试进行身份验证。我想在初始化阶段应该检查天气我们连接的进程是否正在运行身份验证并在需要时强制执行authenicaion。

答案 1 :(得分:0)

您是否创建了管理员用户?

  

身份验证需要admin数据库中至少有一个管理员用户。您可以在启用身份验证之前或启用身份验证之后创建用户。

来自http://docs.mongodb.org/manual/tutorial/enable-authentication/