2011-09-04 26 views
11

我正在部署我的第一個小應用MongoDBMongoid作爲驅動程序。MongoDB和Mongoid在製作

什麼是在生產中使用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我的生產服務器上?

回答

11

要創建的生產環境下,你需要使用一個用戶名和密碼進行連接:

在蒙戈控制檯:

// 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。

+0

謝謝傑西! – fl00r

5

MongoDB默認不支持認證。這是設計的,預計將由個別應用程序處理。但是啓用對MongoDB的認證訪問並不困難。我將描述我爲典型的rails,mongoid,git,capistrano設置所採取的步驟。

  • 首先將用戶添加到管理數據庫。沒有這些,下面的步驟都不起作用。

    use admin 
    db.addUser("heisenberg", "knock-knock") 
    
  • 創建一個用戶到你的應用程序將使用分貝。在MongoDB的認證是基於每個分貝水平

    use breaking_bad 
    db.addUser("gus", "fring") 
    
  • 更重要的是,創建一個用戶,只是只讀目的的安全性和性能優勢

    use breaking_bad 
    db.addUser("walter", "white", true) 
    
  • 啓用身份驗證標誌MongoDB的尊重所有與認證有關的辛勤工作。這可以通過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 
    
  • 對於獎勵積分,請刪除mongoid。從Git倉庫作爲該文件的文件陽明海運目前擁有安全證書

    git rm mongoid.yml 
    
  • ,從您的開發計算機上覆制mongoid.yml文件到您的服務器,並添加相應的符號鏈接添加Capistrano的任務。這

    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設置後運行cap deploy告訴MongoDB的只從您的網絡服務器接受連接

  • 使用iptables來設置防火牆設置,以進一步保護你建立。或者在VPN內使用它。

延伸閱讀:

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