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

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

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

Ответ 2

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

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

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

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

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

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

    service mongodb restart
    
  • Убедитесь, что вы находитесь на правильном пути, убедившись, что ваше приложение CRUD не работает! Он потерял доступ к чтению/записи с вашего mongodb afterall. Теперь добавьте имя пользователя и пароль: атрибуты вашего 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/