MongoDB 安全配置

前言

随着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

posted @ 2017-09-11 11:17  Go_小易  阅读(2326)  评论(0编辑  收藏  举报