前書き

OrientDBは、ドキュメントデータベースとグラフデータベースをサポートするマルチモデルのNoSQLデータベースです。 これはJavaアプリケーションであり、任意のオペレーティングシステムで実行できます。 また、マルチマスターレプリケーションをサポートするACIDに完全に対応しています。

すぐに使用できるOrientDBには、サーバーインスタンスへの接続とデータベースへの接続の両方に認証が必要な非常に優れたセキュリティ体制があります。 Kerberos認証やLDAPユーザーなどの他のセキュリティスキームもサポートされていますが、追加のソフトウェアシステムのセットアップが含まれます。

この記事では、代わりに、デフォルトで利用可能なリソースのみを使用してOrientDBのCommunityエディションのインストールを保護することに焦点を当てます。 具体的には、OrientDBデータベースを暗号化し、OrientDB Webサーバーとサーバーインスタンスへのアクセスを制限し、Web UIとコンソールの両方からOrientDBデータベースアカウントを管理します。

前提条件

このチュートリアルを実行するには、次のものが必要です。

この記事は、元のインストール記事のように、OrientDBが `+ / opt / orientdb `ディレクトリにインストールされていることを前提としています。 ` / opt +`は、Linuxにサードパーティアプリケーションをインストールする従来の場所です。

手順1-OrientDB Webサーバーへのアクセスを制限する

OrientDBは通常のWebサーバーアプリケーションですが、インターネットやパブリックネットワークに公開することを意図したものではありません。 それへの管理アクセスは、ローカルネットワークに限定する必要があります。

安全なOrientDBアプリケーションを実行する最初のステップは、実行中のオペレーティングシステムを保護することです。 ファイアウォールを実行している必要があります。 そうでない場合は、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [Ubuntu 16.04での初期サーバーセットアップガイド]に従ってUFWをセットアップしてください。 オリジナルのOrientDBインストールガイドでは、ファイアウォール経由で `+ 2480 +`をポートできるようにすることで、テスト目的でパブリックネットワークからOrientDB Studioにアクセスできます。

ファイアウォールの設定に関係なく、インターネットから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=""/>
 <listener protocol="http" socket="default" port-range="2480-2490" ip-address="">
 . . .
</listeners>
. . .

ファイルを保存して閉じます。

OrientDBデーモンの実行中に構成ファイルに変更が加えられた場合は、必ず再起動してください。

sudo systemctl restart orientdb

これにより、パブリックインターネットからStudioへのすべての接続が切断されます。 ブラウザでもう一度「+ http://:2480+」にアクセスして、Studioに接続してみてください。 今回は、接続が拒否されます。

この手順では、外部ネットワークからのセキュリティに焦点を当てました。 次のステップでは、OrientDBサーバーインスタンスの内部のセキュリティを強化します。

手順2-OrientDBサーバーインスタンスの保護

ここでは、ゲストアカウントを削除し、OrientDBの構成ファイルの権限を変更する方法を学びます。

サーバーのセキュリティを強化するためにできることの1つは、OrientDBユーザーに `+ config `ディレクトリへの読み取り/書き込みアクセスを許可することです。 そのディレクトリのデフォルトの許可は「+755」ですが、実行ビットを設定する必要さえありません。

sudo chmod 600 /opt/orientdb/config

そして、物事をもう少し弱めるには、構成ファイル自体の許可を強化します。

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

このチュートリアルの残りのセキュリティのヒントはOrientDBコンソールを介して行われるので、今すぐ接続してください。

sudo /opt/orientdb/bin/console.sh

すべてのOrientDBサーバーインスタンスは、複数のOrientDBデータベースをサポートできます。 すぐに使用できるように、各サーバーインスタンスには、* guest root *の2つのユーザーアカウントが付属しています。 OrientDBサーバーを最初にインストールして起動したときに、ルートアカウントのパスワードを設定するオプションが与えられました。 パスワードのハッシュ形式は、OrientDB設定ファイル、 `+ / opt / orientdb / config / orientdb-server-config.xml +`に保存されます。 ゲストアカウント用に自動生成されたパスワードのハッシュ形式もそのファイルに保存されます。

OrientDBコンソールから、次のように入力して両方のアカウントに関する情報を表示できます。

list server users

出力には、両方のアカウントが持っている権限が示されます。 * guest アカウントには制限された特権がありますが、 root *ユーザーはすべてのタスクを実行できます。 それは、許可の代わりにアスタリスクが示すものです:

OutputSERVER USERS

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

制限された特権であっても、ゲストアカウントを保持したくない場合があります。 コンソールから削除するには、 `+ drop +`コマンドを使用します。

drop server user guest

次回、OrientDBコンソールから「サーバーユーザーを一覧表示」すると、* root *ユーザーのみが表示されます。 ` / opt / orientdb / config / orientdb-server-config.xml +`ファイルの内部を見ると、* guest *アカウントがユーザータグから削除されていることがわかります。

サーバーインスタンスのセキュリティが強化されたので、次にデータベース自体のセキュリティを強化します。

ステップ3-OrientDBデータベースへのアクセスを制限する

OrientDBインストールを保護するための次のステップは、データベース自体への不正アクセスを取得することを非常に困難にすることです。

デフォルトでは、作成するすべてのOrientDBデータベースには、* admin reader 、および writer *というユーザー名を持つ3つのビルトインアカウントがあり、それぞれにユーザー名と同じパスワードがあります。 これはテストには適していますが、実稼働システムには適していません。 少なくとも、3つのアカウントすべてのパスワードを変更する必要があります。 さらに良いことには、不要なものは削除または一時停止する必要があります。

これらのアカウントの管理方法の選択は、ニーズと環境によって異なります。 このチュートリアルでは、* admin アカウントのパスワードを変更し、 writer アカウントを一時停止し、 reader *アカウントを削除する方法を学びます。 OrientDBコンソールおよびブラウザベースのOrientDB Studioからこれら3つのアクションのいずれかを実行できます。

OrientDBコンソールからユーザーアカウントを管理する

コンソールからユーザーアカウントを変更するには、アカウントを管理するデータベースに接続する必要があります。 この例は、すべてのOrientDBインストールに付属するサンプルデータベースである `+ GratefulDeadConcerts +`データベースに、* admin ユーザーとデフォルトパスワード( admin *)を使用して接続します。

connect remote:127.0.0.1/ 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

完全な出力は次のようになります。 3つのアカウントすべてが* 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 = '' where name = ''
  • writer *ユーザーを無効にするには、ステータスを `+ ACTIVE `から ` SUSPENDED +`に変更します。

update ouser set status= 'SUSPENDED' where name = ''
  • reader *アカウントをデータベースから完全に削除するには、次を使用します。

drop user

上記のすべてを実行し、アカウントのリストを再度表示すると、次の出力が表示されます。 アカウントの1つが欠落しており、別のアカウントが停止しています。

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://:2480+」にアクセスしてスタジオを起動します。 手順1でStudioへのアクセスを制限した場合は、再度許可する必要があります。

最初に表示される画面はログイン画面です。 OrientDBをインストールしたときに、* root *とパスワードを使用してログインします。 ログイン後、[セキュリティ]タブをクリックします。 そのページには、3人のデフォルトユーザーがすべて表示されます。

  • admin *アカウントのパスワードを変更するには:

    1. [アクション]列の下にある[編集]をクリックすると、小さな[ユーザーの編集]ウィンドウが表示されます。

    2. * password *フィールドのパスワードを変更します。

    3. * SAVE USER *をクリックします。

*リーダー*アカウントを削除するには:

  1. アカウントの[アクション]列の[削除]ボタンをクリックします。

    • writer *アカウントを一時停止するには:

  2. [アクション]の下の[編集]をクリックすると、小さな[ユーザーの編集]ウィンドウが表示されます。

  3. *ステータス*プルダウンメニューで、*サスペンド*を選択します。

  4. * SAVE USER *をクリックします。

次のステップでは、保存中のOrientDBデータベースを暗号化する方法を学びます。

ステップ4-OrientDBデータベースの暗号化

OrientDBは暗号化されたデータベースをサポートし、保存されたデータのセキュリティを強化します。 OrientDBデータベースは、作成時にのみ暗号化できます。既存のデータベースを暗号化する必要がある場合は、暗号化されたデータベースにエクスポートおよびインポートする必要があります。 このセクションでは、作成時にデータベースを暗号化することを指定するプロセスを実行します。

OrientDBはAESとDES暗号化アルゴリズムの両方をサポートしますが、AESはより強力であるため、AESが推奨されます。 暗号化キーを設定し、データベースを作成し、暗号化方法(AESまたはDES)を指定する必要があります。 暗号化キーの長さは24文字でなければならず、最後の2文字は `+ == +`でなければならないことに注意してください。

暗号化キーを生成するには、パスワード生成ツールである「+ pwgen +」を使用できます。

sudo apt-get install pwgen

次に、次のコマンドを使用して、「+ == +」で終わる24文字の単一のキーを生成します。

echo `pwgen 22 1`==

パスワードと同じように、このキーを安全な場所に保管してください。 作成する新しいデータベースの暗号化キーを設定するには、OrientDBコンソールに次を入力します。

config set storage.encryptionKey

次に、そのキーを使用して暗号化されたデータベースを作成します。 これにより、ローカルファイルシステムに暗号化されたドキュメントベースのデータベースが作成されます( + plocal +)。

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

新しいデータベースに自動的に接続され、それを反映するようにプロンプ​​トが変更されます。 データベースから切断するには、単に次を入力します。

encrypted-db}>'>disconnect

OrientDBデータベースの暗号化に使用される暗号化キーはシステムに保存されないことに注意してください。 コンソールからデータベースとやり取りしたいときはいつでも、暗号化キーの設定に使用したのと同じコマンドを入力する必要があります。

config set storage.encryptionKey

次に、データベースを開くには、次のように入力します。

connect plocal:/opt/orientdb/databases/ admin

OrientDB Studioから新しいデータベースを作成できますが、暗号化されたデータベースは作成できないことに注意してください。 公開時には、コンソールから暗号化されたデータベースのみを作成できます。

結論

このチュートリアルでは、OrientDBのインストールへのアクセスを制限し、コンソールとWeb UIの両方からユーザーアカウントを管理し、保存中のOrientDBデータベースを暗号化しました。 これらは基本的ですが重要なセキュリティ構成であり、OrientDBサーバーとデータベースのセキュリティプロファイルを高めるために作成できます。

現時点では、そのトピックに関するhttp://orientdb.com/docs/2.2/Security.html [このOrientDBドキュメント]にアクセスして、OrientDBセキュリティに関する追加情報にアクセスできます。