XパックがElasticsearchのセキュリティを護衛

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.jarWindowsは、クラスファイルを置き換えるために行う圧縮ソフトウェアシステムを使用してはならないところ!

  • 新しい一時フォルダの一時を作成します

    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_millis2つあり、タイプの変更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を作成するには、次のようにコードを調整する必要があります。設定にはプロパティのみが含まれているため代わりにを使用してクライアントを作成して
ここに写真の説明を挿入
くださいPreBuiltXPackTransportClientPreBuiltTransportClientPreBuiltXPackTransportClientxpack.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クラック

おすすめ

転載: blog.csdn.net/LANSHANZHUYAO/article/details/107063253