2011-09-04 12 views
11

Estoy implementando mi primera aplicación pequeña con MongoDB y Mongoid como controlador.MongoDB y Mongoid en producción

¿Cuál es la forma más segura de usar MongoDB en producción?

Quiero decir en el desarrollo que acabo de iniciar mongod y eso es todo, no se necesita nombre de usuario o contraseña y parece inseguro.

también configuraciones predeterminadas conjuntos MongoId

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

¿Cómo debo configurar esta opción y toda MongoDB en mi servidor de producción?

Respuesta

11

Para crear un entorno de producción donde es necesario utilizar un nombre de usuario y contraseña para conectarse:

En la consola 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) 

Ahora, todas las conexiones a su mongodb requerirán autenticación - http://www.mongodb.org/display/DOCS/Security+and+Authentication

También: puede considerar usar su firewall de Linux para solo permitir 27017 desde su (s) servidor (es) web.

+0

Gracias Jesse! – fl00r

5

MongoDB por defecto no es compatible con la autenticación. Esto es por diseño y se espera que sea manejado por aplicaciones individuales. Pero no es demasiado difícil habilitar el acceso autenticado a MongoDB. Describiré los pasos que tomé para mi configuración típica de rieles, mongoid, git, capistrano.

  • Primero agregue un usuario a la base de datos del administrador. Sin el cual ninguno de los pasos a continuación funciona.

    use admin 
    db.addUser("heisenberg", "knock-knock") 
    
  • Crear un usuario a la base de datos utilizará su aplicación. En MongoDB autenticación funciona en una por cada nivel de db

    use breaking_bad 
    db.addUser("gus", "fring") 
    
  • Mejor aún, crear un usuario para fines de seguridad y rendimiento justo de sólo lectura beneficia

    use breaking_bad 
    db.addUser("walter", "white", true) 
    
  • habilitar el indicador de autenticación para mongodb de respetar todo su trabajo relacionado con autenticación. Esto se puede hacer a través de un indicador --auth al comando mongodb. O mejor descomentar esta línea en el /etc/mongodb.conf

    auth = true #Uncomment me 
    
  • Ahora reinicie el proceso de recogida mongodb a los nuevos cambios.

    service mongodb restart 
    
  • comprobar si está en el camino correcto, asegurando que su aplicación CRUD ahora no! Perdió el acceso a la lectura/escritura de su mongodb después de todo. Ahora agregue el nombre de usuario: y la contraseña: atributos a su mongoid.yml en el grupo predeterminado.

    production: 
        sessions: 
        default: 
         database: breaking_bad 
         hosts: 
         - albuquerque.com:27017 
         username: gus 
         password: fring 
    
  • Para obtener puntos de bonificación, quite el mongoid.yml archivo desde el repositorio git ya que este archivo ahora tiene credenciales de seguridad

    git rm mongoid.yml 
    
  • tareas Agregar Capistrano que copian el archivo mongoid.yml de su máquina dev para su servidor y añadir enlaces simbólicos apropiados. cap deploy ejecutar después de este

    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 
    
  • Utilice el ajuste bind_ip en su /etc/mongodb.conf para contar MongoDB para aceptar solamente conexiones desde su servidor web

  • Use iptables en la configuración del firewall de configuración para proteger aún más su preparar. O utilízalo dentro de una VPN.

Más información:

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