设为首页 收藏本站
查看: 1572|回复: 0

[经验分享] 记一次MongoDB裸奔

[复制链接]

尚未签到

发表于 2017-12-15 15:27:38 | 显示全部楼层 |阅读模式
导言
  大意失荆州,裸奔的 MongoDB 被黑了。虽然并不是什么非常重要的数据,但也给自己敲响的一个警钟。虽然我们平时不容易接触到数据安全,但我们在开发,部署项目的时候,一定要养成良好的安全意识。
  根据木桶原理,整个系统的安全性,取决于整个系统最薄弱的环节。所以,我们要尽可能多的考虑更多组成部分的安全性。

事件发现
  本月初,发生了大家所熟知的 MondoDB赎金事件。当时本人也保持了一定的关注,并去 https://www.shodan.io/ 溜达了一圈,顺便连了几个裸奔的MongoDB(当然,绝未做任何更改)。
  直到昨天下午,发现我应用的管理员账户登录不上了。多次检查密码,发现还是无法解决,此时有点怀疑被黑了。由于应用有新建用户功能,新建一个和管理员账户同名的账户,居然成功了。这个时候,我想多半是遭了,只等晚上回去确认了。
  回到家,远程到服务器,一连接,果然遭了(可怜我那几十个代码片段 + 几个Gist),需要赎金0.1BTC。

原因分析
  此时可能就要问了,都知道了裸奔不安全,为嘛还不修复?
  我能说我懒么?心大么?
  因为当时我部署的版本的3.2,据说3.2默认没有开启外网访问。我心大到直接未经尝试就认为这是对的。
  实际这句话也没错,Linux版本的 3.x 确实是默认绑定到 127.0.0.1 上的。可TM我是运行在 Windows 上的,由于安装的时候,默认没有创建配置文件,导致一运行就绑定到所有host上了。
  当上,以上都是外因!根本原因还是自己疏忽大意,安全意识薄弱。

解决(重头再来)
  没有备份,直接无法恢复。
  另外,0.1个BTC我是拿不出来的(我也不相信他会好心给你恢复),再加上数据也不是太重要,就直接把安全设置配置上,重头开始。
  那现在是如何配置安全性的呢?
  以下操作,均在未开启授权访问时执行
  首先是添加用户并设置角色:
# 切换到admin库  
use admin
  

  
# 创建User
  
db.createUser({user: '<name>', pwd: '<password>', roles: [
  {role: 'readWrite', db: '<dbname>'},
  {role: 'dbAdmin', db: '<dbname>'}
  
]})
  接下来就是创建一个配置文件(2.6之后,配置文件是yaml格式),内容如下:
  

systemLog:  destination: file
  path: c:\data\log\mongod.log
  
storage:
  dbPath: c:\data\db
  
net:
  bindIp: 127.0.0.1
  port: 27017
  

  注意:配置文件中一定要设定 log path 和 db path
  注意2:如果要限制外网访问,就可以配置 net -> bindIp,另外也可以调整端口
  此时如何运行呢?
mongod --config &quot;D:\MongoDB\mongod.conf&quot; --auth  带上 --auth 就是开启授权访问。
  最后客户端访问也需要稍微修改下,只需要修改 mongoAddress 配置即可:
# MongoDB Connection String Format  
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
  

  
# 实例地址
  
const mongoAddress = 'mongodb://admin:Pwd0603@127.0.0.1:27017/dojo'

就这么一点简单的步骤,就能实现 MongoDB 较高的安全性,可这却是非常容易忽略的点。希望大家引以为戒。

总结


  • 一定不能疏忽大意,安全意识要加强。
  • 一定要结果实际验证,才能下结论。不能不清楚外置条件,人云亦云。
  • 不要有我的应用小,就不会被黑这种想法。批量攻击,才不会放过你。
  • 定期做好数据备份,被攻击是一回事,能否恢复又是另外一回事了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424384-1-1.html 上篇帖子: Mongodb密码安全设置 下篇帖子: MongoDB基础教程[菜鸟教程整理]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表