Безопасная работа с MongoDB

К сожалению, очень часто пропускается очень важная часть работы с MongoDB - настройка безопасного соединения. Даже в официальной документации не настаивается на том, что ваша база данных должна быть защищена паролем и для работы с ней нужно создать отдельного пользователя. Пришло время исправить эту ошибку. Ну, что ж, поехали!

Конфигурация системного файла

Для того, чтобы защитить нашу базу паролем, нужно внести изменения в системный файл MongoDB, который находится по пути: /etc/mongod.conf. Открываем его в специальном блокноте nano:

sudo nano /etc/mongod.conf

Теперь ищем в нём строку: security:. И добавляем строку о подключении авторизации:

security:
authorization: enabled

Сохраняем изменения сочетанием клавиш Ctr+O, затем выходим из блокнота, нажав Ctr+X. Чтобы все изменения вступили в силу, нужно перезапустить сервер MongoDB:

sudo systemctl restart mongod

Создаем пользователя админа

Пользователь админ обладает большими правами и нужен для того, чтобы злоумышленникам, даже если они получат доступ к судо пользователю, всё же не смогли пробраться дальше в Ваши файлы. Чтобы создать пользователя нужно вначале зайти через специальный терминал mongosh:

sudo mongosh

После чего выведется следующее сообщение и вас автоматически перенаправит в БД test:

Теперь переключаемся в базу admin:

use admin

Далее создаем пользователя админа и наделяем его правами root для базы admin:

db.createUser({
	user: 'mongo_user',
	pwd: 'mongo_user123',
	roles: [{role: "root", db: "admin"}]
})

Проверяем, можно ли просто так взять (с) и зайти в базу данных. Для этого выходим из mongosh, а после этого вводим команду:

sudo mongosh -u mongouser -p

Вводим пароль и - вуаля, мы зашли в базу:

Замечание

Даже если вы зайдёте в mongosh командой, не требующей пароля: sudo mongosh, сервер не даст Вам возможности создавать новую базу данных или коллекцию, поскольку для этого нужен админ.

Теперь наша база данных под надёжной защитой! Кстати, при размещении сайта с MongoDB на реальном хостинге уделите большое внимание сложности пароля. Для дальнейшей работы с БД я рекомендую для каждого проекта создавать нового пользователя, чтобы снизить риск взлома до минимума. В таком случае хакеру придётся взламывать матрёшку - сначала пользователя конкретного проекта, а затем пользователя-админа.