前言

随着MongoDB使用人群企业越来越广泛,黑客的注意力也转移到了其中。比如去年很火热的MongoDB劫持事件,很多人对MongoDB的安全也越来越重视。今天,我们就简单总结一些MongoDB的安全防护。首先,关于这方面的内容,官方也有说明,参考如下链接:https://docs.mongodb.com/manual/administration/security-checklist/ ;

1、启用访问控制和强制认证

打开认证,创建认证用户:

  • 在admin数据库中,创建一个admin 用户
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
  • 对具体的库进行授权
use reporting
db.createUser(
{
user: "reportsUser",
pwd: "12345678",
roles: [
{ role: "read", db: "reporting" },
{ role: "read", db: "products" },
{ role: "read", db: "sales" },
{ role: "readWrite", db: "accounts" }
]
}
)

提示:在启动项中加入 --auth 或者在配置文件中加入 security.authorization: enabled。并且,MongoDB还可以使用外部系统进行认证,比如LADP等;

2、配置基于角色的访问控制

这里需要明确的是,MongoDB的基本安全分为两种,一种是认证,一种是鉴权。其实英语会说的比较明白点: authorization, authentication。

认证是作为用户登录的一种账号密码校验,类似MySQL 的 root/password ,在大部分应用中,一旦创建一个连接(用于连接池的),那么该连接只会做一次,所以大可不必担心因为认证而带来的开销。

鉴权是在数据库中的账号拥有的权限做鉴定,类似MySQL中的privilege。

3、基于TSL的双向认证

打开MongoDB 的TLS/SSl 的配置,社区版需要下载一个SSL版本,或者可以从社区版通过升级步骤升级到SSl版本,企业版自带SSL。

SSL 可以保证MongoDB的 所有连接(输入和输出的连接)都是加密的。

4、限制网络暴露

通过指定 bindip,以及Linux通过iptables来限制访问的IP地址等,并在生产线上关闭 MongoDB 的 HTTP 接口和 REST API来达到规避网络进口的安全问题。

iptables -A INPUT -s <ip-address> -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

5、创建MongoDB专门的运行用户

使用 mongodb 用户启动MongoDB,而不是使用 root 用户;

useradd -M mongodb -s /bin/nologin
sudo -u mongodb -s

6、使用安全配置项运行MongoDB

MongoDB 安全配置的更多相关文章

  1. MongoDB的配置、启动、关闭

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...

  2. mongoDB 安装配置

    1. 配置文件: 建立配置文件 :mongodb.conf dbpath=D:\mongoDb\data\db #配置数据库目录路径,预先手动创建db目录 logpath=D:\mongoDb\dat ...

  3. MongoDB启动配置等

    目录: 一.mongoDB 启动配置 二.导出,导入,运行时备份 三.Fsync锁,数据修复 四.用户管理,安全认证 一.启动项 mongod --help C:\Windows\system32&g ...

  4. MongoDB C Driver and APIinstances linux MongoDB安装配置

    <一,linux平台MongoDB安装配置>在这我们使用的Centos6 yum部署的,你想搞编译,自个干!

  5. mongodb系列之--mongodb 主从配置与说明

    一.为什么要配置mongodb的主从: 1.做主从,可以说是做数据的备份,有利于故障的恢复 2.做主从,可以做到读写分离,主节点负责写操作,从节点负责读操作,这样就把读写压力分开,保证系统的稳定性. ...

  6. MongoDB安装配置教程

    数据是每一前端人员必定接触的一样,所有的数据都是后端来编写,如果自己想练习项目,却没有数据,而是写一些假数据,去编写,或者通过json-server搭建一个数据,今天我们就通过MongoDB来搭建一个 ...

  7. windows上MongoDB远程访问配置

    今天用另一台机器上的MongoDB,但是使用本地连接时,没问题 换成IP地址时,出现 解决的方法,修改配置文件 systemLog: destination: file path: d:/Mongod ...

  8. mongodb数据库环境配置

    数据是每一前端人员必定接触的一样,所有的数据都是后端来编写,如果自己想练习项目,却没有数据,而是写一些假数据,去编写,或者通过json-server搭建一个数据,今天我们就通过MongoDB来搭建一个 ...

  9. python爬虫-MongoDB安装配置

    MongoDB安装配置: 在安装配置MongoDB的过程中遇到了很多问题,现在重新梳理一遍安装流程.遇到的问题及其解决方法 系统版本:Windows 10 MongoDB版本:4.2.1 1.下载地址 ...

  10. mongodb全套配置

    1,下载&安装 MongoDB 提供了centos yum安装方式. 参考:http://docs.mongodb.org/manual/tutorial/install-mongodb-on ...

随机推荐

  1. Ansible批量在远程主机执行命令

    Ansible直接执行远程命令,不用ssh登陆交互执行. 如下: ansible all -i 192.168.199.180, -m shell -a "ifconfig" -u ...

  2. JAVA类变量(静态变量)

    类变量也称为静态变量,在类中以static关键字声明,但必须在方法.构造方法和语句块之外. -无论一个类创建了多少个对象,类只拥有类变量的一份拷贝. -静态变量除了被声明为常量外很少使用.常量是指声明 ...

  3. Kubernetes 部署 1.9.7 高可用版

    转载于https://codegreen.cn/2018/08/30/kubernetes-cluster-1.9.7/ 前言 在部署之前,首先感谢 手动搭建高可用的kubernetes 集群 博文的 ...

  4. [Java] I/O底层原理之二:网络IO及网络编程

    首先我们来看一下当访问一个域名时它的过程 查找 DNS 首先,浏览器检查缓存中有没有 浏览器缓存中没有,则查找操作系统中有没有配置这个对应关系 如果操作系统中也没有,则去 DNS 查找,即发送DNS报 ...

  5. javascript私有方法揭示为公有方法

    揭示模式可用于将私有方法暴露为公共方法.当为了对象的运转而将所有功能放置在一个对象中以及想尽可能地保护该对象,这种揭示模式就非常有用. 板栗: var myarray; (function(){ va ...

  6. nginx php上传大文件的设置(php-fpm)

    对于lnmp架构的大文件上传的问题,有几个地方需要修改,另外还有几个参数如果更改过需要注意,下面是详细的需要注意的地方: nginx的修改              send_timeout    6 ...

  7. AngulaJs -- 隔离作用域

    具有隔离作用域的指令最主要的使用场景是创建可复用的组件 创建具有隔离作用域的指令需要将scope属性设置为一个空对象{}.如果这样做了,指令的 模板就无法访问外部作用域了: <div ng-co ...

  8. nodejs图片总结

    今天终于把朴灵老师写的<深入浅出Node.js>给学习完了, 这本书不是一本简单的Node入门书籍,它没有停留在Node介绍或者框架.库的使用层面上,而是从不同的视角来揭示Node自己内在 ...

  9. Docker学习笔记二 使用镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10408363.html  Docker运行容器前,需本地存在对应镜像,若没有则Docker从镜像仓库下载该镜像.  镜 ...

  10. string替换所有指定字符串(C++)

    C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事. 首先明白一个概念,即string替换所 ...