今天給大家分享一篇來(lái)自于某大公司運(yùn)維工程師的文章。在Linux運(yùn)維的工作中,大數(shù)據(jù)運(yùn)維總是要與hadoop打交道,那么在面對(duì)hadoop相關(guān)問(wèn)題的時(shí)候,運(yùn)維工程師應(yīng)該怎么做?又該如何提高自己的效率呢?
本文是在工作過(guò)程中講Zeppelin啟用https過(guò)程和Hack內(nèi)核以滿足客戶需求的記錄。
原因是這客戶很有意思,該客戶中國(guó)分公司的人為了驗(yàn)證內(nèi)網(wǎng)安全性,從國(guó)外找了一個(gè)滲透測(cè)試小組對(duì)Zeppelin和其他產(chǎn)品進(jìn)行黑客測(cè)試,結(jié)果發(fā)現(xiàn)Zeppelin主要倆問(wèn)題,一個(gè)是在內(nèi)網(wǎng)沒(méi)用https,一個(gè)是zeppelin里面可以執(zhí)行shell命令和Python語(yǔ)句。其實(shí)這不算大問(wèn)題,zeppelin本來(lái)就是干這個(gè)用的。但是滲透小組不了解zeppelin是做什么的,認(rèn)為即使在內(nèi)網(wǎng)里,執(zhí)行shell命令能查看操作系統(tǒng)的一些文件是大問(wèn)題,然后發(fā)生的事就不說(shuō)了,不是我們的問(wèn)題了。
不過(guò)既然他們要求整改,我們也只好配合,雖然大家都覺(jué)得內(nèi)網(wǎng)域名加https屬于脫了褲子放屁,然后不讓zeppelin干他本來(lái)應(yīng)該干的事就更過(guò)分了,但鑒于客戶是甲方,也只好hack源碼了。
于是某個(gè)周末用了4個(gè)小時(shí)完成所有工作。
先記錄下zeppelin加https訪問(wèn),我們有自己的域名證書(shū),所以直接用即可。如果沒(méi)有域名證書(shū),需要自簽發(fā),那么可以看第二部分,雙向認(rèn)證步驟。
https第一部分,已有域名添加jks:

https第二部分,自簽發(fā)證書(shū)雙向認(rèn)證添加jks

如果是不需要雙向認(rèn)證,只要單向自簽發(fā),不創(chuàng)建客戶端的各種就可以了。
然后找個(gè)地把這些文件放過(guò)去,再修改zeppelin配置即可。

然后反代那里也加上443的ssl證書(shū)以及443轉(zhuǎn)8443的upstream即可。
然后是hack zeppelin源碼加入關(guān)鍵字限制,這個(gè)確實(shí)找了一小會(huì)zeppelin發(fā)送執(zhí)行源碼給interpreter的地方,zeppelin架構(gòu)比較清晰,但是代碼挺復(fù)雜的,用到了很多小花活兒。比如thrift,interpreter腳本里建立nc監(jiān)聽(tīng)。然后各個(gè)解釋器插件用socket跟interpreter腳本通信,前端angular,后端jetty,還用shiro做驗(yàn)證和授權(quán)。回頭可以單開(kāi)好幾篇說(shuō)說(shuō)zeppelin安裝,使用和詳細(xì)配置,做這項(xiàng)目基本把zeppelin摸透了。
找到發(fā)送前端編寫(xiě)內(nèi)容給interpreter的java代碼,然后用很生硬的辦法限制執(zhí)行命令。具體那個(gè).java文件的名字我就不說(shuō)了,有懸念有驚喜。我不寫(xiě)java,只負(fù)責(zé)讀源碼找到代碼位置,hack的java是同事寫(xiě)的。然后編譯,替換jar包,完成。后面改了改配置,后續(xù)的滲透測(cè)試順利通過(guò)。

因?yàn)榭蛻粲衐eadline限制,所以快速定位源碼位置的過(guò)程還是挺有意思的,比較緊張刺激,在這個(gè)以小時(shí)計(jì)算deadline壓力下,什么intelliJ, Eclipse都不好使啊,就grep和vi最好用,從找到到改完,比客戶定的deadline提前了好幾個(gè)小時(shí)。
作者:Slaytanic
來(lái)源:http://slaytanic.blog.51cto.com/2057708/1978521