Безопасность OrientDB на сервере Ubuntu 16.04
OrientDB – это многомодельная база данных NoSQL, поддерживающая графики и документальные БД. Это приложение Java можно использовать в любой системе. OrientDB также предоставляет полную поддержку ACID и репликаций master-master, что упрощает горизонтальное масштабирование.
OrientDB обеспечивает высокий уровень безопасности «из коробки»: аутентификация требуется и для подключения к серверу, и для доступа к БД. Кроме того, OrientDB поддерживает аутентификацию Kerberos и пользователей LDAP (правда, для этого нужно дополнительное программное обеспечение).
Данное руководство защитить OrientDB (Community edition) с помощью стандартных средств: шифрования, ограничения доступа к веб-серверу OrientDB. Также вы научитесь управлять аккаунтами OrientDB с помощью веб-интерфейса и консоли.
Требования
- Сервер Ubuntu 16.04
- Пользователь с доступом к sudo.
- Настроенный брандмауэр (все необходимые инструкции можно найти в руководстве по начальной настройке сервера).
- Предварительно установленная БД 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: NoSQL, OrientDB, Ubuntu 16.04
1 комментарий
У меня не запускался сервер пока я не изменил права на /opt/orientdb/config – 700 (это каталог, ему “выполнение” тоже нужно)