破解elasticsearch(制作破解版docker镜像)
破解elasticsearch(制作破解版docker鏡像)
本文僅用于學習交流,要使用elasticsearch的付費功能,請通過正規渠道購買platinum(白金)版。
一、部署純凈版elasticsearch和kibana容器
1、修改宿主機vm.max_map_count的值
使用docker運行elasticsearch,要求宿主機系統的m.max_map_count的值不小于262144,否則elasticsearch鏡像無法運行。
編輯“/etc/sysctl.conf”文件,在其中增加一行:
保存后,執行“sysctl -p”讓配置生效。
2、部署純凈版elasticsearch
拉取elasticsearch-6.5.4鏡像
運行elasticsearch-6.5.4
docker run -d -p 9200:9200 --name=elasticsearch-6.5.4 -e xpack.security.enabled=false elasticsearch:6.5.4注意:需要加上“-e xpack.security.enabled=false”,否則導入license失敗。
3、部署kibana
如果使用命令行導入證書,可以不用部署kibana。
拉取kibana-6.5.4鏡像
運行kibana-6.5.4
docker run -d -p 5601:5601 --name=kibana-6.5.4 -e ELASTICSEARCH_URL=http://192.168.241.13:9200 kibana:6.5.4二、破解和替換x-pack-core-6.5.4.jar
1、創建LicenseVerifier.java和XPackBuild.java文件,文件內容如下:
LicenseVerifier.java
XPackBuild.java
package org.elasticsearch.xpack.core;import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Path;import org.elasticsearch.common.SuppressForbidden; import org.elasticsearch.common.io.PathUtils;public class XPackBuild {public static XPackBuild CURRENT;private String shortHash;private String date;static {Path path = getElasticsearchCodebase();String shortHash = null;String date = null;Label_0157:{shortHash = "Unknown";date = "Unknown";}CURRENT = new XPackBuild(shortHash, date);}@SuppressForbidden(reason="looks up path of xpack.jar directly")static Path getElasticsearchCodebase() {URL url = XPackBuild.class.getProtectionDomain().getCodeSource().getLocation();try {return PathUtils.get(url.toURI());} catch (URISyntaxException e) {throw new RuntimeException(e);}}XPackBuild(String shortHash, String date) {this.shortHash = shortHash;this.date = date;}public String shortHash() {return this.shortHash;}public String date() {return this.date;} }2、獲取x-pack-core-6.5.4.jar、lucene-core-7.5.0.jar、elasticsearch-core-6.5.4.jar
lucene-core-7.5.0.jar和elasticsearch-core-6.5.4.jar在elasticsearch容器的/usr/share/elasticsearch/lib目錄下,x-pack-core-6.5.4.jar在elasticsearch容器的/usr/share/elasticsearch/modules/x-pack-core目錄下,使用docker cp命令將他們拷貝到宿主機的/tmp目錄下:
3、編譯LicenseVerifier.java和XPackBuild.java文件
編譯LicenseVerifier.java和XPackBuild.java文件的方法有很多種,我是通過eclipse進行編譯:
在eclipse中新建java工程,創建LicenseVerifier和XPackBuild類,注意這兩個類所在的包。在工程中導入依賴的jar包:x-pack-core-6.5.4.jar、lucene-core-7.5.0.jar、elasticsearch-core-6.5.4.jar。在eclipse中clean一下工程,即可到工程的bin目錄下找到對應的class文件。
4、更新x-pack-core-6.5.4.jar
用我們的LicenseVerifier.class和XPackBuild.class文件替換x-pack-core-6.5.4.jar中對應的文件。可用winrar打開及操作jar包。
用docker cp命令將破解過后的x-pack-core-6.5.4.jar拷貝到elasticsearch容器中,替換原來的jar包
重啟elasticsearch容器
docker restart elasticsearch-6.5.4三、申請和修改elasticsearch證書
elasticsearch-6.5.4自帶一個永久有效的basic版證書,可以使用基本功能,現在將它替換為platinum(白金)版。
如果不想申請證書,可直接使用我申請并修改好的證書:
1、去官網申請證書,官網地址:https://license.elastic.co/registration。
這里申請到的也是basic版的證書,不過沒有關系,在導入之前,我們將其修改為platinum版即可。
除了電子郵箱地址,其他可以隨便填。電子郵箱地址用來接收證書下載地址,一定要填有效的郵箱。之后會收到郵件,如下圖所示:
從郵件中的鏈接進去,根據提示下載好證書,證書如下:
2、修改證書
我們只需要修改證書中的“type”和“expiry_date_in_millis”字段的值。
“type”的值修改為:“platinum”
“expiry_date_in_millis”的值修改為:4102415999000
“expiry_date_in_millis”是過期時間,是毫秒為單位的時間戳,設置為4102415999000表示2099-12-31 23:59:59過期。
四、上傳和更新elasticsearch證書
如果不想用kibana導入,可直接使用命令行導入證書。假設已經將編輯好的證書放在/tmp目錄,使用如下命令導入證書:
輸入完上述命令后,會提示輸入密碼,不用管,直接回車。
在瀏覽器中輸入kibana的服務地址,打開kibana。
因為我的宿主機是IP地址為192.168.241.13的虛擬機,上午部署kibana的時候,將服務端口映射到了5601(5601也是kibana默認服務端口),所以我應該在地址欄輸入:http://192.168.241.13:5601。
打開后,先選擇左邊菜單欄的Management,再選擇License Management。
下面按圖示操作:
上傳成功后,顯示如下:
如果不使用kibana,可在瀏覽器中直連elasticsearch查看授權信息,在瀏覽器地址欄中輸入:
結果如下:
{"license" : {"status" : "active","uid" : "elasticsearch-6.5.4-anyone","type" : "platinum","issue_date" : "2019-02-01T00:00:00.000Z","issue_date_in_millis" : 1548979200000,"expiry_date" : "2099-12-31T15:59:59.000Z","expiry_date_in_millis" : 4102415999000,"max_nodes" : 1000,"issued_to" : "anyone","issuer" : "Web Form","start_date_in_millis" : 1548979200000} }五、生成密鑰
一般破解主要是為了使用X-PACK的權限控制功能,而開啟權限控制功能的elasticsearch集群,各節點中必須使用SSL通信,必須使用密鑰文件。elasticsearch提供了一個工具生成密鑰。
下面只是簡單講解如何生成證書和密鑰,以及說明下當時遇到的坑,更詳細的內容,請參閱官網:https://www.elastic.co/guide/en/elasticsearch/reference/6.3/configuring-tls.html#node-certificates
1、生成ca證書
進入elasticsearch容器
在容器中創建密鑰文件目錄(下述命令在容器中執行)
mkdir /usr/share/elasticsearch/config/certs注意:生成的密鑰文件一定要在/usr/share/elasticsearch/config目錄或其子目錄下,否則后面啟用SSL的時候,會提示沒有權限讀取密鑰文件。至于原因,我也不知道,這是一個很奇怪的現象,當時弄了我一天才發現這個現象,當時我是將密鑰文件放在/usr/share/elasticsearch/certs下,文件和目錄權限都給到777,還是提示沒有權限。
生成ca證書(下述命令在容器中執行)
這個工具會在當前目錄下生成一個elastic-stack-ca.p12文件,我們進到/usr/share/elasticsearch/config/certs目錄執行,后面就不用拷貝了。這個命令會提示給證書文件輸入一個密碼,如果不想設置,直接回車就可以了,相當于空密碼。
2、生成密鑰文件(下述命令在容器中執行)
cd /usr/share/elasticsearch/config/certs /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12這個命令會提示輸入證書的密碼和密鑰文件的密碼,如果上一步中沒有設置密碼,提示輸入證書密碼時直接回車就好。密鑰文件的密碼也是一樣,不想設置就直接回車。
命令執行完畢后,會在當前目錄生成elastic-certificates.p12文件。
3、設置文件目錄的屬主和權限(下述命令在容器中執行)
chown -R elasticsearch /usr/share/elasticsearch/config/certs chmod 644 /usr/share/elasticsearch/config/certs/*.p12在容器中,elasticsearch的工作目錄屬主為elasticsearch,而我們剛才創建的目錄和文件屬主都是root,修改為elasticsearch保持一致,其實屬主不改也不要緊。第二條命令修改文件權限為所有用戶和組可讀,確保容器運行時能讀到密鑰文件。(生成密鑰文件elastic-certificates.p12后,證書文件elastic-stack-ca.p12已經用不上了,除非還需要生成別的密鑰)
六、生成破解版版鏡像
使用docker commit命令將破解好的容器提交為鏡像。
實踐表明,授權信息是存儲在elasticsearch的數據目錄下(即配置文件中“path.data”指定的路徑),如果將鏡像中的這個目錄映射到宿主機(實踐中一般會這么做),此目錄會被宿主機目錄覆蓋,授權信息就會沒有了,需要重新授權。因此鏡像的作用主要在于不必重新破解和替換x-pack-core-6.5.4.jar包,以及部署集群時不用拷貝密鑰文件到各個節點。
總結
以上是生活随笔為你收集整理的破解elasticsearch(制作破解版docker镜像)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel累加上一行的数值
- 下一篇: STM32LL库系列教程(一)—— LL