破解elasticsearch(制作破解版docker镜像)
破解elasticsearch(制作破解版docker鏡像)
本文僅用于學(xué)習(xí)交流,要使用elasticsearch的付費(fèi)功能,請通過正規(guī)渠道購買platinum(白金)版。
一、部署純凈版elasticsearch和kibana容器
1、修改宿主機(jī)vm.max_map_count的值
使用docker運(yùn)行elasticsearch,要求宿主機(jī)系統(tǒng)的m.max_map_count的值不小于262144,否則elasticsearch鏡像無法運(yùn)行。
編輯“/etc/sysctl.conf”文件,在其中增加一行:
保存后,執(zhí)行“sysctl -p”讓配置生效。
2、部署純凈版elasticsearch
拉取elasticsearch-6.5.4鏡像
運(yùn)行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”,否則導(dǎo)入license失敗。
3、部署kibana
如果使用命令行導(dǎo)入證書,可以不用部署kibana。
拉取kibana-6.5.4鏡像
運(yùn)行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、創(chuàng)建LicenseVerifier.java和XPackBuild.java文件,文件內(nèi)容如下:
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命令將他們拷貝到宿主機(jī)的/tmp目錄下:
3、編譯LicenseVerifier.java和XPackBuild.java文件
編譯LicenseVerifier.java和XPackBuild.java文件的方法有很多種,我是通過eclipse進(jìn)行編譯:
在eclipse中新建java工程,創(chuàng)建LicenseVerifier和XPackBuild類,注意這兩個(gè)類所在的包。在工程中導(dǎo)入依賴的jar包:x-pack-core-6.5.4.jar、lucene-core-7.5.0.jar、elasticsearch-core-6.5.4.jar。在eclipse中clean一下工程,即可到工程的bin目錄下找到對應(yīng)的class文件。
4、更新x-pack-core-6.5.4.jar
用我們的LicenseVerifier.class和XPackBuild.class文件替換x-pack-core-6.5.4.jar中對應(yīng)的文件。可用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自帶一個(gè)永久有效的basic版證書,可以使用基本功能,現(xiàn)在將它替換為platinum(白金)版。
如果不想申請證書,可直接使用我申請并修改好的證書:
1、去官網(wǎng)申請證書,官網(wǎng)地址:https://license.elastic.co/registration。
這里申請到的也是basic版的證書,不過沒有關(guān)系,在導(dǎo)入之前,我們將其修改為platinum版即可。
除了電子郵箱地址,其他可以隨便填。電子郵箱地址用來接收證書下載地址,一定要填有效的郵箱。之后會收到郵件,如下圖所示:
從郵件中的鏈接進(jìn)去,根據(jù)提示下載好證書,證書如下:
2、修改證書
我們只需要修改證書中的“type”和“expiry_date_in_millis”字段的值。
“type”的值修改為:“platinum”
“expiry_date_in_millis”的值修改為:4102415999000
“expiry_date_in_millis”是過期時(shí)間,是毫秒為單位的時(shí)間戳,設(shè)置為4102415999000表示2099-12-31 23:59:59過期。
四、上傳和更新elasticsearch證書
如果不想用kibana導(dǎo)入,可直接使用命令行導(dǎo)入證書。假設(shè)已經(jīng)將編輯好的證書放在/tmp目錄,使用如下命令導(dǎo)入證書:
輸入完上述命令后,會提示輸入密碼,不用管,直接回車。
在瀏覽器中輸入kibana的服務(wù)地址,打開kibana。
因?yàn)槲业乃拗鳈C(jī)是IP地址為192.168.241.13的虛擬機(jī),上午部署kibana的時(shí)候,將服務(wù)端口映射到了5601(5601也是kibana默認(rèn)服務(wù)端口),所以我應(yīng)該在地址欄輸入:http://192.168.241.13:5601。
打開后,先選擇左邊菜單欄的Management,再選擇License Management。
下面按圖示操作:
上傳成功后,顯示如下:
如果不使用kibana,可在瀏覽器中直連elasticsearch查看授權(quán)信息,在瀏覽器地址欄中輸入:
結(jié)果如下:
{"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的權(quán)限控制功能,而開啟權(quán)限控制功能的elasticsearch集群,各節(jié)點(diǎn)中必須使用SSL通信,必須使用密鑰文件。elasticsearch提供了一個(gè)工具生成密鑰。
下面只是簡單講解如何生成證書和密鑰,以及說明下當(dāng)時(shí)遇到的坑,更詳細(xì)的內(nèi)容,請參閱官網(wǎng):https://www.elastic.co/guide/en/elasticsearch/reference/6.3/configuring-tls.html#node-certificates
1、生成ca證書
進(jìn)入elasticsearch容器
在容器中創(chuàng)建密鑰文件目錄(下述命令在容器中執(zhí)行)
mkdir /usr/share/elasticsearch/config/certs注意:生成的密鑰文件一定要在/usr/share/elasticsearch/config目錄或其子目錄下,否則后面啟用SSL的時(shí)候,會提示沒有權(quán)限讀取密鑰文件。至于原因,我也不知道,這是一個(gè)很奇怪的現(xiàn)象,當(dāng)時(shí)弄了我一天才發(fā)現(xiàn)這個(gè)現(xiàn)象,當(dāng)時(shí)我是將密鑰文件放在/usr/share/elasticsearch/certs下,文件和目錄權(quán)限都給到777,還是提示沒有權(quán)限。
生成ca證書(下述命令在容器中執(zhí)行)
這個(gè)工具會在當(dāng)前目錄下生成一個(gè)elastic-stack-ca.p12文件,我們進(jìn)到/usr/share/elasticsearch/config/certs目錄執(zhí)行,后面就不用拷貝了。這個(gè)命令會提示給證書文件輸入一個(gè)密碼,如果不想設(shè)置,直接回車就可以了,相當(dāng)于空密碼。
2、生成密鑰文件(下述命令在容器中執(zhí)行)
cd /usr/share/elasticsearch/config/certs /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12這個(gè)命令會提示輸入證書的密碼和密鑰文件的密碼,如果上一步中沒有設(shè)置密碼,提示輸入證書密碼時(shí)直接回車就好。密鑰文件的密碼也是一樣,不想設(shè)置就直接回車。
命令執(zhí)行完畢后,會在當(dāng)前目錄生成elastic-certificates.p12文件。
3、設(shè)置文件目錄的屬主和權(quán)限(下述命令在容器中執(zhí)行)
chown -R elasticsearch /usr/share/elasticsearch/config/certs chmod 644 /usr/share/elasticsearch/config/certs/*.p12在容器中,elasticsearch的工作目錄屬主為elasticsearch,而我們剛才創(chuàng)建的目錄和文件屬主都是root,修改為elasticsearch保持一致,其實(shí)屬主不改也不要緊。第二條命令修改文件權(quán)限為所有用戶和組可讀,確保容器運(yùn)行時(shí)能讀到密鑰文件。(生成密鑰文件elastic-certificates.p12后,證書文件elastic-stack-ca.p12已經(jīng)用不上了,除非還需要生成別的密鑰)
六、生成破解版版鏡像
使用docker commit命令將破解好的容器提交為鏡像。
實(shí)踐表明,授權(quán)信息是存儲在elasticsearch的數(shù)據(jù)目錄下(即配置文件中“path.data”指定的路徑),如果將鏡像中的這個(gè)目錄映射到宿主機(jī)(實(shí)踐中一般會這么做),此目錄會被宿主機(jī)目錄覆蓋,授權(quán)信息就會沒有了,需要重新授權(quán)。因此鏡像的作用主要在于不必重新破解和替換x-pack-core-6.5.4.jar包,以及部署集群時(shí)不用拷貝密鑰文件到各個(gè)節(jié)點(diǎn)。
總結(jié)
以上是生活随笔為你收集整理的破解elasticsearch(制作破解版docker镜像)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel累加上一行的数值
- 下一篇: STM32LL库系列教程(一)—— LL