免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 21562 | 回复: 7
打印 上一主题 下一主题

[MongoDB] 安全部署MongoDB最佳实践 [复制链接]

求职 : Linux运维
论坛徽章:
203
拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:182015年亚洲杯之约旦
日期:2015-04-05 20:08:292015年亚洲杯之澳大利亚
日期:2015-04-09 09:25:552015年亚洲杯之约旦
日期:2015-04-10 17:34:102015年亚洲杯之巴勒斯坦
日期:2015-04-10 17:35:342015年亚洲杯之日本
日期:2015-04-16 16:28:552015年亚洲杯纪念徽章
日期:2015-04-27 23:29:17操作系统版块每日发帖之星
日期:2015-06-06 22:20:00操作系统版块每日发帖之星
日期:2015-06-09 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-01-22 23:57 |只看该作者 |倒序浏览
#1: 不要把MongoDB服务器部署在互联网上或者DMZ里

MongoDB和其他的后端服务器一样,不应该部署在DMZ里,更不用说直接部署在互联网上面。你应该把MongoDB部署在公司内部网络,使用路由器或防火墙技术把MongoDB服务器保护起来,

不允许直接从互联网访问MongoDB的端口。 通过这种方式来防止未授权的访问及DDoS攻击等。

另外,如果MongoDB所在的服务器上有多个网卡,建议使用bind_ip来进一步限制MongoDB会在哪一个网络接口上监听。

#2: 为你的MongoDB实例启用安全模块

默认情况下MongoDB不会启动安全模块。任何人只要可以连接到你的MongoDB所在的服务器即可连接到你的MongoDB数据库并执行任意操作。 这些操作包括导出所有数据和配置,执行任意的Javascript,修改库内数据和删除数据等等。 为防止这些,MongoDB建议你始终要用安全模式启动MongoDB实例, 并为需要访问数据库的用户建立相应的权限。参见 权限控制 获得更多信息。

#3: 使用SSL

MongoDB集群之间以及从客户端连接到MongoDB实例的连接应该使用SSL。使用SSL对性能没有影响并且可以防范类似于man-in-the-middle的攻击。参见 配置SSL 以获得更多信息。 注意MongoDB社区版默认并不支持SSL。你可以选用MongoDB企业版(有SSL支持),或者从源码重新编译MongoDB并使用 —ssl 选项来获得SSL功能。

#4: 禁止HTTP和REST端口

MongoDB自己带有一个HTTP服务和并支持REST接口。在2.6以后这些接口默认是关闭的。不要开启这些服务和端口 – 他们的存在只是用于向后兼容。
web管理界面查看mongodb的一些状况


#5: 合理配置用户权限

MongoDB提供一个非常灵活的角色权限控制机制。你应该了解其正确使用。以下是一些不建议的做法:

仅仅使用一个高权限用户(如root)来执行所有操作
给一个用户多于他需要的权限
使用弱密码或者多个账号同用一个密码
删除数据库后没有删除相应的用户
MongoDB建议只分配给用户恰好足够的权限。使用复杂的密码并及时对无效用户做清理。

#6: 合理配置操作系统权限

不要使用root或者其他高权限用户来启动MongoDB。MongoDB不需要很多权限,一个普通用户以及对数据目录的读写访问一般就足够了。另外,对以下文件要配置好合适的文件权限,如,只允许mongod用户自己进行读写。

数据文件
秘钥、证书文件(只读)
日志文件
#7: 保护好秘钥文件

秘钥文件相当于密码, 应该使用操作系统文件权限来保护该文件不被其他用户(root除外)读取 。

#8: SSL配置须知

SSL是一个复杂的协议,需要妥善的配置才可以防止可能的安全漏洞。以下几点应该遵循:

给MongDB实例一个或多个CA用以认证。
不要使用自签名证书 – 除非你只需要用来做数据加密。自签名证书无法防止man-in-the-middle
#9: 使用审计功能

审计功能可以用来记录用户对数据库的所有相关操作。这些记录可以让系统管理员在需要的时候分析数据库在什么时段发生了什么事情。具体请参见配置审计功能

审计功能是一个MongoDB企业版的功能,在社区版中不支持。


安装
我自己的



yum install -y openssl-devel openssl
cd /download/
curl -O https://fastdl.mongodb.org/linux ... 64-rhel62-3.0.7.tgz

tar -zxvf mongodb-linux-x86_64-2.6.6.tgz -C /usr/local/
mv /usr/local/{mongodb-linux-x86_64-2.6.6,mongodb}
touch /usr/local/mongodb/mongo.pid
mkdir -pv /data/mongodb/{data,logs}
echo 'export PATH=/usr/local/mongodb/binPATH'  >>/root/.bashrc


vim /etc/mongod.conf
port=27017
dbpath=/data/mongodb/data/
logpath=/data/mongodb/logs/mongo.log
pidfilepath=/usr/local/mongodb/mongo.pid
fork=true
logappend=true
oplogSize=2048
shardsvr=true
directoryperdb=true
#auth = true   

-----------------------------------------------------
dbpath=data/mongodb/data/   #数据存放目录
logpath=/data/mongodb/logs/mongo.log  #日志文件目录
pidfilepath=/usr/local/mongodb/mongo.pid  #pid端口文件

port=27017   #mongodb端口

logappend=true   #追加方式写日志文件
fork=true        #后台运行
journal=true     #启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
oplogSize=2048   #同步操作记录文件大小(MB)
smallfiles=true  #使用较小的默认文件
#auth = true         #是否开启安全验证
replSet=dbset    #副本集名称,同一个副本集,名称必须一致
------------------------------------------------------------------


groupadd mongodb
useradd -g mongodb -s /sbin/nologin -d /dev/null mongodb   //-d 指定家目录为/dev/null
chown -R mongodb:mongodb /data/mongodb/
chown -R mongodb:mongodb /usr/local/mongodb/


启动mongodb
/usr/local/mongodb/bin/mongod -f /etc/mongod.conf


vi /etc/init.d/mongod

## 添加init配置文件
#!/bin/bash
# mongod - Startup script for mongod
# chkconfig: 35 85 15
# description: Mongo is a scalable, document-oriented database.
# processname: mongod
# config: /etc/mongod.conf
# pidfile: /usr/local/mongodb/mongo.pid
. /etc/rc.d/init.d/functions
# things from mongod.conf get there by mongod reading it
# NOTE: if you change any OPTIONS here, you get what you pay for:
# this script assumes all options are in the config file.
CONFIGFILE="/etc/mongod.conf"
OPTIONS=" -f $CONFIGFILE"
#SYSCONFIG="/etc/sysconfig/mongod"
# FIXME: 1.9.x has a --shutdown flag that parses the config file and
# shuts down the correct running pid, but that's unavailable in 1.8
# for now.  This can go away when this script stops supporting 1.8.
DBPATH=`awk -F= '/^dbpath[[:blank:]]*=[[:blank:]]*/{print $2}' "$CONFIGFILE"`
PIDFILE=`awk -F= '/^pidfilepath[[:blank:]]*=[[:blank:]]*/{print $2}' "$CONFIGFILE"`
mongod=${MONGOD-/usr/local/mongodb/bin/mongod}
MONGO_USER=mongodb
MONGO_GROUP=mongodb
if [ -f "$SYSCONFIG" ]; then
    . "$SYSCONFIG"
fi
# Handle NUMA access to CPUs (SERVER-3574)
# This verifies the existence of numactl as well as testing that the command works
NUMACTL_ARGS="--interleave=all"
if which numactl >/dev/null 2>/dev/null && numactl $NUMACTL_ARGS ls / >/dev/null 2>/dev/null
then
    NUMACTL="numactl $NUMACTL_ARGS"
else
    NUMACTL=""
fi
start()
{
  # Recommended ulimit values for mongod or mongos
  # See http://docs.mongodb.org/manual/r ... ecommended-settings
  #
  ulimit -f unlimited
  ulimit -t unlimited
  ulimit -v unlimited
  ulimit -n 64000
  ulimit -m unlimited
  ulimit -u 32000

  echo -n $"Starting mongod: "
  daemon --user "$MONGO_USER" "$NUMACTL $mongod $OPTIONS >/dev/null"
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/mongod
}
stop()
{
  echo -n $"Stopping mongod: "
  killproc -p "$PIDFILE" -d 300 /usr/bin/mongod
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/mongod
}
restart () {
stop
start
}
RETVAL=0
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart|reload|force-reload)
    restart
    ;;
  condrestart)
    [ -f /var/lock/subsys/mongod ] && restart || :
    ;;
  status)
    status $mongod
    RETVAL=$?
    ;;
  *)
    echo "Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
    RETVAL=1
esac
exit $RETVAL

chmod +x /etc/init.d/mongod



chkconfig --add mongod     # --del 删除




启动 /etc/init.d/mongod start

论坛徽章:
4
IT运维版块每日发帖之星
日期:2016-04-28 06:20:00IT运维版块每日发帖之星
日期:2016-06-06 06:20:00程序设计版块每日发帖之星
日期:2016-06-11 06:20:00IT运维版块每日发帖之星
日期:2016-06-25 06:20:00
2 [报告]
发表于 2016-03-23 12:36 |只看该作者
进来学习呢。。

论坛徽章:
0
3 [报告]
发表于 2016-03-31 00:12 |只看该作者
Mark 明天看,我的mongodb是用root启动的,要改

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-02-01 06:20:00
4 [报告]
发表于 2016-06-22 12:09 |只看该作者
路过~~~~~~~~~~````

求职 : Linux运维
论坛徽章:
203
拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:182015年亚洲杯之约旦
日期:2015-04-05 20:08:292015年亚洲杯之澳大利亚
日期:2015-04-09 09:25:552015年亚洲杯之约旦
日期:2015-04-10 17:34:102015年亚洲杯之巴勒斯坦
日期:2015-04-10 17:35:342015年亚洲杯之日本
日期:2015-04-16 16:28:552015年亚洲杯纪念徽章
日期:2015-04-27 23:29:17操作系统版块每日发帖之星
日期:2015-06-06 22:20:00操作系统版块每日发帖之星
日期:2015-06-09 22:20:00
5 [报告]
发表于 2016-06-22 19:01 |只看该作者
@我知道就行
谢谢支持   

论坛徽章:
0
6 [报告]
发表于 2016-10-16 22:00 |只看该作者
mark

论坛徽章:
0
7 [报告]
发表于 2016-11-30 17:07 |只看该作者
回复 1# lyhabc

asdfasf
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP