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/