前書き
OrientDBは、ドキュメントデータベースとグラフデータベースをサポートするマルチモデルのNoSQLデータベースです。 これはJavaアプリケーションであり、任意のオペレーティングシステムで実行できます。 また、マルチマスターレプリケーションをサポートするACIDに完全に対応しています。
すぐに使用できるOrientDBには、サーバーインスタンスへの接続とデータベースへの接続の両方に認証が必要な非常に優れたセキュリティ体制があります。 Kerberos認証やLDAPユーザーなどの他のセキュリティスキームもサポートされていますが、追加のソフトウェアシステムのセットアップが含まれます。
この記事では、代わりにデフォルトで利用可能なリソースのみを使用してOrientDBのCommunityエディションのインストールを保護することに焦点を当てます。 具体的には、OrientDBデータベースを暗号化し、OrientDB Webサーバーとサーバーインスタンスへのアクセスを制限し、Web UIとコンソールの両方からOrientDBデータベースアカウントを管理します。
前提条件
このチュートリアルを実行するには、次のものが必要です。
-
Initial Server Setup on Ubuntu 16.04ガイドのように、sudo非rootユーザーとファイアウォールでセットアップされた1つのUbuntu16.04サーバー。
-
this OrientDB installation guide for Ubuntu 16.04を使用してサーバーにインストールされたOrientDB CommunityEdition。
この記事では、元のインストール記事と同様に、OrientDBが/opt/orientdb
ディレクトリにインストールされていることを前提としています。 /opt
は、Linuxにサードパーティアプリケーションをインストールするための従来の場所です。
[[step-1 -—- restricting-access-to-the-orientdb-web-server]] ==ステップ1— OrientDBWebサーバーへのアクセスを制限する
OrientDBは通常のWebサーバーアプリケーションですが、インターネットやパブリックネットワークに公開することを意図したものではありません。 それへの管理アクセスは、ローカルネットワークに限定する必要があります。
安全なOrientDBアプリケーションを実行する最初のステップは、実行中のオペレーティングシステムを保護することです。 ファイアウォールを実行している必要があります。 そうでない場合は、Initial Server Setup on Ubuntu 16.04 guideに従ってUFWを設定してください。 オリジナルのOrientDBインストールガイドでは、ファイアウォールを介して2480
をポートできるようにすることで、テスト目的でパブリックネットワークからOrientDBStudioにアクセスできます。
ファイアウォールの設定に関係なく、インターネットから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
. . .
. . .
. . .
そして、ip-address
パラメータを0.0.0.0
から127.0.0.1
に変更します。
/opt/orientdb/config/orientdb-server-config.xml
. . .
. . .
. . .
ファイルを保存して閉じます。
OrientDBデーモンの実行中に構成ファイルに変更が加えられた場合は、必ず再起動してください。
sudo systemctl restart orientdb
これにより、パブリックインターネットからStudioへのすべての接続が切断されます。 次に、ブラウザでhttp://your_server_ip:2480
に再度アクセスして、Studioに接続してみます。 今回は、接続が拒否されます。
この手順では、外部ネットワークからのセキュリティに焦点を当てました。 次のステップでは、OrientDBサーバーインスタンスを内部でより安全にします。
[[step-2 -—- securing-the-orientdb-server-instance]] ==ステップ2—OrientDBサーバーインスタンスの保護
ここでは、ゲストアカウントを削除し、OrientDBの構成ファイルの権限を変更する方法を学びます。
サーバーのセキュリティを強化するためにできることの1つは、OrientDBユーザーにconfig
ディレクトリonlyへの読み取り/書き込みアクセスを許可することです。 そのディレクトリのデフォルトのアクセス許可は755
ですが、実行ビットを設定する必要はありません。
sudo chmod 600 /opt/orientdb/config
そして、物事をもう少し弱めるには、構成ファイル自体の許可を強化します。
sudo chmod 600 /opt/orientdb/config/orientdb-server-config.xml
[。注意]##
Note:これらの権限は、a future version of OrientDBではデフォルトで600
に設定されます。 ただし、公開時には、これらの手順はまだ必要です。
このチュートリアルの残りのセキュリティのヒントはOrientDBコンソールを介して行われるので、今すぐ接続してください。
sudo /opt/orientdb/bin/console.sh
すべてのOrientDBサーバーインスタンスは、複数のOrientDBデータベースをサポートできます。 箱から出して、各サーバーインスタンスには2つのユーザーアカウント(guestとroot)が付属しています。 OrientDBサーバーを最初にインストールして起動したときに、ルートアカウントのパスワードを設定するオプションが与えられました。 パスワードのハッシュ形式は、OrientDB構成ファイル/opt/orientdb/config/orientdb-server-config.xml
に保存されます。 ゲストアカウント用に自動生成されたパスワードのハッシュ形式もそのファイルに保存されます。
OrientDBコンソールから、次のように入力して両方のアカウントに関する情報を表示できます。
list server users
[。注意]##
Note:現在、list server users
を実行しようとすると、次のエラーが発生するa bug in 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
を実行すると、期待どおりに機能します。
出力には、両方のアカウントが持っている権限が示されます。 guestアカウントの権限は制限されていますが、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タグから削除されていることがわかります。
サーバーインスタンスのセキュリティが強化されたので、次にデータベース自体のセキュリティを強化します。
[[step-3 -—- restricting-access-to-the-orientdb-database]] ==ステップ3—OrientDBデータベースへのアクセスを制限する
OrientDBインストールを保護するための次のステップは、データベース自体への不正アクセスを取得することを非常に困難にすることです。
デフォルトでは、作成するすべてのOrientDBデータベースには、admin、reader、およびwriterのユーザー名を持つ3つの組み込みアカウントがあり、それぞれのパスワードはユーザー名と同じです。 これはテストには適していますが、実稼働システムには適していません。 少なくとも、3つのアカウントすべてのパスワードを変更する必要があります。 さらに良いことには、不要なものは削除または一時停止する必要があります。
これらのアカウントの管理方法の選択は、ニーズと環境によって異なります。 このチュートリアルでは、adminアカウントのパスワードを変更する方法、writerアカウントを一時停止する方法、およびreaderアカウントを削除する方法を学習します。 OrientDBコンソールおよびブラウザベースのOrientDB Studioからこれら3つのアクションのいずれかを実行できます。
OrientDBコンソールからユーザーアカウントを管理する
コンソールからユーザーアカウントを変更するには、アカウントを管理するデータベースに接続する必要があります。 この例では、adminユーザーとデフォルトのパスワード(admin)を使用して、すべてのOrientDBインストールに付属するサンプルデータベースであるGratefulDeadConcerts
データベースに接続します。
connect remote:127.0.0.1/GratefulDeadConcerts 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 = 'new_account_password' where name = 'admin'
writerユーザーを無効にするには、ステータスをACTIVE
からSUSPENDED
に変更します。
update ouser set status= 'SUSPENDED' where name = 'writer'
データベースからreaderアカウントを完全に削除するには、次を使用します。
drop user reader
上記のすべてを実行し、アカウントのリストを再度表示すると、次の出力が表示されます。 アカウントの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://your_server_ip:2480
にアクセスしてスタジオを起動します。 手順1でStudioへのアクセスを制限した場合は、再度許可する必要があります。
最初に表示される画面はログイン画面です。 rootとOrientDBのインストール時に使用したパスワードを使用してログインします。 ログイン後、Securityタブをクリックします。 そのページには、3人のデフォルトユーザーがすべて表示されます。
adminアカウントのパスワードを変更するには:
-
Actions列の下にあるEDITをクリックすると、小さなEdit Userウィンドウが表示されます。
-
passwordフィールドのパスワードを変更します。
-
SAVE USERをクリックします。
readerアカウントを削除するには:
-
アカウントのActions列にあるDELETEボタンをクリックします。
writerアカウントを一時停止するには:
-
Actionsの下にあるEDITをクリックすると、小さなEdit Userウィンドウが表示されます。
-
Statusプルダウンメニューで、SUSPENDEDを選択します。
-
SAVE USERをクリックします。
次のステップでは、保存中のOrientDBデータベースを暗号化する方法を学びます。
[[step-4 -—- encrypting-the-orientdb-database]] ==ステップ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 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サーバーとデータベースのセキュリティプロファイルを向上させるために作成できます。
今のところ、そのトピックのthis OrientDB documentationにアクセスして、OrientDBセキュリティに関する追加情報にアクセスできます。