【问题标题】:MongoDB and Mongoid in production生产中的 MongoDB 和 Mongoid
【发布时间】:2011-09-04 15:05:21
【问题描述】:

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

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

我的意思是在开发过程中,我刚刚开始 mongod,仅此而已 - 不需要用户名或密码,而且看起来不安全。

Mongoid 也设置默认配置

production:
  host: <%= ENV['MONGOID_HOST'] %>
  port: <%= ENV['MONGOID_PORT'] %>
  username: <%= ENV['MONGOID_USERNAME'] %>
  password: <%= ENV['MONGOID_PASSWORD'] %>
  database: <%= ENV['MONGOID_DATABASE'] %>

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

【问题讨论】:

    标签: ruby-on-rails ruby mongodb mongoid


    【解决方案1】:

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

    在 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 的连接都需要身份验证 -- http://www.mongodb.org/display/DOCS/Security+and+Authentication

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

    【讨论】:

      【解决方案2】:

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

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

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

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

        use breaking_bad
        db.addUser("walter", "white", true)
        
      • 为 mongodb 启用 auth 标志以尊重您所有与身份验证相关的工作。这可以通过 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 只接受来自您的网络服务器的连接

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

      延伸阅读:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-10
        • 2012-05-29
        • 1970-01-01
        • 1970-01-01
        • 2021-03-09
        • 2014-03-01
        相关资源
        最近更新 更多