MongoDB的安全配置问题

继续昨天的研究,今天彻底把阿里云服务器上的MongoDB安全隐患解决好了。遇到了一些列零七碎八的问题,记录一下:

  1. 添加管理员用户:
    可以参考这里,个人觉得写的挺齐全,比官网解释的要好,可以自己搞三个用户,root用户,admin用户和普通用户。
    root是超级用户,拥有各种权限不用多说了,admin也可以管理数据库的成员,也有权限查看数据库内的一切内容,普通用户这里能读取和修改指定的某些业务数据库即可。
    btw发现一个mongodb的bug,我也不知道为什么会这样:
    当时创建用户时,普通用户的数据库是业务数据库,但通过show user查看到的普通用户的db信息居然是admin(下面返回结果的加粗斜体部分),在用Robo 3T授权的时候也要指定数据库为admin!!!可是连接到数据库所能查看的内容还是业务数据库内的资料,好奇怪!
    {
    “_id” : “admin.forex”,
    “user” : “forex”,
    "db" : “admin”,
    “customData” : {
    “name” : “XXX”,
    “email” : “XXX”
    },
    “roles” : [
    {
    “role” : “readWrite”,
    “db” : “forex_database”
    }
    ],
    “mechanisms” : [
    “SCRAM-SHA-1”,
    “SCRAM-SHA-256”
    ]
    }
    MongoDB的安全配置问题_第1张图片
    而使用Python3的方式连接时,数据库指定业务数据库就可以:

client = MongoClient(‘x.x.x.x’,27017)
client.admin.authenticate(‘forex’,‘xxxxxx’)
True

db = client.forex_database
collection = db.forex_all
collection.count()
267628

  1. Anyway, 在重启mongodb的时候也遇到一些问题,我的阿里云是ubuntu16,mongo4.0.1,不知为何service --status-all时候返回结果里没有mongod或mongodb的服务,所以sudo service mongod restart是不能重启mongodb的。之前在没开启安全认证的时候应该也遇到过同样的问题,只不过没记录下来,解决办法:使用命令行开启mongod服务:
    竟然不给报错!我配置好了/etc目录下的mongo.conf文件,dbpath是默认的路径storage:
    dbPath: /var/lib/mongodb
    但是在mongod启动服务的时候它报错/db/data路径不存在,也就是说mongod命令没使用这个conf配置文件启动?!(在这就不截屏了)于是采用命令行加参数的形式强制加上这个配置文件,mongod --config /etc/mongo.conf。
  2. 照理说应该没问题了,谁知道又报了这样一个错:Error parsing YAML config file: yaml-cpp: error at line XXX, column 1: end of map not found,这个lineXXX的位置刚好使我配置security的地方,查了一下才知道mongodb版本4以上鸡事儿真多,参考这篇文章?
    https://blog.csdn.net/zhao_5352269/article/details/88951863
    写得不错。
    开启认证那里就按照它的写吧,
    security:
    authorization: enabled
    这样。
    我自己的文件本来有一个auth=true,可能是我之前加的吧,因为一直comment掉了,也没发现这样写不对,今天试了一下,这个版本的mongodb不能在用auth的参数配置,一定要用authorization来配置,问题不在于等号还是冒号,有没有缩进或是空格。

这回没再报错了,命令行nohup mongod --config /etc/mongod.conf &
运行一下,mongodb的服务就开启了,没有特殊情况就一直这么开着行了。这样安全认证这一part就配置好了,在阿里云安全组那里可以再加一些rule,通过ip和端口号限制一下入站数据流量,使安全性能更高,这样有了密码和防火墙,mongodb应该会安全很多。

代码菜鸡的学习之旅很心酸,过程中有些问题也没有弄明白为什么,比如1里面的bug和2里面service --status-all看不到mongo服务的问题,mongodb只是能用罢了,没顾上细致研究这些问题的原因,有大神懂得其中原理的,请多多赐教。

你可能感兴趣的:(MongoDB的安全配置问题)