介绍
OrientDB是一个多模型的NoSQL数据库,支持文档和图形数据库,它是一个Java应用程序,可以在任何操作系统上运行。
除此之外,OrientDB 具有非常好的安全姿势,即连接到服务器实例和连接到数据库都需要身份验证。 其他安全方案,如 Kerberos 身份验证和 LDAP 用户也得到支持,但它们涉及设置额外的软件系统。
在本文中,我们将专注于仅使用默认可用的资源来确保安装 OrientDB 社区版本,具体来说,您将加密 OrientDB 数据库,限制访问 OrientDB 网络服务器和服务器实例,并从 Web UI 和控制台管理 OrientDB 数据库帐户。
前提条件
要遵循本教程,您将需要以下内容:
- 一个 Ubuntu 16.04 服务器安装了 sudo 非 root 用户和防火墙,如我们在 Ubuntu 16.04 上的初始服务器设置 指南中所述。
本文假定 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数据库。 每个服务器实例都配有两个用户帐户: guest和 root. 您在首次安装和启动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, reader和 writer,每个帐户都有与用户名相同的密码。
您如何选择管理这些帐户取决于您的需求和环境. 在本教程中,您将学习如何更改 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 帐户的密码:
- 点击
编辑
在其行动
列下,这将带来一个小小的编辑用户
窗口。 - 在
密码
字段中更改密码。
要删除读者
帐户:
- 点击帐户的
行动
列中的删除
按钮。
關閉 *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 {db=<^>encrypted-db<^>}>)
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 文档。