Ubuntu16.04でOrientDBデータベースを保護する方法
序章
OrientDBは、ドキュメントおよびグラフデータベースをサポートするマルチモデルのNoSQLデータベースです。 これはJavaアプリケーションであり、任意のオペレーティングシステムで実行できます。 また、マルチマスターレプリケーションのサポートにより完全にACIDに準拠しています。
OrientDBは、サーバーインスタンスへの接続とデータベースへの接続の両方に認証が必要であるという点で、すぐに使用できる非常に優れたセキュリティ体制を備えています。 Kerberos認証やLDAPユーザーなどの他のセキュリティスキームもサポートされていますが、追加のソフトウェアシステムのセットアップが含まれます。
この記事では、代わりに、デフォルトで使用可能なリソースのみを使用して、OrientDBのCommunityエディションのインストールを保護することに焦点を当てます。 具体的には、OrientDBデータベースを暗号化し、OrientDB Webサーバーとサーバーインスタンスへのアクセスを制限し、WebUIとコンソールの両方からOrientDBデータベースアカウントを管理します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- Ubuntu 16.04での初期サーバーセットアップガイドのように、sudo非rootユーザーとファイアウォールでセットアップされた1つのUbuntu16.04サーバー。
- このOrientDBインストールガイドUbuntu16.04を使用してサーバーにインストールされたOrientDBCommunityEdition。
この記事では、元のインストール記事と同様に、OrientDBが/opt/orientdb
ディレクトリにインストールされていることを前提としています。 /opt
は、Linuxにサードパーティアプリケーションをインストールするための従来の場所です。
ステップ1—OrientDBWebサーバーへのアクセスを制限する
OrientDBは通常のWebサーバーアプリケーションですが、インターネットやパブリックネットワークに公開することを目的としたものではありません。 これへの管理アクセスは、ローカルネットワークに限定する必要があります。
安全なOrientDBアプリケーションを実行するための最初のステップは、それが実行されているオペレーティングシステムを保護することです。 ファイアウォールを実行している必要があります。 そうでない場合は、 Ubuntu 16.04の初期サーバーセットアップガイドに従って、UFWをセットアップしてください。 オリジナルのOrientDBインストールガイドでは、ファイアウォールを介して2480
を移植できるようにすることで、テスト目的でパブリックネットワークからOrientDBStudioにアクセスできます。
インターネットからOrientDBStudioおよびコンソールへのアクセスがファイアウォール設定に関係なく常に拒否されるようにする場合は、構成ファイル/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="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
これにより、パブリックインターネットからスタジオへのすべての接続が切断されます。 次に、ブラウザでhttp://your_server_ip: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 の将来のバージョンでは、デフォルトで600
に設定されます。 ただし、公開時には、これらの手順は引き続き必要です。
このチュートリアルの残りのセキュリティのヒントは、OrientDBコンソールを介して実行されるため、今すぐ接続してください。
sudo /opt/orientdb/bin/console.sh
すべてのOrientDBサーバーインスタンスは、複数のOrientDBデータベースをサポートできます。 箱から出して、各サーバーインスタンスには、guestとrootの2つのユーザーアカウントが付属しています。 OrientDBサーバーを最初にインストールして起動したときに、rootアカウントのパスワードを設定するオプションが与えられました。 パスワードのハッシュ形式は、OrientDB構成ファイル/opt/orientdb/config/orientdb-server-config.xml
に保存されます。 ゲストアカウントの自動生成されたパスワードのハッシュ形式もそのファイルに保存されます。
OrientDBコンソールから、次のように入力して、両方のアカウントに関する情報を表示できます。
list server users
注:現在 OrientDB にバグがあり、list server users
を実行しようとすると次のエラーが発生します。
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タグから削除されていることがわかります。
サーバーインスタンスの安全性が向上したので、次にデータベース自体の安全性を高めます。
ステップ3—OrientDBデータベースへのアクセスを制限する
OrientDBのインストールを保護するための次のステップは、データベース自体への不正アクセスを非常に困難にすることです。
デフォルトでは、作成するすべてのOrientDBデータベースには、 admin 、 reader 、および writer の3つの組み込みアカウントがあり、それぞれにパスワードがあります。ユーザー名と同じです。 これはテストには適していますが、実動システムには適していません。 少なくとも、3つのアカウントすべてのパスワードを変更する必要があります。 さらに良いことに、不要なものはすべて削除または一時停止する必要があります。
これらのアカウントの管理方法は、ニーズと環境によって異なります。 このチュートリアルでは、 admin アカウントのパスワードを変更し、 writer アカウントを一時停止し、readerアカウントを削除する方法を学習します。 OrientDBコンソールおよびブラウザベースのOrientDBStudioから、これら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
OrientDBStudioからのOrientDBユーザーアカウントの管理
このセクションでは、OrientDBStudioからOrientDBユーザーアカウントを管理する方法を学習します。 まず、ブラウザでhttp://your_server_ip:2480
にアクセスしてスタジオを起動します。 手順1でStudioへのアクセスを制限した場合は、再度許可する必要があります。
最初に表示される画面はログイン画面です。 rootとOrientDBのインストール時に使用したパスワードを使用してログインします。 ログイン後、セキュリティタブをクリックしてください。 そのページには、3人のデフォルトユーザーすべてが表示されます。
admin アカウントのパスワードを変更するには:
- アクション列の下にある編集をクリックすると、小さなユーザーの編集ウィンドウが表示されます。
- passwordフィールドでパスワードを変更します。
- SAVEUSERをクリックします。
reader アカウントを削除するには:
- アカウントのアクション列にあるDELETEボタンをクリックします。
ライターアカウントを一時停止するには:
- アクションの下にある編集をクリックすると、小さなユーザーの編集ウィンドウが表示されます。
- ステータスプルダウンメニューで、SUSPENDEDを選択します。
- SAVEUSERをクリックします。
次のステップでは、保存時にOrientDBデータベースを暗号化する方法を学習します。
ステップ4—OrientDBデータベースの暗号化
OrientDBは暗号化されたデータベースをサポートしているため、保存されているデータのセキュリティを強化できます。 OrientDBデータベースは、作成時にのみ暗号化できます。 既存のデータベースを暗号化する必要がある場合は、暗号化されたデータベースにエクスポートしてインポートする必要があります。 このセクションでは、作成時にデータベースを暗号化するように指定するプロセスについて説明します。
OrientDBはAESとDESの両方の暗号化アルゴリズムをサポートしていますが、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
新しいデータベースに自動的に接続され、それを反映してプロンプトが変化します。 データベースから切断するには、次のように入力します。
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ドキュメントにアクセスしてください。