介绍
OrientDB是一个多模型的NoSQL数据库,支持文档和图形数据库。 它是一个Java应用程序,可以在任何操作系统上运行。 它也完全支持ACID投诉,支持多主复制。
开箱即用,OrientDB具有非常好的安全状态,因为连接到服务器实例并连接到数据库都需要身份验证。 还支持其他安全方案,如Kerberos身份验证和LDAP用户,但它们涉及设置其他软件系统。
在本文中,我们将重点关注仅使用默认可用资源来保护OrientDB社区版本的安装。 具体来说,您将加密OrientDB数据库,限制对OrientDB Web服务器和服务器实例的访问,并从Web UI和控制台管理OrientDB数据库帐户。
先决条件
要遵循本教程,您将需要以下内容:
- 一个Ubuntu 16.04服务器设置了一个sudo非root用户和防火墙,如我们在Ubuntu 16.04上的初始服务器安装指南。
- OrientDB社区版安装在服务器上,使用Ubuntu 16.04的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
标签:
. . .
<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
。
<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数据库。 开箱即用,每个服务器实例都带有两个用户帐户: guest和root 。 当您首次安装并启动OrientDB服务器时,您可以选择设置root帐号密码。 密码的散列形式存储在OrientDB配置文件/opt/orientdb/config/orientdb-server-config.xml
。 客户帐户的自动生成密码的散列形式也存储在该文件中。
您可以在OrientDB控制台中输入以下内容:
list server users
注意 :当您尝试运行list server users
时,OrientDB中有一个错误将导致以下错误:
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
,它将按预期工作。
输出将告诉您这两个帐户的权限。 访客帐户的权限有限,但允许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帐户已从users标签中删除。
现在,服务器实例更安全,接下来,您将使数据库本身更安全。
第3步 - 限制对OrientDB数据库的访问
保护OrientDB安装的下一步是使得非法访问数据库本身非常困难。
默认情况下,您创建的每个OrientDB数据库都有三个内置帐户,其中包含以下用户名: admin , reader和writer ,每个帐户的密码与用户名相同。 这对测试是有好处的,但不适用于生产系统。 至少,您应该更改所有三个帐户的密码。 更好的是,你应该删除或暂停任何你不需要的。
您如何选择管理这些帐户取决于您的需求和环境。 在本教程中,您将学习如何更改管理员帐户的密码,暂停作者帐户以及删除读者帐户。 您可以从OrientDB控制台和基于浏览器的OrientDB Studio中执行以下三个操作。
从OrientDB控制台管理用户帐户
要从控制台更改用户帐户,您需要连接到您要管理的帐户的数据库。 此示例连接到GratefulDeadConcerts
数据库,每个OrientDB安装附带的示例数据库,使用admin用户和默认密码( admin ):
connect remote:127.0.0.1/GratefulDeadConcerts admin admin
或者,您也可以连接OrientDB服务器的根帐户和密码。 在这两种情况下,提示符都应更改,以指示您连接到特定的数据库。
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).
要更改管理员用户的密码,请使用以下命令:
update ouser set password = 'new_account_password' where name = 'admin'
要禁用写入器用户,请将状态从ACTIVE
更改为SUSPENDED
。
update ouser set status= 'SUSPENDED' where name = 'writer'
要完全从数据库中删除读者帐户,请使用:
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时输入密码。 登录后,单击安全选项卡。 在该页面上,您将看到所有三个默认用户。
要更改管理员帐户的密码:
- 在其“操作”列下单击“ 编辑 ”,这将显示一个小的“编辑用户 ”窗口。
- 在密码字段中更改密码 。
- 点击保存用户 。
删除读者帐号:
- 点击帐户的“操作”列中的“ 删除 ”按钮。
暂停作者帐户:
- 在其操作下单击编辑 ,这将显示一个小的编辑用户窗口。
- 在状态下拉菜单中,选择SUSPENDED 。
- 点击保存用户 。
在下一步中,您将学习如何在休息时加密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安全性的其他信息。