• MongoDB安全使用指引


     

    MongoDB社区版有三大主要安全措施,分别是安全认证、角色授权和TLS/SSL传输加密。当然除此之外,定期做数据库备份,也是很好的安全防范手段。另外,本文还将对一些提升MongoDB安全性的细节做阐述。其中部分安全措施,暂时不能细化操作步骤,以后实践中再补充。

    开发期间做过多的安全配置,会影响开发效率,在必要时按部就班实施各种安全措施即可。

    本文不关注分片情况下和MongoDB企业版的安全措施。

    一、      安全认证

    MongoDB启动时可以附带多种配置,其中-auth就是开启安全认证的参数,开启认证的同时需配置数据库管理员用户名和密码,命令示例:mongod --auth。

    如上方式启动数据库后,通过mongo命令进入shell,通过以下步骤配置指定数据库账户:

    1. 分别运行use admin和db.createUser({user: "admin",pwd: "123456",roles: [ { role: " userAdminAnyDatabase", db: "admin" }]})
    2. 分别运行use admin和db.auth(‘admin’,’123456’),返回1,表示认证通过
    3. 分别运行usemydb和db.createUser({user: "qj",pwd: "12345678",roles: [ { role: "readWrite", db: "mydb" }]}),即可为数据库mydb创建账户qj。之后连接该数据库自然要先通过该认证。

    二、    角色授权

    如上,在创建数据库用户时可以直接指定当前账户的操作权限。这样就可以对每个用户可以执行的操作进行更细粒度的控制。使用基于角色的认证可以限制对数据库的访问,而不是所有的用户都是管理员。

    其中几个常用命令简述如下,详情可查MongoDB官方文档:

    db.createRole()该命令用于创建角色,并为该角色设定操作权限。MongoDB有默认配置的多种权限供选择,如:read,readWrite等。

    db.grantRolesToUser()该命令既是将某角色(权限组)授权给指定用户。

    三、      TLS/SSL传输加密

    启用TLS/SSL可将应用和数据库之间的传输加密,避免窃听、篡改和“中间人”攻击。具体开启步骤,还需要更多时间调试。

    四、      数据库备份

    备份可以有效减小数据污染、清空等损失。

    这里介绍通过定时执行MongoDB自带的mongodump命令对数据库备份的方法。特别说明一下mongodump得到的备份并非数据库的快照,在备份同时如果数据库在做增删改操作,可能出现数据备份不完整。对于一般应用,把备份生成时间设定在数据库操作较少时即可(比如凌晨3点),暂停应用也是一个办法。

    具体操作如下(参考网文http://www.osyunwei.com/archives/8985.html):

    1、创建Mongodb数据库备份目录

    mkdir -p /home/backup/mongod_bak/mongod_bak_now

    mkdir -p /home/backup/mongod_bak/mongod_bak_list

    2、新建Mongodb数据库备份脚本

    vi /home/crontab/mongod_bak.sh #新建文件,输入以下代码

    #!/bin/sh

    DUMP=/usr/local/mongodb/bin/mongodump #mongodump备份文件执行路径

    OUT_DIR=/home/backup/mongod_bak/mongod_bak_now #临时备份目录

    TAR_DIR=/home/backup/mongod_bak/mongod_bak_list #备份存放路径

    DATE=`date +%Y_%m_%d` #获取当前系统时间

    DB_USER=username #数据库账号

    DB_PASS=123456 #数据库密码

    DAYS=7 #DAYS=7代表删除7天前的备份,即只保留最近7天的备份

    TAR_BAK="mongod_bak_$DATE.tar.gz" #最终保存的数据库备份文件名

    cd $OUT_DIR

    rm -rf $OUT_DIR/*

    mkdir -p $OUT_DIR/$DATE

    $DUMP -u $DB_USER -p $DB_PASS -o $OUT_DIR/$DATE #备份全部数据库

    tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE #压缩为.tar.gz格式

    find $TAR_DIR/ -mtime +$DAYS -delete #删除7天前的备份文件

    :wq! #保存退出

    系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容©版权所有,转载请注明出处及原文链接

    3、修改文件属性,使其可执行

    chmod +x /home/crontab/mongod_bak.sh

    4、修改/etc/crontab #添加计划任务

    vi /etc/crontab #在下面添加

    30 1 * * * root /home/crontab/mongod_bak.sh #表示每天凌晨1点30执行备份

    5、重新启动crond使设置生效

    /etc/rc.d/init.d/crond restart

    chkconfig crond on #设为开机启动

    service crond start #启动

    每天在/home/backup/mongod_bak/mongod_bak_list目录下面可以看到mongod_bak_2015_02_28.tar.gz这样的压缩文件。

    五、    限制网络接口

    可以通过bind_ip参数,指定允许访问的IP。如:bind_ip=127.0.0.1,192.168.10.188。参数设置可以将允许数据库的地址访问限制为本地和192.168.10.188。

    也可通过系统防火墙限制MongoDB的外部访问,使用VPN提供外部访问通道。

    六、    禁用HTTP接口

    默认情况下Mongodb在端口28017上运行http接口,以提供“主”状态页面。在生产环境下推荐不要使用此接口,最好禁止这个接口。使用"nohttpinterface"配置设置可以禁止这个http接口。(3.2以上版本已经移除HTTPinterface,无需使用该措施)。

    nohttpinterface = true 

    七、    创建专用账户访问MongoDB文件

    可以创建一个用户名为mongodb的系统账户,专用于MongoDB文件的访问。这种方式可以强化数据库系统自身安全,防止恶意、强制、以不安全的方式重启MongoDB。

    八、    使用MongoDB企业版

    使用MongoDB企业版,可以激活更多安全措施。



    查资料不过是偏门,撸源码才是脱离苦海的正道。
  • 相关阅读:
    随笔(二十三)
    随笔(二十二)
    随笔(二十一)
    Python3——2019年全国大学生计算二级考试
    IP组播-PIM协议
    PIM-DM实验
    组播基础原理——IGMP
    路由器反射与联盟
    路由过滤&路由引入实验练习
    有道云免会员更换背景图
  • 原文地址:https://www.cnblogs.com/jarvisjin/p/5821920.html
Copyright © 2020-2023  润新知