Elasticsearch自体は、ユーザーの認証および承認操作を提供しません(「ユーザー」の概念がまったくない場合でも)。この作業の責任は、開発者と管理者に引き継がれます。いくつかの観点から、これは機能の欠如ではなく、設計コンセプトとしてです(より関連するプラグインを提供しますが、同様のSolr製品も同じです)。セキュリティアクセス制御はユーザーに任されています。その理由は、「ほとんどの認証および承認機能がアプリケーションドメインと緊密に結合されている」ためです。
さらに、Elastic Co.自体が、Elasticsearchを中心とした製品エコシステムの構築に取り組んでいます。これには、以前はShield、現在はSecurity(X-Pack製品パッケージに含まれています)と呼ばれるソフトウェアが含まれます。以前のシールドであろうと今日のセキュリティであろうと、その目的はElasticsearchに安全なアクセス管理ソリューションを提供することです。これらはすべてクローズドソースの商用ソフトウェアです。
この記事では、Elasticsearchのセキュリティを保護するためのCrackX-Packの方法を紹介します。
Xパックを割る
x-packをダウンロード
Elasticsearch 6.3.x以降のバージョンには、独自のx-packプラグインがあり、個別にダウンロードする必要はありません。
このバージョンより前のElasticsearchは、同じバージョン番号に対応するx-packプラグインを個別にインストールする必要があります。Elasticsearch-5.4.3を例にとると、x-pack-5.4.3プラグインをインストールする必要があります。
x-pack-5.4.3のダウンロードアドレスhttps://artifacts.elastic.co/downloads/packs/x-pack/x-pack-5.4.3.zip
解凍する必要はありません。圧縮パッケージとして直接インストールしてください。
./elasticsearch-plugin install file:///home/weijie/elasticsearch-5.4.3-security/x-pack-5.4.3.zip
インストールが完了したら、elasticsearchを再起動し、esの9200ポートにアクセスして、x-packで保護されていることを確認します。アクセスするには、ログインする必要があります。
デフォルトのユーザー名:elastic
デフォルトのパスワード:changeme
ただし、x-packには支払いが必要であり、試用版のライセンスは1か月のみです。
curl -X GET -u elastic:changeme localhost:9200/_license
Xパックを割る
x-pack.jarをクラックします
-
LicenseVerifier.javaファイルを作成します
内容は以下の通りです。
package org.elasticsearch.license; import java.nio.*; import java.util.*; import java.security.*; import org.elasticsearch.common.xcontent.*; import org.apache.lucene.util.*; import org.elasticsearch.common.io.*; import java.io.*; public class LicenseVerifier { public static boolean verifyLicense(final License license, final byte[] encryptedPublicKeyData) { return true; } public static boolean verifyLicense(final License license) { return true; } }
-
LicenseVerifier.javaをコンパイルします
javac -cp "/home/weijie/elasticsearch-5.4.3-security/elasticsearch-5.4.3/lib/elasticsearch-5.4.3.jar:/home/weijie/elasticsearch-5.4.3-security/elasticsearch-5.4.3/lib/lucene-core-6.5.1.jar:/home/weijie/elasticsearch-5.4.3-security/elasticsearch-5.4.3/plugins/x-pack/x-pack-5.4.3.jar" LicenseVerifier.java
取得する
LicenseVerifier.class
-
LicenseVerifier.classを置き換えます
交換する
LicenseVerifier.class
にはplugins/x-pack/x-pack-5.4.3.jar
、Windowsは、クラスファイルを置き換えるために行う圧縮ソフトウェアシステムを使用してはならないところ! -
新しい一時フォルダの一時を作成します
mkdir temp
-
/plugins/x-pack/x-pack-5.4.3.jarをtempフォルダーに移動します
mv elasticsearch-5.4.3/plugins/x-pack/x-pack-5.4.3.jar temp/
cd temp
-
x-pack-5.4.3.jarを解凍します
jar -xvf x-pack-5.4.3.jar
rm -rf x-pack-5.4.3.jar
-
元のLicenseVerifier.classファイルを削除し、新しくコンパイルされたLicenseVerifier.classをこの場所にコピーします
rm -rf org/elasticsearch/license/LicenseVerifier.class
cp ../LicenseVerifier.class org/elasticsearch/license/
-
再梱包
jar -cvf x-pack-5.4.3.jar ./*
-
新しいパッケージx-pack-5.4.3.jarを/ plugins / x-pack /に移動します
mv x-pack-5.4.3.jar ../elasticsearch-5.4.3/plugins/x-pack/
ライセンスの更新
-
ライセンスを取得する
ここで登録https://license.elastic.co/registration
受信した電子メールに従ってライセンスをダウンロードします。フォーマットされたコンテンツは次のとおりです。
{ "license": { "uid": "b48c21d4-2b00-44fa-a456-dc40b0cdb649", "type": "basic", "issue_date_in_millis": 1592870400000, "expiry_date_in_millis": 1624492799999, "max_nodes": 100, "issued_to": "jack jie (tencent)", "issuer": "Web Form", "signature": "AAAAAwAAAA3b8VQtxztAV9mDLDSbAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQCFcV581PDqxjAM9m5CJkzBVnBM71leWkrvLyeSf6vSpFuLK+LFc2QThP6utxLJOmNdvDk8mUiEOkSEAIPseH0KaXR2w3BJ60P37Ryq7txE1P2D4De9Iz04hf8wrbqZK5Go3r95b2rcKTTO9+iNrRr3X69U5MtZ8V1JjXFcUC0Ppq3ryg+oPN2kafWmkjgtUBqwpz5aeMZlk/I6dQpn4TY2OtIT5E2HUxqpycVyXAcyTIkkdeQGhtKOC64GbExRvNQrQ9Xbc+ZSv/ofvXkv8fQq7oj6koqBslOLmXRmn7os/fNWuM5QO3TrlLYdDcNcP2uI4xJxGgEOKVXZ0qh19OAX", "start_date_in_millis": 1592870400000 } }
-
ライセンスの改ざん
レベル
type
と時間の主な変更点はexpiry_date_in_millis
2つあり、タイプの変更platinum
はPlatinum Edition、2050、読み取りの有効期限、このライセンスに注意してください。jsonフォーマットしないでください。次のような行を記述してください。license.json
{ "license":{ "uid":"b48c21d4-2b00-44fa-a456-dc40b0cdb649","type":"platinum","issue_date_in_millis":1592870400000,"expiry_date_in_millis":2524579200999,"max_nodes":100,"issued_to":"jack jie (tencent)","issuer":"Web Form","signature":"AAAAAwAAAA3b8VQtxztAV9mDLDSbAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQCFcV581PDqxjAM9m5CJkzBVnBM71leWkrvLyeSf6vSpFuLK+LFc2QThP6utxLJOmNdvDk8mUiEOkSEAIPseH0KaXR2w3BJ60P37Ryq7txE1P2D4De9Iz04hf8wrbqZK5Go3r95b2rcKTTO9+iNrRr3X69U5MtZ8V1JjXFcUC0Ppq3ryg+oPN2kafWmkjgtUBqwpz5aeMZlk/I6dQpn4TY2OtIT5E2HUxqpycVyXAcyTIkkdeQGhtKOC64GbExRvNQrQ9Xbc+ZSv/ofvXkv8fQq7oj6koqBslOLmXRmn7os/fNWuM5QO3TrlLYdDcNcP2uI4xJxGgEOKVXZ0qh19OAX","start_date_in_millis":1592870400000}}
-
ライセンスの更新
curl -u elastic:changeme -X PUT http://localhost:9200/_xpack/license -d @license.json
-
ライセンスをもう一度確認してください
curl -u elastic:changeme -X GET http://localhost:9200/_license
この時点で、x-packのクラック作業は完了です。Elasticユーザーのパスワードを次のように変更しようとしますdatainsight
。
curl -u elastic:changeme -X PUT http://localhost:9200/_xpack/security/user/elastic/_password -H 'Contentpe: application/json' -d '{"password" : "datainsight"}'
x-packを使用して安全なクライアントを作成する
pom.xmlx-pack-transport
依存関係で最初に導入されたバージョン番号は、elasticsearchと一致しています。
pom.xml
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.4.3</version>
</dependency>
<!-- add the x-pack jar as a dependency -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>x-pack-transport</artifactId>
<version>5.4.3</version>
</dependency>
</dependencies>
安全なTransportClientを作成するには、次のようにコードを調整する必要があります。設定にはプロパティのみが含まれているため、代わりにを使用してクライアントを作成して
ください。PreBuiltXPackTransportClient
PreBuiltTransportClient
PreBuiltXPackTransportClient
xpack.security.user
完全なサンプルコード:
EsClient.java
package test.xpacktest;
import java.net.InetSocketAddress;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient;
public class EsClient {
private static final String CLUSTER_NAME = "cluster.name";
private static final String XPACK_SECURITY_USER = "xpack.security.user";
private static EsClient instance = null;
private TransportClient transportClient = null;
private String clusterName = "datainsight_cluster";
private String xPackSecurityUser = "elastic:datainsight";
private String esAddress = "192.168.205.132:9300";
private EsClient() {
}
@SuppressWarnings("unchecked")
private boolean init() {
try {
Settings settings = Settings.builder()
.put(CLUSTER_NAME, clusterName)
.put(XPACK_SECURITY_USER, xPackSecurityUser)
.build();
transportClient = new PreBuiltXPackTransportClient(settings);
String[] esAddressArr = esAddress.split(",");
for (String addr : esAddressArr) {
String[] ipAndPort = addr.split(":");
transportClient.addTransportAddress(new InetSocketTransportAddress(
new InetSocketAddress(ipAndPort[0],
Integer.valueOf(ipAndPort[1]))));
}
} catch (Exception e) {
return false;
}
return true;
}
public static EsClient getInstance() {
if (instance == null) {
instance = new EsClient();
if (!instance.init()) {
instance = null;
}
}
return instance;
}
public TransportClient getClient() {
return transportClient;
}
}
App.java
package test.xpacktest;
import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse;
import org.elasticsearch.client.transport.TransportClient;
public class App {
public static void main( String[] args ) {
TransportClient client = EsClient.getInstance().getClient();
ClusterStateResponse response = client
.admin()
.cluster()
.prepareState()
.execute()
.actionGet();
System.out.println(response.getState());
}
}
参照
[1] ES X-Pack5.4.3クラック
[2] x-packのインストール
[3] elasticsearchのx-packクラック