Безопасность OrientDB на сервере Ubuntu 16.04

OrientDB – это многомодельная база данных NoSQL, поддерживающая графики и документальные БД. Это приложение Java можно использовать в любой системе. OrientDB также предоставляет полную поддержку ACID и репликаций master-master, что упрощает горизонтальное масштабирование.

OrientDB обеспечивает высокий уровень безопасности «из коробки»: аутентификация требуется и для подключения к серверу, и для доступа к БД. Кроме того, OrientDB поддерживает аутентификацию Kerberos и пользователей LDAP (правда, для этого нужно дополнительное программное обеспечение).

Данное руководство защитить OrientDB (Community edition) с помощью стандартных средств: шифрования, ограничения доступа к веб-серверу OrientDB. Также вы научитесь управлять аккаунтами OrientDB с помощью веб-интерфейса и консоли.

Требования

Примечание: Подразумевается, что OrientDB установлена в каталог /opt/orientdb. Каталог /opt специально используется в Linux для хранения сторонних приложений.

1: Ограничение доступа к веб-серверу OrientDB

OrientDB – обычное приложение веб-сервера, но оно не должно быть полностью открыто в публичной сети или интернете. Доступ следует ограничить локальной сетью.

Первое, что нужно сделать для безопасности приложения OrientDB – это защитить систему, в которой оно работает. Вы должны настроить брандмауэр (базовую настройку UFW можно найти в руководстве Начальная настройка сервера Ubuntu 16.04).

Исходная установка OrientDB открывает доступ к OrientDB Studio в публичной сети для тестирования через порт 2480.

Если вы хотите полностью заблокировать доступ к OrientDB Studio и консоли из интернета (вне зависимости от настроек брандмауэра), внесите пару поправок в конфигурационный файл /opt/orientdb/config/orientdb-server-config.xml.

sudo nano /opt/orientdb/config/orientdb-server-config.xml

Найдите тег listeners:

. . .
<listeners>
<listener protocol="binary" socket="default" port-range="2424-2430" ip-address="0.0.0.0"/>
<listener protocol="http" socket="default" port-range="2480-2490" ip-address="0.0.0.0">
. . .
</listeners>
. . .

Измените значение параметра ip-address parameters с 0.0.0.0 на 127.0.0.1.

<listeners>
. . .
<listener protocol="binary" socket="default" port-range="2424-2430" ip-address="127.0.0.1"/>
<listener protocol="http" socket="default" port-range="2480-2490" ip-address="127.0.0.1">
. . .
</listeners>
. . .

Сохраните и закройте файл.

Если во время редактирования файла демон OrientDB был запущен, перезапустите его:

sudo systemctl restart orientdb

После этого все внешние подключения к OrientDB Studio будут сброшены. Попробуйте подключиться к OrientDB Studio по ссылке:

http://your_server_ip:2480

Вам будет отказано в доступе.

2: Внутренняя безопасность OrientDB

В этом разделе вы узнаете, как удалять гостевые аккаунты и изменять права на конфигурационный файл OrientDB.

Чтобы повысить безопасность сервера БД, передайте права на каталог конфигураций config пользователю OrientDB. По умолчанию на него установлены права 755. Чтобы ограничить доступ, введите:

sudo chmod 600 /opt/orientdb/config

Примечание: Привилегии 600 будут установлены по умолчанию в следующей версии OrientDB.

Остальные рекомендации по безопасности нужно выполнить в консоли OrientDB. Подключитесь к ней:

sudo /opt/orientdb/bin/console.sh

Каждый сервер OrientDB может поддерживать несколько баз OrientDB. Из коробки сервер предоставляет два аккаунта: guest и root.

Во время установки и первого запуска OrientDB предлагает выбрать пароль root. Хэшированный пароль хранится в /opt/orientdb/config/orientdb-server-config.xml. Хэшированный автоматически сгенерированный пароль пользователя guest также хранится в этом файле.

Информацию об аккаунтах можно посмотреть с помощью консоли:

list server users

Примечание: В текущей версии OrientDB есть баг, который вызывает следующую ошибку при запуске команды list server users:

Error: com.orientechnologies.orient.core.exception.OConfigurationException: Cannot access to file ../config/orientdb-server-config.xml

Ошибку можно обойти. Закройте консоль OrientDB, перейдите в каталог bin и попробуйте снова подключиться:

cd /opt/orientdb/bin
sudo ./console.sh

Попробуйте снова запустить list server users.

Команда выведет на экран права каждого аккаунта. Права пользователя guest ограничены, а root может выполнить любую задачу (о чем свидетельствует звёздочка).

SERVER USERS
- 'guest', permissions: connect,server.listDatabases,server.dblist
- 'root', permissions: *

Даже с ограниченными привилегиями аккаунт guest может представлять опасность. Чтобы удалить его с помощью консоли, введите:

drop server user guest

Попробуйте снова запустить list server users. Теперь в выводе будет только пользователь root. Кроме того, запись пользователя guest исчезнет из файла /opt/orientdb/config/orientdb-server-config.xml.

3: Ограничение доступа к базе данных OrientDB

Теперь нужно запретить доступ к БД неавторизованным пользователям.

По умолчанию каждая БД OrientDB предоставляет три встроенных аккаунта: admin, reader и writer. Пароли пользователей совпадают с именами. Эти аккаунты полезны в среде тестирования, но в производстве такие пароли оставлять опасно. Как минимум, нужно изменить стандартные пароли и выбрать более сложные. Но лучше, конечно, сразу удалять все ненужные аккаунты.

Метод управления аккаунтами зависит от ваших потребностей и среды. В этом разделе вы узнаете, как изменить пароль пользователя admin, заморозить аккаунт writer и удалить reader. Все эти операции можно выполнить через консоль или веб-интерфейс OrientDB Studio.

Управление учётными записями через консоль OrientDB

Чтобы изменить учетные записи пользователей через консоль, необходимо подключиться к базе данных, учетные записи которой вы собираетесь редактировать. Для примера можно подключиться к базе данных GratefulDeadConcerts; это образец базы данных, который поставляется с OrientDB по умолчанию. Подключитесь к ней как пользователь admin:

connect remote:127.0.0.1/GratefulDeadConcerts admin admin

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

Connecting to database [remote:127.0.0.1/GratefulDeadConcerts] with user 'admin'...OK
orientdb {db=GratefulDeadConcerts}>

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

select from ouser

ouser – это запись OrientDB, в которой хранятся пароли.

Полный вывод этой команды выглядит так (все три аккаунта должны иметь статус ACTIVE):

+----+----+------+------+----------------------------------------------------------------------------------------------------+------+------+
|#   |@RID|@CLASS|name  |password                                                                                            |status|roles |
+----+----+------+------+----------------------------------------------------------------------------------------------------+------+------+
|0   |#5:0|OUser |admin |{PBKDF2WithHmacSHA256}DC3A0468F734EA251E6D5B13AC51:812DEC299DC029A7922E206ED674EB52A6D6E27FE84:65536|ACTIVE|[#4:0]|
|1   |#5:1|OUser |reader|{PBKDF2WithHmacSHA256}A11CAFF928CCB412A153C127C25F:793DF156FB72E6E2D9D756E616995BBAC495D4A1616:65536|ACTIVE|[#4:1]|
|2   |#5:2|OUser |writer|{PBKDF2WithHmacSHA256}B4BF8B4CEB09D2609C20661529E3:7FB4AF329234CA643663172EE913764E3096F63D007:65536|ACTIVE|[#4:2]|
+----+----+------+------+----------------------------------------------------------------------------------------------------+------+------+
3 item(s) found. Query executed in 0.736 sec(s).

Чтобы изменить пароль пользователя admin, используйте команду (вместо ‘new_account_password’ укажите новый пароль):

update ouser set password = 'new_account_password' where name = 'admin'

Чтобы заморозить аккаунт writer, измените статус ACTIVE на SUSPENDED.

update ouser set status= 'SUSPENDED' where name = 'writer'

Чтобы полностью удалить аккаунт reader, введите:

drop user reader

После этого снова запросите список пользователей БД. Вывод изменится:

+----+----+------+------+-------------------------------------------------------------------------------------------------+---------+------+
|#   |@RID|@CLASS|name  |password                                                                                         |status   |roles |
+----+----+------+------+-------------------------------------------------------------------------------------------------+---------+------+
|0   |#5:0|OUser |admin |{PBKDF2WithHmacSHA256}DC3A0468F734EA251E6D5B13AC51:DEC299DC029A7922E206ED674EB52A6D6E27FE84:65536|ACTIVE   |[#4:0]|
|1   |#5:2|OUser |writer|{PBKDF2WithHmacSHA256}B4BF8B4CEB09D2609C20661529E3:4AF329234CA643663172EE913764E3096F63D007:65536|SUSPENDED|[#4:2]|
+----+----+------+------+-------------------------------------------------------------------------------------------------+---------+------+

После этого можно отключить консоль.

disconnect

Управление учётными записями через OrientDB Studio

Запустите OrientDB Studio в браузере:

http://your_server_ip:2480

Если в разделе 1 вы заблокировали доступ к интерфейсу, временно разблокируйте его.

Первый экран – это экран входа. Войдите как пользователь root. После этого откройте вкладку Security. На этой странице вы найдёте стандартных пользователей.

Чтобы изменить пароль аккаунта admin:

  • Выберите EDIT в меню Actions, чтобы открыть окно Edit User.
  • Измените пароль в поле password.
  • Кликните SAVE USER.

Чтобы удалить аккаунт reader, кликните DELETE в меню Actions.

Чтобы заморозить аккаунт writer:

  • Выберите EDIT в меню Actions, чтобы открыть окно Edit User.
  • В выпадающем меню Status выберите SUSPENDED.
  • Нажмите SAVE USER.

4: Шифрование OrientDB

OrientDB поддерживает шифрование баз данных. Включить шифрование можно только во время создания базы данных. Чтобы зашифровать уже существующую БД, нужно экспортировать данные и импортировать их в новую БД с поддержкой шифрования.

OrientDB поддерживает алгоритмы шифрования AES и DES; AES надёжнее, потому рекомендуется использовать его. Настройте ключ шифрования, создайте БД и укажите метод шифрования (AES или DES). Ключ должен состоять из 24 символов, последние два из которых ==. Установите инструмент для генерирования ключей:

sudo apt-get install pwgen

Чтобы сгенерировать ключ с == в конце, введите:

echo `pwgen 22 1`==

Ключ нужно хранить в надежном месте. Чтобы использовать ключ шифрования в новой базе данных, введите в консоль OrientDB следующее:

config set storage.encryptionKey Ohjojiegahv3tachah9eib==

Затем создайте БД с поддержкой шифрования в локальной системе:

create database plocal:/opt/orientdb/databases/name_of_encrypted_db root root_password plocal document -encryption=aes

Вы автоматически подключитесь к БД (командная строка изменится). Чтобы закрыть БД, введите:

encrypted-db}>'>disconnect

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

config set storage.encryptionKey Ohjojiegahv3tachah9eib==

Чтобы открыть БД, введите:

connect plocal:/opt/orientdb/databases/name_of_encrypted_db admin admin_password

OrientDB Studio не позволяет создавать БД с поддержкой шифрования. На момент написания статьи эта функция доступна только из консоли.

Заключение

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

Больше информации об OrientDB можно найти в документации проекта.

Tags: , ,

1 комментарий

Добавить комментарий