如何在Ubuntu16.04上保护您的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

这切断了从公共 Internet 到 Studio 的所有连接。 现在尝试通过再次在浏览器中访问 http://your_server_ip:2480 来连接到 Studio。 这一次,连接将被拒绝。

在此步骤中,您专注于来自外部网络的安全性。 在下一步中,您将在内部提高 OrientDB 服务器实例的安全性。

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

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

提高服务器安全性可以做的一件事是向 OrientDB 用户授予对 config 目录 only 的读写访问权限。 该目录的默认权限是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

注意:OrientDB中目前存在一个bug,当你尝试运行list server users时会导致如下错误:

OutputError: 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 用户执行所有任务。 这就是代替其权限的星号所表示的内容:

OutputSERVER 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 帐户已从用户标签中删除。

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

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

保护您的 OrientDB 安装的下一步是使未经授权访问数据库本身变得非常困难。

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

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

从 OrientDB 控制台管理用户帐户

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

connect remote:127.0.0.1/GratefulDeadConcerts admin admin

或者,您也可以使用 OrientDB 服务器的 root 帐户和密码进行连接。 在任何一种情况下,提示都应更改以指示您已连接到特定数据库。

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

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

select from ouser

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

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

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

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

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

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 用户帐户

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

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

修改admin账号密码:

  1. 单击其 Actions 列下的 EDIT,这将打开一个小的 Edit User 窗口。
  2. 更改 密码 字段中的密码。
  3. 点击保存用户

删除 reader 帐户:

  1. 单击帐户的 Actions 列中的 DELETE 按钮。

暂停 writer 帐户:

  1. 点击Actions下的EDIT,会弹出一个小的Edit User窗口。
  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

您将自动连接到新数据库,提示将更改以反映这一点。 要断开与数据库的连接,只需键入:

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 安全性的更多信息。