Как получить контроль над безопасностью вашей MongoDB

Хакеры становятся все более изощренными и знают, как использовать уязвимости. Если у вас есть чувствительные данные в вашей базе данных MongoDB, важно относиться к безопасности серьезно. Но как? Не беспокойтесь! Этот учебник поможет вам в этом!

В этом учебнике вы узнаете, как защитить ваши базы данных MongoDB и отпугнуть хакеров, настраивая средства безопасности.

Продолжайте читать и начните контролировать безопасность вашей MongoDB!

Предварительные требования

  • Этот учебник будет практической демонстрацией. Чтобы следовать за ним, убедитесь, что у вас есть следующее:
  • MongoDB установлен на вашем Linux-устройстве.
  • A non-root user with sudo privileges.

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

MongoDB не имеет встроенной системы аутентификации. По умолчанию у кого угодно с доступом к базе данных есть полные административные привилегии — слишком опасно! Как обезопасить вашу базу данных? Вы создадите пользователя с административными привилегиями и ограничите доступ к базам данных этому административному пользователю.

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

1. Откройте ваш терминал и выполните команду mongo без аргументов. Эта команда позволяет подключиться к оболочке MongoDB как пользователь администратора по умолчанию.

Этот пользователь-администратор мощен, так как у него полный доступ на чтение/запись ко всем базам данных на сервере, и лучше избегать использования этого пользователя для повседневной работы.

mongo

Вы получите предупреждение, которое говорит о том, что Управление доступом не включено…, как показано ниже.

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

Это предупреждение появляется потому, что вы еще не включили контроль доступа. Не беспокойтесь об этом пока. Вы узнаете, как включить контроль доступа в следующем разделе.

Connecting to your MongoDB shell

2. Затем выполните команду show dbs, чтобы показать все базы данных на сервере, включая базы данных admin, которые обычный пользователь не должен видеть.

show dbs
Showing all databases on the server

3. Запустите команду use admin ниже, чтобы переключиться на базу данных администратора, поскольку ваша задача состоит в создании отдельного административного пользователя. Эта команда изменяет контекст вашей текущей базы данных для использования базы данных администратора, как показано ниже.

MongoDB использует базу данных admin для хранения прав доступа и обеспечения встроенной аутентификации, имен пользователей и паролей для пользователей и их ролей. Вы не можете удалить или переименовать базу данных admin, потому что она является неотъемлемой частью функциональности базы данных.

use admin
Switching to the admin database

4. Теперь скопируйте и вставьте код ниже в оболочку mongo и нажмите Enter. Этот код создает пользователя с именем AdminATA и паролем LDWbPf6Fy9Ezs3Mv, но вы можете использовать другие учетные данные по вашему усмотрению.

Этот новый пользователь имеет доступ на чтение/запись (readWriteAnyDatabase) ко всем базам данных и административный доступ ко всем коллекциям. Но у этого пользователя нет привилегий на удаление баз данных и он не может удалять или изменять привилегии других пользователей.

После выполнения команды, если вы получите ошибку, перепроверьте свой код и попробуйте снова.

# Метод db.createUser() создает нового пользователя в текущей базе данных с правами, указанными ролями.
db.createUser(
{
# Указание имени пользователя AdminATA, но вы можете ввести любое желаемое имя пользователя
user: "AdminATA",
# Метод passwordPrompt() является универсальной вспомогательной функцией 
# которая указывает оболочке MongoDB запросить пароль для пользователя AdminATA.
pwd: passwordPrompt(),
# Указание ролей, которые вы хотите предоставить пользователю AdminATA.
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)

5. Предоставьте безопасный пароль по запросу, как показано ниже, и нажмите Enter.

Providing a secure password

Ниже вы можете видеть сообщение Пользователь успешно добавлен. Этот вывод подтверждает, что вы успешно создали пользователя с административными правами и ограничили его минимально необходимыми привилегиями.

На данный момент у вас уже есть административный пользователь под названием AdminATA, который может выполнять все необходимые действия в базе данных, не предоставляя доступ всем.

Verifying Successful Admin User Creation in MongoDB

6. Наконец, выполните команду exit, чтобы выйти из оболочки mongo.

exit
Leaving the mongo shell

Добавление безопасности путем включения аутентификации

Теперь, когда у вас есть административный пользователь, вы добавите еще один уровень безопасности, включив аутентификацию. Это дает доступ к базе данных только пользователям с правильными учетными данными.

Аутентификация относится к процессу проверки соединения, обычно путем предоставления имени пользователя и пароля или использования токена аутентификации. Аутентификация гарантирует, что вы тот, за кого себя выдаете, а не импостор, пытающийся получить доступ к ресурсам.

1. Включите аутентификацию, изменив файл конфигурации MongoDB следующим образом и сохраните изменения:

  • Откройте файл /etc/mongod.conf в вашем любимом текстовом редакторе. Файл /etc/mongod.conf содержит конфигурацию вашего кластера MongoDB.
  • Найдите и раскомментируйте директиву #security, удалив символ # перед директивой, как показано ниже. Эта директива сообщает MongoDB о поиске параметра безопасности в файле конфигурации.
  • Добавьте новую строку ниже директивы security, которая говорит authorization: enabled. Обратите внимание, что строка authorization: enabled с отступом (имеет два пробела в начале), как показано ниже.
Adding the authorization parameter

2. Затем выполните следующую команду systemctl, чтобы перезапустить сервер MongoDB и внести изменения в действие.

sudo systemctl restart mongod

3. Наконец, выполните следующую команду, чтобы просмотреть статус вашей службы MongoDB.

sudo systemctl status mongod

Ниже вы можете увидеть строку, которая говорит Активно: активно (запущено) зелёным текстом, что указывает на то, что ваш сервер MongoDB запущен и готов принимать подключения.

Viewing MongoDB Service Status

Проверка работоспособности аутентификации

Вы только что включили аутентификацию, но как вы знаете, что она работает? Вы войдете под административным пользователем, чтобы протестировать и убедиться, что ваша аутентификация работает, просматривая базы данных.

1. Запустите следующие команды, чтобы получить доступ к оболочке mongo, как вы делали в разделе «Создание отдельного административного пользователя» (шаг один).

mongo

Как видите ниже, вы больше не получаете Предупреждение: управление доступом не включено… предупреждение о включении аутентификации. Вместо этого вы получите сообщение, которое сообщает вам версию вашего сервера MongoDB и оболочки MongoDB.

Connecting to the MongoDB Shell

2. Затем повторно выполните команду show dbs, чтобы проверить, можете ли вы по-прежнему получить доступ к базе данных.

show dbs

Команда должна показать вам все базы данных, даже базу данных admin. Но, как видите ниже, ничего не появляется. Почему? Просмотр списка баз данных является привилегией, зарезервированной только для административных пользователей.

Вы не аутентифицировали вашу оболочку mongo для использования роли Admin, поэтому у вас нет прав на просмотр списка баз данных.

Listing All Databases (empty)

С включенной аутентификацией подключение не удастся, если кто-то попытается получить доступ к базе данных, используя строку подключения, которая не содержит правильных учетных данных.

Аутентификация строк подключения – ключевая часть безопасности MongoDB, и вы должны реализовать аутентификацию на всех уровнях приложения. Все подключения к MongoDB должны использовать строку аутентификации, состоящую из учетных данных. К этих учетных данных относятся правильное имя пользователя и пароль.

3. Выполните команду exit, чтобы выйти из оболочки MongoDB.

exit

4. Теперь выполните команду ниже, чтобы войти в оболочку MongoDB с именем пользователя вашего только что созданного административного пользователя (-u) и паролем (-p). Замените AdminATA именем пользователя, созданным в разделе “Создание отдельного административного пользователя” (шаг четыре).

Параметр --authenticationDatabase указывает оболочке MongoDB аутентифицироваться в базе данных admin.

mongo -u AdminATA -p --authenticationDatabase admin

5. Введите пароль для вашего административного пользователя по запросу.

Providing administrative password
logging into the MongoDB shell as an administrator

6. Наконец, повторно выполните команду show dbs, чтобы попробовать посмотреть, можете ли вы просматривать все базы данных.

show dbs

На этот раз, как видите ниже, список баз данных появляется, так как вы администратор.

Listing all databases as admin user

Заключение

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

На этом этапе вы решаете, кто и что может использовать. Итак, что дальше для вас? Возможно, узнайте, как использовать контейнер MongoDB безопасно ?

Source:
https://adamtheautomator.com/mongodb-security/