MongoDB和Mongoid正在制作中

我正在部署我的第一个小应用程序MongoDBMongoid作为驱动程序。

在生产中使用MongoDB的正确安全方法是什么?

我的意思是在开发中我刚刚开始使用mongod ,就是这样 – 不需要用户名或密码,看起来不安全。

Mongoid也设置默认配置

 production: host:  port:  username:  password:  database:  

我应该如何在生产服务器上配置此选项和整个MongoDB?

要创建需要使用用户名和密码进行连接的生产环境:

在mongo控制台中:

 // Add an Admin User (to the admin db) use admin db.addUser("theadmin", "anadminpassword") // Use your database use supercool // Add a user (to your database) db.addUser("joe", "passwordForJoe") // show all users: db.system.users.find() // add readonly user (kinda cool) db.addUser("readonly", "passwordForJoe", true) 

现在,与您的mongodb的所有连接都需要身份validation – http://www.mongodb.org/display/DOCS/Security+and+Authentication

另外:您可以考虑使用您的Linux防火墙仅允许来自您的Web服务器的27017。

默认情况下,MongoDB不支持身份validation。 这是设计使然,预计将由个别应用程序处理。 但是,启用对MongoDB的身份validation访问并不太难。 我将描述我为典型的rails,mongoid,git,capistrano设置所采取的步骤。

  • 首先将用户添加到管理数据库。 没有它,以下步骤都不起作用。

     use admin db.addUser("heisenberg", "knock-knock") 
  • 为应用程序将使用的db创建用户。 在MongoDB中,身份validation适用于每个数据库级别

     use breaking_bad db.addUser("gus", "fring") 
  • 更好的是,创建用户只是为了安全和性能优势的只读目的

     use breaking_bad db.addUser("walter", "white", true) 
  • 为mongodb启用auth标志以尊重所有与身份validation相关的硬件。 这可以通过mongodb命令的–auth标志来完成。 或者更好地在/etc/mongodb.conf中取消注释这一行

     auth = true #Uncomment me 
  • 现在重新启动你的mongodb进程以获取新的更改。

     service mongodb restart 
  • 确保您的CRUD应用程序现在失败,检查您是否在正确的轨道上! 它失去了对mongodb事后读/写的访问权限。 现在将用户名:和密码:属性添加到默认组下的mongoid.yml。

     production: sessions: default: database: breaking_bad hosts: - albuquerque.com:27017 username: gus password: fring 
  • 对于奖励积分,请从git存储库中删除mongoid.yml文件,因为此文件现在具有安全凭据

     git rm mongoid.yml 
  • 添加capistrano任务,将mongoid.yml文件从您的开发机器复制到您的服务器并添加适当的符号链接。 在此之后运行cap deploy

     namespace :mongoid do desc "Copy mongoid config" task :copy do upload "config/mongoid.yml", "#{shared_path}/mongoid.yml", :via => :scp end desc "Link the mongoid config in the release_path" task :symlink do run "test -f #{release_path}/config/mongoid.yml || ln -s #{shared_path}/mongoid.yml #{release_path}/config/mongoid.yml" end end 
  • 使用/etc/mongodb.conf中的bind_ip设置告诉MongoDB只接受来自您的web服务器的连接

  • 使用iptables设置防火墙设置以进一步保护您的设置。 或者在VPN中使用它。

进一步阅读:

http://docs.mongodb.org/manual/tutorial/control-access-to-mongodb-with-authentication/ http://docs.mongodb.org/manual/administration/security/