MongoDB安全策略
一,修改启动端口
mongo的默认端口为27017 如果启用的是27017端口并且在公网上很容易被人攻击,所以第一点我们要修改端口
sudo ./mongod --dbpath=/data/db --fork --port 29089 --logpath=/data/logs
我们现在启动的是29089端口
启动shell
$ ./mongo
报错:
Failed to connect to 127.0.0.1:27017, reason: errno:61 Connection refused
这是是因为我们修改了端口,而默认连接的是27017的端口,所以我们进入shell时也要指定启动服务似的端口
$ ./mongo --port 29089
这样就可以进入了
二,用户认证
mongodb默认是没有管理账户的,需要开发人员添加管理员账户,在启动mongo服务时添加身份认证才可以进入数据库,所以我们需要做两点:
- 添加管理员
- 启动服务时时添加 auth 指令
mogodb 默认有两个数据库:
在我们初次安装并启动mongo服务后,进入shell管理可以看到已存在两个数据库,在执行show dbs时 会显示以下两个数据库
- admin
- local
我们要在admin里添加用户以便在进入数据库时认证,我是在mac下操作,以下都是mac下的命令,下面演示整个用户添加和认证的过程
1.检查mongo服务是否开启
$ ps -ef | grep mongo
未找到mongo启动进程
2.启动mongo服务
$ cd /usr/local/bin
$ ./mongod --dbpath=/data/db --fork --port 29089 --logpath=/data/logs
成功启动mongo
3.进入shell管理后台
$ cd /usr/local/bin
$ ./mongo --port 29089
4.查看当前所有数据库
$ show dbs
除了admin,local数据库其他都是我业务上使用后建立的数据库,可以看到我们直接就访问到数据库并且可以操作
5.在admin库里添加管理员用户
$ use admin
$ db.getUsers();
使用admin数据库并检查是否存在用户
6 创建用户
$ db.createUser({user:"leinov",pwd:"123456",roles:["root"]})
db.getUsers();
db.createUser()创建一个用户,并分配角色,我们创建里一个超级管理员,这个角色可以对本机mongo实例内的所有数据库做有效的读写操作,关于db.createUser()方法参考官方文档 https://docs.mongodb.com/manual/reference/method/db.auth/
7 重新启动服务并添加认证auth
$ sudo ./mongod --dbpath=/data/db --fork --port 29089 --logpath=/data/logs --auth
在启动命令后面加上auth这样在进入数据库时就会开启认证
8.重新进入shell后台
$ ./mongo--port29089
$ show dbs
提示没有权限查看数据库list
9.切换到admin数据库验证
$ use admin
$ db.auth({user:"leinov",pwd:"123456"})
db.auth()方法是验证用户的操作方法,返回值为0/1 1为验证成功
10.再次查看数据库
$ show dbs
完成端口修改和用户认证基本上就可以保证数据库的安全了,我自己的mongo也被黑了,网上其实还有很多裸奔的mongo数据库,所以一定要给自己的mongo修改端口添加用户认证保证安全。
3.0后的mongo很多方法都有变化,具体参考官方文档 https://docs.mongodb.com/