继续昨天的研究,今天彻底把阿里云服务器上的MongoDB安全隐患解决好了。遇到了一些列零七碎八的问题,记录一下:
- 添加管理员用户:
可以参考这里,个人觉得写的挺齐全,比官网解释的要好,可以自己搞三个用户,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”
]
}
而使用Python3的方式连接时,数据库指定业务数据库就可以:
client = MongoClient(‘x.x.x.x’,27017)
client.admin.authenticate(‘forex’,‘xxxxxx’)
Truedb = client.forex_database
collection = db.forex_all
collection.count()
267628
- 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。 - 照理说应该没问题了,谁知道又报了这样一个错: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只是能用罢了,没顾上细致研究这些问题的原因,有大神懂得其中原理的,请多多赐教。