阿里云中的mongodb配置漏洞

在阿里云看到的mongodb配置漏洞其中的手动解决方案已经不适用于目前的3.x版本的mongodb.于是这边找了一下资料写一个简单的教程

原因

mongodb之所以会产生的原因还是在于平时我们启动mongodb都是直接mongod –dbpath启动的. 这种启动方式是没有用户名和密码验证的.所以会导致某些用户可以不经过授权直接访问数据库内容.解决方案也很简单 加上-auth即可

mongodb3.0添加auth用户

参考官方案例推酷案例 的添加用户先添加一个用户.因为我们这边只想单纯的添加一个root用户并且他拥有管理所有库的权限权力所以我们可以这样

mongo 
use admin; 
db.createUser({ 
       user:"root", 
       pwd:"rootpassword", 
       roles:[{role:"root",db:"admin"}] 
   }) 

这样就创建了一个用户名为密码为的用户.接下来我们就检查用户是否创建成功和重启下mongodb服务

show users  //如果创建成功这条语句会看到新创建的用户 
db.shutdownServer() //重启服务器 

开启auth启动mongodb

mongod -auth --dbpath=xxx 

输入用户账号密码来使用数据库

因为我们开启了auth所以我们show dbs 等这些指令都需要认证使用.

mongo 

db.auth('root','rootpassword'); 

仅需一条就ok 接下来就愉快的使用mongodb吧

如何修改auth的账号密码

更新用户文档 注意当你更新的时候请重新填写roles

mongo 
use admin 
db.auth('root','rootpassword'); 
db.updateUser("root",{ 
       roles:[{role:"root",db:"admin"}], 
       pwd:"rootNEWPW" 
   }) 

添加新用户管理其他数据库

use soulChat; 
db.createUser( 
{ 
user:"user", 
pwd:"pwd", 
roles:[{role:"userAdmin",db:"soulChat"},{'role':"readWrite",db:'soulChat'}] 
} 

参考代码

// creat database user
db.createUser(
  {
    user: "user1",
    pwd: "user1",
    roles: [ { role: "readWrite", db: "yapi" } ]
  }
 )


db.auth('user1','user1')

// update user role function1
 db.updateUser("user1",{ 
       roles:[{role:"root",db:"admin"},"root","readWriteAnyDatabase"], 
       pwd:"user1" 
   }) 

// update user role function2
 db.grantRolesToUser(
"user1",
[{role:"readWrite", db:"yapi"}]
)