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

介绍

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

除此之外,OrientDB 具有非常好的安全姿势,即连接到服务器实例和连接到数据库都需要身份验证。 其他安全方案,如 Kerberos 身份验证和 LDAP 用户也得到支持,但它们涉及设置额外的软件系统。

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

前提条件

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

本文假定 OrientDB 已安装在 /opt/orientdb 目录中,如原始安装文章所示。

步骤 1 – 限制访问 OrientDB Web 服务器

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

运行一个安全的 OrientDB 应用程序的第一步是保护它正在运行的操作系统. 您应该运行防火墙. 如果您没有,请遵循 Ubuntu 16.04 上的初始服务器设置指南来设置 UFW. 原始 OrientDB 安装指南允许从公共网络访问 OrientDB Studio 进行测试,允许通过防火墙端口 2480

如果您想确保从互联网访问 OrientDB Studio 和控制台总是被拒绝,无论防火墙设置如何,您只需要对配置文件做几个更改, /opt/orientdb/config/orientdb-server-config.xml

打开该文件进行编辑。

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

然后寻找听众标签:

1[label /opt/orientdb/config/orientdb-server-config.xml]
2. . .
3<listeners>
4  <listener protocol="binary" socket="default" port-range="2424-2430" ip-address="0.0.0.0"/>
5  <listener protocol="http" socket="default" port-range="2480-2490" ip-address="0.0.0.0">
6  . . .
7</listeners>
8. . .

并将ip-address参数从0.0.0.0更改为127.0.0.1

1[label /opt/orientdb/config/orientdb-server-config.xml]
2<listeners>
3. . .
4  <listener protocol="binary" socket="default" port-range="2424-2430" ip-address="127.0.0.1"/>
5  <listener protocol="http" socket="default" port-range="2480-2490" ip-address="127.0.0.1">
6  . . .
7</listeners>
8. . .

保存并关闭文件。

当在运行 OrientDB 戴蒙时对配置文件进行更改时,请确保重新启动它:

1sudo systemctl restart orientdb

这将切断所有从公共互联网上连接到Studio的连接,现在再试试通过浏览器中访问http://your_server_ip:2480来连接Studio。

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

步骤 2 – 保护 OrientDB 服务器实例

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

为了提高服务器的安全性,您可以做一件事,就是向 OrientDB 用户授予读写访问 config 目录 only. 该目录的默认权限为 755,但它甚至不需要执行位集。

1sudo chmod 600 /opt/orientdb/config

要把事情弄得更糟,加紧了配置文件本身的权限。

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

美元(注)

** 注意**:这些权限将在 未来的 OrientDB 版本中默认设置为600

美元

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

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

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

从 OrientDB 控制台中,您可以通过键入查看有关两个帐户的信息:

1list server users

美元(注)

** 注意**:当你尝试运行列表服务器用户时,会出现以下错误的当前 OrientDB 中的错误(https://github.com/orientechnologies/orientdb/issues/7267):

1[secondary_label Output]
2Error: com.orientechnologies.orient.core.exception.OConfigurationException: Cannot access to file ../config/orientdb-server-config.xml

如果您收到此错误,您可以通过退出OrientDB控制台并重新连接后移动到bin目录来处理它。

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

然后你可以运行列表服务器用户,它将按预期工作。

美元

输出会告诉你两个帐户都有哪些权限。 ** 客人** 帐户有有限的权限,但 ** 根** 用户可以执行所有任务。

1[secondary_label Output]
2SERVER USERS
3
4- 'guest', permissions: connect,server.listDatabases,server.dblist
5- 'root', permissions: *

即使有有限的权限,您也可能不想保留客人帐户. 若要从控制台中删除该帐户,请使用放下命令。

1drop server user guest

下次你从 OrientDB 控制台中列出服务器用户时,它只会显示 root 用户. 如果你查看 /opt/orientdb/config/orientdb-server-config.xml 文件,你会看到 guest 帐户已从用户标签中删除。

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

步骤 3 – 限制访问 OrientDB 数据库

确保 OrientDB 安装的下一步是很难获得未经授权的访问数据库本身。

默认情况下,您创建的每个 OrientDB 数据库都有三个内置帐户,其中有以下用户名: admin, readerwriter,每个帐户都有与用户名相同的密码。

您如何选择管理这些帐户取决于您的需求和环境. 在本教程中,您将学习如何更改 admin帐户的密码,暂停 writer帐户,并删除 reader帐户。

从 OrientDB 控制台管理用户帐户

要从控制台更改用户帐户,您需要连接到您打算管理的帐户的数据库. 此示例连接到‘GratefulDeadConcerts’数据库,这是一个样本数据库,使用 admin用户和默认密码(admin):

1connect remote:127.0.0.1/GratefulDeadConcerts admin admin

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

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

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

1select from ouser

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

 1[secondary_label Output]
 2+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+
 3|#   |@RID|@CLASS|name  |password                                                                                                                     |status|roles |
 4+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+
 5|0   |#5:0|OUser |admin |{PBKDF2WithHmacSHA256}6668FC52BF1D2883BEB4DC3A0468F734EA251E6D5B13AC51:39B1E812DEC299DC029A7922E206ED674EB52A6D6E27FE84:65536|ACTIVE|[#4:0]|
 6|1   |#5:1|OUser |reader|{PBKDF2WithHmacSHA256}1168D930D370A0FB1B6FA11CAFF928CCB412A153C127C25F:0C287793DF156FB72E6E2D9D756E616995BBAC495D4A1616:65536|ACTIVE|[#4:1]|
 7|2   |#5:2|OUser |writer|{PBKDF2WithHmacSHA256}22D3068CC3A39C08A941B4BF8B4CEB09D2609C20661529E3:8D6DA7FB4AF329234CA643663172EE913764E3096F63D007:65536|ACTIVE|[#4:2]|
 8+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+
 9
103 item(s) found. Query executed in 0.736 sec(s).

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

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

要禁用 writer用户,请将状态从ACTIVE更改为SUSPENDED

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

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

1drop user reader

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

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

完成所有用户管理任务后,您可以通过键入从数据库中切断连接(即关闭数据库):

1disconnect

从 OrientDB Studio 管理 OrientDB 用户帐户

在本节中,您将学习如何从 OrientDB Studio 管理 OrientDB 用户帐户。 要开始,请在浏览器中访问 http://your_server_ip:2480。 如果您在步骤 1 中限制了访问 Studio,则需要重新允许。

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

若要更改 Admin 帐户的密码:

  1. 点击编辑在其行动列下,这将带来一个小小的编辑用户窗口。
  2. 密码字段中更改密码。

要删除读者帐户:

  1. 点击帐户的行动列中的删除按钮。

關閉 *writer * 帳戶:

点击编辑在其行动下,将出现一个小小的编辑用户窗口。 2 在状态下,选择暂停。 3 点击保存用户

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

步骤 4 – 加密 OrientDB 数据库

OrientDB 支持加密数据库,允许您对存储的数据提供额外的安全性. 您只能在创建时加密 OrientDB 数据库;如果您需要加密现有数据库,则必须将其导出并导入加密数据库。

OrientDB 支持 AES 和 DES 加密算法,但 AES 更受欢迎,因为它更强大,我们需要设置加密密钥,创建数据库,并指定加密方法(AES 或 DES)。

要生成加密密钥,您可以使用pwgen,这是一个密码生成工具。

1sudo apt-get install pwgen

然后生成一个单一的,24个字符的密钥,以==结束,使用以下命令:

1echo `pwgen 22 1`==

请记住将此密钥存储在一个安全的地方,就像您想要一个密码一样. 要为您想要创建的新数据库设置加密密钥,请在 OrientDB 控制台中键入以下内容:

1config set storage.encryptionKey Ohjojiegahv3tachah9eib==

然后使用该密钥创建加密数据库,在本地文件系统中创建加密的基于文档的数据库(‘plocal’)。

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

您将自动连接到新数据库,提示将更改以反映这一点。

1custom_prefix(orientdb&nbsp;{db=&lt;^&gt;encrypted-db&lt;^&gt;}&gt;)
2disconnect

请记住,用于加密 OrientDB 数据库的加密密钥并未存储在系统上. 每当您想从控制台与数据库进行交互时,您将需要键入您用来设置加密密钥的相同命令。

1config set storage.encryptionKey Ohjojiegahv3tachah9eib==

然后,打开数据库,您将键入:

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

请注意,虽然您可以从 OrientDB Studio 创建新数据库,但无法创建加密数据库. 在发布时,您只能从控制台创建加密数据库。

结论

在本教程中,您已经限制了对OrientDB的安装的访问,从主机和Web UI管理了用户帐户,并在休息时加密了OrientDB数据库,这些是基本但重要的安全配置,您可以提高OrientDB服务器和数据库的安全配置。

目前,您可以访问有关 OrientDB 安全的更多信息,访问有关该主题的 此 OrientDB 文档

Published At
Categories with 技术
comments powered by Disqus