zoukankan      html  css  js  c++  java
  • 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企业版,可以激活更多安全措施。



    查资料不过是偏门,撸源码才是脱离苦海的正道。
  • 相关阅读:
    GhostBSD 3.0RC3,基于GNOME的FreeBSD
    Nagios 3.4.3 发布,企业级监控系统
    Jolokia 1.0.6 发布, JMX远程访问方法
    微软希望开发人员不要使 WebKit 成为新版 IE6
    Kwort Linux 3.5 正式版发布
    EJDB 1.0.24 发布,嵌入式 JSON 数据库引擎
    Pale Moon 15.3 Firefox“苍月”优化版发布
    Galera Load Balancer 0.8.1 发布
    SmartSVN V7.5 正式发布
    PostgresQL建立索引如何避免写数据锁定
  • 原文地址:https://www.cnblogs.com/jarvisjin/p/5821920.html
Copyright © 2011-2022 走看看