2017-08-03 152 views
-1

我有一个MongoDB的路由器,在命令行像这样开始:如何要求在mongos路由器上进行身份验证?

mongos --configdb mdbc1:27019,mdbc2:27019,mdbc3:27019 --keyFile /root/mongodb-keyfile & 

我可以连接到,没有立即提供认证:

[[email protected] ~]# mongo 
MongoDB shell version: 3.0.15 
connecting to: test 

MongoDB的要求我验证自己,然后才允许我做了更多的事情,但事实是它让我连接而不提供证书是安全风险。

如何让mongos路由器在接受连接之前要求传递用户名/密码组合?

关于重复:是的,我认为这是重复的。但是,由于这两个副本中的问题都没有得到满意的答复,所以或许值得再次提问。

为了进一步解释:MySQL,SSH和类似的,要求提供有效的登录信息,然后允许用户进一步去请求服务器执行任何操作。但是,MongoDB似乎没有这样做 - 我可以连接到服务器的控制台,并让它运行各种密集的JavaScript,浪费资源并且是一种讨厌的东西,这真的不应该被允许。我如何要求登录是一个人绝对的第一件事?

+0

你真的可以运行密集的JavaScript,浪费资源,并且是一个滋扰,没有被认证?是什么让你如此确信有任何安全风险? –

+0

是的,你真的可以。 作为一个测试,我连接到一个mongo服务器,没有进行身份验证,只是写了“while(1);”并回车。 我通过另一个终端上的“顶部”观看了系统。它立即达到了100%的CPU使用率。 安全性方面,这不会让你入侵。但它确实使服务器更有可能无法履行其常规职责,使得正确验证的进程更可能失败,因为根本没有足够的CPU可用于他们。 –

+0

我可能对此有错。再次检查后,我意识到我正在Mongo服务器本身上执行localhost的测试。当我从另一台机器尝试它时,另一台机器的负载上升 - 而不是Mongo服务器。 –

回答

0

首先,创建用户管理员。

在admin数据库中,添加具有userAdminAnyDatabase角色的用户。

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

然后断开与--auth命令行选项蒙戈shell.Re-启动的mongod实例或,如果使用一个配置文件,所述:例如,以下在管理数据库中创建用户myUserAdmin security.authorization设置。

mongod --auth --port 27017 --dbpath /data/db1 
+0

我正在使用mongos,而不是mongod。 mongos没有--auth参数。 –

+0

我认为https://docs.mongodb.com/v3.0/tutorial/enable-internal-authentication/文档可以帮助你。 –

+0

这并没有回答这个问题。实际上,它具体说“在没有身份验证连接的mongo shell中,切换到身份验证数据库,并使用db.auth()方法进行身份验证” 我试图解决的问题是,它不应该是可能的无需身份验证连接 –

相关问题