前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 16.04上保护OrientDB数据库

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

原创
作者头像
黑色技术
发布2018-08-02 10:07:21
9880
发布2018-08-02 10:07:21
举报
文章被收录于专栏:云计算教程系列

介绍

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

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

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

准备

要学习本教程,您需要具备以下条件:

  • 一个Ubuntu 16.04服务器并设置了一个可以使用sudo命令的非root用户和防火墙。
  • 在服务器上安装OrientDB Community Edition,安装教程详见腾讯云社区。

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

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

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

运行安全的OrientDB应用程序的第一步是保护正在运行的操作系统。此时您应该运行防火墙。最初的OrientDB安装教程通过端口2480设定防火墙允许从公共网络访问OrientDB Studio以进行测试。

如果您想确保始终拒绝从Internet访问OrientDB Studio和控制台,无论防火墙设置如何,您只需对以下配置文件进行一些更改,/opt/orientdb/config/orientdb-server-config.xml

打开该文件进行编辑。

代码语言:txt
复制
$ sudo nano /opt/orientdb/config/orientdb-server-config.xml

然后寻找listeners标签:

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

代码语言:txt
复制
. . .
<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

代码语言:txt
复制
<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守护程序运行时对配置文件进行更改时,请务必重新启动它:

代码语言:txt
复制
$ sudo systemctl restart orientdb

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

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

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

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

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

代码语言:txt
复制
$ sudo chmod 600 /opt/orientdb/config

强化配置文件本身的权限。

代码语言:txt
复制
$ sudo chmod 600 /opt/orientdb/config/orientdb-server-config.xml

本教程中的其他安全提示将通过OrientDB控制台完成,因此请立即连接。

代码语言:txt
复制
$ sudo /opt/orientdb/bin/console.sh

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

在OrientDB控制台中,您可以通过输入以下内容来查看有关两个帐户的信息:

代码语言:txt
复制
orientdb> list server users

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

代码语言:txt
复制
Error: com.orientechnologies.orient.core.exception.OConfigurationException: Cannot access to file ../config/orientdb-server-config.xml

如果收到此错误,可以通过退出OrientDB控制台并在移动到bin目录后重新连接来解决此问题。

代码语言:txt
复制
$ cd /opt/orientdb/bin
$ sudo ./console.sh

然后你可以运行list server users,它将按预期工作。

输出结果将告诉您两个帐户具有哪些权限。该guest帐户具有有限的权限,但允许root用户可以执行所有任务。这就是代替其权限的星号表示:

代码语言:txt
复制
SERVER USERS

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

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

代码语言:txt
复制
orientdb> drop server user guest

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

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

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

保护OrientDB安装的下一步是使得很难对数据库本身进行未经授权的访问。

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

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

从OrientDB控制台管理用户帐户

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

代码语言:txt
复制
orientdb> connect remote:127.0.0.1/GratefulDeadConcerts admin admin

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

代码语言:txt
复制
Connecting to database [remote:127.0.0.1/GratefulDeadConcerts] with user 'admin'...OK
orientdb {db=GratefulDeadConcerts}> 

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

代码语言:txt
复制
orientdb {db=GratefulDeadConcerts}> select from ouser

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

代码语言:txt
复制
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+
|#   |@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用户的密码,请使用以下命令:

代码语言:txt
复制
orientdb {db=GratefulDeadConcerts}> update ouser set password = 'new_account_password' where name = 'admin'

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

代码语言:txt
复制
orientdb {db=GratefulDeadConcerts}> update ouser set status= 'SUSPENDED' where name = 'writer'

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

代码语言:txt
复制
orientdb {db=GratefulDeadConcerts}> drop user reader

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

代码语言:txt
复制
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+---------+------+
|#   |@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]|
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+---------+------+

完成所有用户管理任务后,您可以通过输入以下内容与数据库断开连接(即关闭它):

代码语言:txt
复制
orientdb {db=GratefulDeadConcerts}> disconnect

从OrientDB Studio管理OrientDB用户帐户

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

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

要更改admin帐户的密码:

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

要删除reader帐户:

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

要暂停writer帐户:

  1. 单击其“ 操作”列下的“ 编辑 ” ,这将显示一个小的“ 编辑用户”窗口。
  2. “状态”下拉菜单中,选择"暂停”
  3. 单击“ 保存用户”

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

第四步 - 加密OrientDB数据库

OrientDB支持加密数据库,保证您存储数据的额外安全性。您只能在创建OrientDB数据库时进行访问;如果需要加密现有数据库,则必须将其导出并导入加密数据库。对于本节,我们将完成指定在创建时加密数据库的过程。

OrientDB支持AES和DES加密算法,但AES更受欢迎,因为它更强大。我们需要设置加密密钥,创建数据库,并指定加密方法(AES或DES)。请注意,加密密钥的长度必须为24个字符,后两个字符必须为==

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

代码语言:txt
复制
$ sudo apt-get install pwgen

然后使用以下命令生成一个以==结尾的单个24个字符的键:

代码语言:txt
复制
$ echo `pwgen 22 1`==

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

代码语言:txt
复制
orientdb> config set storage.encryptionKey Ohjojiegahv3tachah9eib==

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

代码语言:txt
复制
orientdb> create database plocal:/opt/orientdb/databases/name_of_encrypted_db root root_password plocal document -encryption=aes

您将自动连接到新数据库,提示将更改以反映该情况。要断开与数据库的连接,只需输入:

代码语言:txt
复制
orientdb {db=<span class= encrypted-db}>'>disconnect

请记住,用于加密OrientDB数据库的加密密钥不存储在系统上。每当您想要从控制台与数据库交互时,您都必须输入用于设置加密密钥的相同命令。

代码语言:txt
复制
orientdb> config set storage.encryptionKey Ohjojiegahv3tachah9eib==

然后打开数据库,您可以输入:

代码语言:txt
复制
orientdb> connect plocal:/opt/orientdb/databases/name_of_encrypted_db admin admin_password

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

结论

在本教程中,您已限制对OrientDB安装的访问,从控制台和Web UI管理用户帐户,并在静态时加密OrientDB数据库。这些是您可以用来增强OrientDB服务器和数据库的安全配置文件的基本但非常重要的安全配置,可以使用OrientDB远程代码执行漏洞分析


参考文献:《How To Secure Your OrientDB Database on Ubuntu 16.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步 - 限制对OrientDB Web服务器的访问
  • 第二步 - 保护OrientDB服务器实例
  • 第三步 - 限制对OrientDB数据库的访问
    • 从OrientDB控制台管理用户帐户
      • 从OrientDB Studio管理OrientDB用户帐户
      • 第四步 - 加密OrientDB数据库
      • 结论
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档