MongoDB и Mongoid в производстве - PullRequest
       3

MongoDB и Mongoid в производстве

12 голосов
/ 04 сентября 2011

Я развертываю свое первое маленькое приложение с 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 на моем производственном сервере?

Ответы [ 2 ]

11 голосов
/ 04 сентября 2011

Чтобы создать производственную среду, в которой вам нужно использовать имя пользователя и пароль для подключения:

В консоли Монго:

// 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, чтобы разрешить только 27017 с вашего веб-сервера.

5 голосов
/ 22 февраля 2013

MongoDB по умолчанию не поддерживает аутентификацию. Это сделано специально и, как ожидается, будет обрабатываться отдельными приложениями. Но не так сложно включить аутентифицированный доступ к MongoDB. Я опишу шаги, которые я предпринял для моей типичной установки рельсов, монгоидов, мерзавцев, капистрано.

  • Сначала добавьте пользователя в базу данных администратора. Без чего не работает ни один из следующих шагов.

    use admin
    db.addUser("heisenberg", "knock-knock")
    
  • Создайте пользователя для БД, которую будет использовать ваше приложение. В MongoDB аутентификация работает на уровне per db

    use breaking_bad
    db.addUser("gus", "fring")
    
  • Еще лучше: создайте пользователя только для чтения, чтобы повысить безопасность и производительность.

    use breaking_bad
    db.addUser("walter", "white", true)
    
  • Включите флаг авторизации для mongodb, чтобы уважать всю вашу сложную работу, связанную с аутентификацией. Это можно сделать либо с помощью флага --auth для команды mongodb. Или лучше раскомментируйте эту строку в /etc/mongodb.conf

    auth = true #Uncomment me
    
  • Теперь перезапустите процесс mongodb, чтобы получить новые изменения.

    service mongodb restart
    
  • Убедитесь, что вы на правильном пути, убедившись, что ваше приложение CRUD теперь не работает! Он потерял доступ к чтению / записи с вашего сайта mongodb. Теперь добавьте атрибуты username: и password: в ваш mongoid.yml в группе по умолчанию.

    production:
      sessions:
        default:
          database: breaking_bad
          hosts:
            - albuquerque.com:27017
          username: gus
          password: fring
    
  • Для получения бонусных баллов удалите файл mongoid.yml из репозитория git, так как этот файл теперь имеет учетные данные безопасности

    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
    
  • Используйте настройку bind_ip в вашем /etc/mongodb.conf, чтобы сообщить MongoDB о приеме соединений только с вашего веб-сервера

  • Используйте iptables для настройки параметров брандмауэра, чтобы обеспечить дополнительную безопасность. Или используйте его в VPN.

Дальнейшее чтение:

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

...