如何在Ubuntu 16.04上保护OrientDB数据库

OrientDB是一个多模型的NoSQL数据库,支持文档和图形数据库。在本文中,我们将专注于仅使用默认可用资源来保护OrientDB社区版本的安装。具体来说,您将加密OrientDB数据库,限制对OrientDB Web服务器和服务器实例的访问,并从Web UI和控制台管理OrientDB数据库帐户。

介绍

OrientDB是一个多模型的NoSQL数据库,支持文档和图形数据库。 它是一个Java应用程序,可以在任何操作系统上运行。 它也完全支持ACID投诉,支持多主复制。

开箱即用,OrientDB具有非常好的安全状态,因为连接到服务器实例并连接到数据库都需要身份验证。 还支持其他安全方案,如Kerberos身份验证和LDAP用户,但它们涉及设置其他软件系统。

在本文中,我们将重点关注仅使用默认可用资源来保护OrientDB社区版本的安装。 具体来说,您将加密OrientDB数据库,限制对OrientDB Web服务器和服务器实例的访问,并从Web UI和控制台管理OrientDB数据库帐户。

先决条件

要遵循本教程,您将需要以下内容:

本文假设OrientDB安装在/opt/orientdb目录中,如原始安装文章所示。 /opt是在Linux中安装第三方应用程序的传统位置。

第1步 - 限制对OrientDB Web服务器的访问

OrientDB是一个常规的Web服务器应用程序,但它不打算暴露在Internet或公共网络中。 对其的管理访问必须局限于本地网络。

运行安全的OrientDB应用程序的第一步是保护其运行的操作系统。 你应该运行防火墙。 如果没有,请按照Ubuntu 16.04上的“ 初始服务器设置”指南设置UFW。 原始的OrientDB安装指南允许通过允许通过防火墙端口2480从公共网络访问OrientDB Studio进行测试。

如果要确保从Internet访问OrientDB Studio和控制台始终被拒绝,无论防火墙设置如何,您只需要对配置文件/opt/orientdb/config/orientdb-server-config.xml

打开该文件进行编辑。

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

然后查找listeners标签:

/opt/orientdb/config/orientdb-server-config.xml
. . .
<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

/opt/orientdb/config/orientdb-server-config.xml
<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:// your_server_ip :2480连接到Studio。 这一次,连接将被拒绝。

在此步骤中,您侧重于外部网络的安全性。 在下一步中,您将使OrientDB服务器实例在内部更安全。

第2步 - 保护OrientDB服务器实例

在这里,您将学习如何删除访客帐户并修改OrientDB配置文件的权限。

为提高服务器的安全性,您可以做的一件事是, 只能config目录的read-write访问权限授予OrientDB用户。 该目录的默认权限为755 ,但它甚至不需要执行位设置。

sudo chmod 600 /opt/orientdb/config

为了更好地压制东西,加强配置文件本身的许可。

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

注意 :在未来版本的OrientDB中,这些权限将默认设置为600 但是,在发布时,这些步骤仍然是必要的。

本教程中的其他安全提示将通过OrientDB控制台完成,因此现在可以连接到它。

sudo /opt/orientdb/bin/console.sh

每个OrientDB服务器实例都可以支持多个OrientDB数据库。 开箱即用,每个服务器实例都带有两个用户帐户: guestroot 当您首次安装并启动OrientDB服务器时,您可以选择设置root帐号密码。 密码的散列形式存储在OrientDB配置文件/opt/orientdb/config/orientdb-server-config.xml 客户帐户的自动生成密码的散列形式也存储在该文件中。

您可以在OrientDB控制台中输入以下内容:

list server users

注意 :当您尝试运行list server users,OrientDB中有一个错误将导致以下错误:

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 ,它将按预期工作。

输出将告诉您这两个帐户的权限。 访客帐户的权限有限,但允许root用户执行所有任务。 这就是星号代替它的权限:

SERVER USERS

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

即使有限的权限,您可能不想保留访客帐户。 要从控制台中删除它,请使用drop命令。

drop server user guest

下次从OrientDB控制台list server users时,它将只显示root用户。 如果您查看/opt/orientdb/config/orientdb-server-config.xml文件,您将看到guest帐户已从users标签中删除。

现在,服务器实例更安全,接下来,您将使数据库本身更安全。

第3步 - 限制对OrientDB数据库的访问

保护OrientDB安装的下一步是使得非法访问数据库本身非常困难。

默认情况下,您创建的每个OrientDB数据库都有三个内置帐户,其中包含以下用户名: adminreaderwriter ,每个帐户的密码与用户名相同。 这对测试是有好处的,但不适用于生产系统。 至少,您应该更改所有三个帐户的密码。 更好的是,你应该删除或暂停任何你不需要的。

您如何选择管理这些帐户取决于您的需求和环境。 在本教程中,您将学习如何更改管理员帐户的密码,暂停作者帐户以及删除读者帐户。 您可以从OrientDB控制台和基于浏览器的OrientDB Studio中执行以下三个操作。

从OrientDB控制台管理用户帐户

要从控制台更改用户帐户,您需要连接到您要管理的帐户的数据库。 此示例连接到GratefulDeadConcerts数据库,每个OrientDB安装附带的示例数据库,使用admin用户和默认密码( admin ):

connect remote:127.0.0.1/GratefulDeadConcerts admin admin

或者,您也可以连接OrientDB服务器的帐户和密码。 在这两种情况下,提示符都应更改,以指示您连接到特定的数据库。

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

要列出数据库的用户,请键入以下内容。 ouser是存储用户密码的OrientDB记录:

select from ouser

完整的输出应该如下。 请注意,所有三个帐户都具有ACTIVE状态。

+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+
|#   |@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).

要更改管理员用户的密码,请使用以下命令:

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

要禁用写入器用户,请将状态从ACTIVE更改为SUSPENDED

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

要完全从数据库中删除读者帐户,请使用:

drop user reader

如果您执行了上述所有操作并再次查看帐户列表,您将看到以下输出。 其中一个帐户丢失,另一个帐户被暂停:

+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+---------+------+
|#   |@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用户帐户

在本节中,您将学习如何从OrientDB Studio管理OrientDB用户帐户。 要开始,请通过浏览器中的http:// your_server_ip :2480启动该工作室。 如果您在第1步中限制了对Studio的访问权限,则需要重新启用。

您将看到的第一个屏幕是登录屏幕。 使用root登录,并在安装OrientDB时输入密码。 登录后,单击安全选项卡。 在该页面上,您将看到所有三个默认用户。

要更改管理员帐户的密码:

  1. 在其“操作”列下单击“ 编辑 ”,这将显示一个小的“编辑用户 ”窗口。
  2. 密码字段中更改密码
  3. 点击保存用户

删除读者帐号:

  1. 点击帐户的“操作”列中的“ 删除 ”按钮。

暂停作者帐户:

  1. 在其操作下单击编辑 ,这将显示一个小的编辑用户窗口。
  2. 状态下拉菜单中,选择SUSPENDED
  3. 点击保存用户

在下一步中,您将学习如何在休息时加密OrientDB数据库。

第4步 - 加密OrientDB数据库

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/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的安装的访问,从控制台和Web UI管理用户帐户,并且还在安装时对OrientDB数据库进行加密。 这些是基本但重要的安全配置,可以提升您的OrientDB服务器和数据库的安全性。

现在,您可以通过访问有关该主题的OrientDB文档访问有关OrientDB安全性的其他信息。