Защита OrientDB на сервере с Ubuntu 16.04

Обсудить

Введение

OrientDB – это система управления базами данных, которая сочетает в себе возможности графовой и документо-ориентированной базы данных. Более подробно об этой СУБД, а также о ее установке читайте в статье «Как установить и настроить OrientDB на Ubuntu 16.04».

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

Требования

Для того, чтобы выполнить необходимые действия, вам понадобятся:

  • сервер с установленной ОС Ubuntu 16.04, пользователь с административными правами для выполнения команд sudo, установленный фаервол;
  • установленная СУБД OrientDB (Community edition).

Предполагается, что при установке OrientDB вы следовали инструкции, описанной в предыдущей статье, и OrientDB установлена в директорию /opt/orientdb. /opt – это стандартное местоположение установок сторонних приложений для Linux.

Шаг 1: запрет доступа к веб-серверу OrientDB

OrientDB – это стандартное приложение веб-сервера, но оно не должно иметь доступ извне (из Интернета или общественных сетей). Поэтому доступ должен быть доступен только из локальной сети.

Первый шаг для защиты запускаемого приложения OrientDB – это защита операционной системы, на которой это приложение запускается. У вас обязательно должен работать фаервол. Для тестирования стандартное установочное руководство 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 с 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

Теперь все соединения из общественной сети Интернет запрещены. Попробуйте подсоединиться к Studio, набрав в браузере http://ip_адрес_вашего_сервера:2480. Ваше подключение будет отклонено.

На этом шаге была проведена работа защиты от соединений из внешней сети. В следующем шаге вам нужно будет поработать над внутренней защитой сервера OrientDB.

Шаг 2: защита сервера OrientDB

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

Первое, что вам необходимо сделать, когда вы начинаете работать над защитой сервера, это дать права read-write (чтение-запись), относящиеся к директории config, только пользователю OrientDB. По умолчанию права этой директории – 755, но, по сути, нет даже необходимости в правах на исполнение. Поэтому поменяйте права на другие, используя команду ниже:

$ sudo chmod 600 /opt/orientdb/config

Также нужно изменить права, которые относятся и к самому конфигурационному файлу:

$ sudo chmod 600 /opt/orientdb/config/orientdb-server-config.xml

Примечание. В будущем вполне вероятно, что права 600 будут стоять уже по умолчанию после установки OrientDB, однако на данный момент их все-таки нужно менять самостоятельно.

Все дальнейшие действия нужно будет выполнить в консоли OrientDB, поэтому подсоединитесь к ней:

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

Каждый образец сервера OrientDB поддерживает множество баз данных OrientDB. Сразу после установки каждый сервер имеет два пользовательских аккаунта: гостевой и суперпользователь (root). Настроить аккаунт суперпользователя вы можете в тот момент, когда первый раз устанавливаете и запускаете сервер OrientDB.

Захэшированная форма пароля хранится в конфигурационном файле OrientDB: /opt/orientdb/config/orientdb-server-config.xml. Там же хранится и автоматически сгенерированный пароль для гостевого аккаунта.

Находясь в консоли OrientDB, вы можете получить информацию об обоих аккаунтах, введя команду:

list server users

Внимание. Может случиться баг, когда вы введете команду выше, но получите ошибку:

Output
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, в этот раз она должна сработать как нужно.

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

Output
SERVER USERS

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

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

$ drop server user guest

Если после этого вы еще раз используете команду list server users, вы увидите теперь в списке и только суперпользователя. Вы можете проверить и конфигурационный файл /opt/orientdb/config/orientdb-server-config.xml – запись о гостевом аккаунте также будет там отсутствовать.

После того, как вы позаботились о защите сервера, самое время перейти к защите самой базы данных.

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

Теперь необходимо сделать крайне сложным получение несанкционированного доступа к самой базе данных.

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

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

Работа с пользовательскими аккаунтами через консоль OrientDB

Для того, чтобы поменять настройки пользовательских аккаунтов, используя консоль, вам сначала надо перейти в консоль, а затем подключиться к той базе данных, аккаунты которой вы собираетесь редактировать. К примеру, у вас есть база данных GratefulDeadConcerts, образец базы данных, который поставляется вместе с установкой OrientDB. Вы можете подключиться к ней, используя следующую команду (имя пользователя – admin, пароль по умолчанию – admin):

connect remote:127.0.0.1/GratefulDeadConcerts admin admin

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

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

Для того, чтобы вывести на экран список всех пользователей базы данных, введите команду ниже. ouser – это запись OrientDB, где хранятся все пользовательские пароли:

select from ouser

На экране вы увидите примерно вот такой вывод:

+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+
|# |@RID|@CLASS|name |password |status|roles |
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+
|0 |#5:0|OUser |admin |{PBKDF2WithHmacSHA256}6668FC52BF1D2883BEB4DC3A0468F734EA251E6D5B13AC51:39B1E812DEC299DC029A7922E206ED674EB52A6D6E27FE84:65536|ACTIVE|[#4:0]|
|1 |#5:1|OUser |reader|{PBKDF2WithHmacSHA256}1168D930D370A0FB1B6FA11CAFF928CCB412A153C127C25F:0C287793DF156FB72E6E2D9D756E616995BBAC495D4A1616:65536|ACTIVE|[#4:1]|
|2 |#5:2|OUser |writer|{PBKDF2WithHmacSHA256}22D3068CC3A39C08A941B4BF8B4CEB09D2609C20661529E3:8D6DA7FB4AF329234CA643663172EE913764E3096F63D007:65536|ACTIVE|[#4:2]|
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+

3 item(s) found. Query executed in 0.736 sec(s).

Обратите внимание, что все три аккаунта являются активными (ACTIVE).

Теперь перейдем к изменению настроек.

Если вы хотите изменить пароль для пользователя admin, напишите следующее :

update ouser set password = 'новый_пароль' where name = 'admin'

Если вы хотите приостановить действие аккаунта writer (с ACTIVE на SUSPENDED), введите команду:

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

Для того, чтобы удалить аккаунт reader, используйте команду:

drop user reader

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

Output
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+---------+------+
|# |@RID|@CLASS|name |password |status |roles |
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+---------+------+
|0 |#5:0|OUser |admin |{PBKDF2WithHmacSHA256}6668FC52BF1D2883BEB4DC3A0468F734EA251E6D5B13AC51:39B1E812DEC299DC029A7922E206ED674EB52A6D6E27FE84:65536|ACTIVE |[#4:0]|
|1 |#5:2|OUser |writer|{PBKDF2WithHmacSHA256}22D3068CC3A39C08A941B4BF8B4CEB09D2609C20661529E3:8D6DA7FB4AF329234CA643663172EE913764E3096F63D007:65536|SUSPENDED|[#4:2]|
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+---------+------+

После того, как все необходимые действия были выполнены, вы можете отсоединиться от базы, введя:

disconnect

Работа с пользовательскими аккаунтами через OrientDB Studio

Теперь перейдем к тому, как правильно редактировать пользовательские аккаунты в OrientDB Studio.
Сначала вам нужно запустить студию OrientDB. Для этого в своем браузере на http://ip_адрес_вашего_сервера:2480. Если в самом начале (1 шаге) вы запретили доступ к OrientDB Studio, вам нужно разрешить его.

Первый экран, который вы увидите, это экран авторизации. Авторизуйтесь под суперпользователем, используя тот логин и пароль, которые были заданы по время установки OrientDB. После авторизации нажмите на вкладку Security (Безопасность). На этой странице вы увидите все три стандартных пользователя.

Для того, чтобы изменить пароль аккаунта admin:

  1. Нажмите EDIT (Редактировать) под колонкой Actions (Действия), после чего откроется небольшое окно Edit User (Редактировать пользователя).
  2. Поменяйте пароль в строке password.
  3. Нажмите SAVE USER (Сохранить пользователя).

Для того, чтобы приостановить действие аккаунта writer:

  1. Нажмите EDIT (Редактировать) под колонкой Actions (Действия), после чего откроется небольшое окно Edit User (Редактировать пользователя).
  2. В меню STATUS (Статус) выберите SUSPENDED (Приостановлен).
  3. Нажмите SAVE USER (Сохранить пользователя).

Для того, чтобы удалить аккаунт reader:

Нажмите кнопку DETELE (Удалить) в колонке Actions (Действия).

Шаг 4: шифрование базы данных OrientDB

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

OrientDB поддерживает оба – и AES, и DES – алгоритма шифрования, но AES предпочтительнее, т.к. этот алгоритм дает более сильную защиту. Вам нужно будет задать ключ шифрования, создать базу данных и указать метод шифрования (AES или DES). Обратите внимание, что ключ шифрования должен иметь длину в 24 знака, последние два из которых должны быть ==.

Для того, чтобы сгенерировать ключ шифрования, используйте pwgen, это консольный генератор случайных паролей. Установите его:

$ sudo apt-get install pwgen

Теперь сгенерируйте 24-символьный ключ, который будет заканчиваться на ==:

$ echo `pwgen 22 1`==

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

config set storage.encryptionKey Ohjojiegahv3tachah9eib==

Далее создайте зашифрованную базу данных, использующую этот ключ. После выполнения команды ниже у вас появится зашифрованная, документо-ориентированная база данных в локальной файловой системе (plocal).

create database plocal:/opt/orientdb/databases/название_зашифрованной_базы_данных root root_пароль plocal document -encryption=aes

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

encrypted-db}>'>disconnect

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

config set storage.encryptionKey Ohjojiegahv3tachah9eib==

А для того, чтобы открыть базу данных, вам нужно будет ввести:

connect plocal:/opt/orientdb/databases/name_of_encrypted_db admin admin_пароль

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

Запустите свой VDS

Комментарии