共计 1288 个字符,预计需要花费 4 分钟才能阅读完成。
今天给大家分享一篇来自于某大公司运维工程师的文章。在 Linux 运维的工作中,大数据运维总是要与 hadoop 打交道,那么在面对 hadoop 相关问题的时候,运维工程师应该怎么做?又该如何提高自己的效率呢?
本文是在工作过程中讲 Zeppelin 启用 https 过程和 Hack 内核以满足客户需求的记录。
原因是这客户很有意思,该客户中国分公司的人为了验证内网安全性,从国外找了一个渗透测试小组对 Zeppelin 和其他产品进行黑客测试,结果发现 Zeppelin 主要俩问题,一个是在内网没用 https,一个是 zeppelin 里面可以执行 shell 命令和 Python 语句。其实这不算大问题,zeppelin 本来就是干这个用的。但是渗透小组不了解 zeppelin 是做什么的,认为即使在内网里,执行 shell 命令能查看操作系统的一些文件是大问题,然后发生的事就不说了,不是我们的问题了。
不过既然他们要求整改,我们也只好配合,虽然大家都觉得内网域名加 https 属于脱了裤子放屁,然后不让 zeppelin 干他本来应该干的事就更过分了,但鉴于客户是甲方,也只好 hack 源码了。
于是某个周末用了 4 个小时完成所有工作。
先记录下 zeppelin 加 https 访问,我们有自己的域名证书,所以直接用即可。如果没有域名证书,需要自签发,那么可以看第二部分,双向认证步骤。
https 第一部分,已有域名添加 jks:
https 第二部分,自签发证书双向认证添加 jks
如果是不需要双向认证,只要单向自签发,不创建客户端的各种就可以了。
然后找个地把这些文件放过去,再修改 zeppelin 配置即可。
然后反代那里也加上 443 的 ssl 证书以及 443 转 8443 的 upstream 即可。
然后是 hack zeppelin 源码加入关键字限制,这个确实找了一小会 zeppelin 发送执行源码给 interpreter 的地方,zeppelin 架构比较清晰,但是代码挺复杂的,用到了很多小花活儿。比如 thrift,interpreter 脚本里建立 nc 监听。然后各个解释器插件用 socket 跟 interpreter 脚本通信,前端 angular,后端 jetty,还用 shiro 做验证和授权。回头可以单开好几篇说说 zeppelin 安装,使用和详细配置,做这项目基本把 zeppelin 摸透了。
找到发送前端编写内容给 interpreter 的 java 代码,然后用很生硬的办法限制执行命令。具体那个.java 文件的名字我就不说了,有悬念有惊喜。我不写 java,只负责读源码找到代码位置,hack 的 java 是同事写的。然后编译,替换 jar 包,完成。后面改了改配置,后续的渗透测试顺利通过。
因为客户有 deadline 限制,所以快速定位源码位置的过程还是挺有意思的,比较紧张刺激,在这个以小时计算 deadline 压力下,什么 intelliJ, Eclipse 都不好使啊,就 grep 和 vi 最好用,从找到到改完,比客户定的 deadline 提前了好几个小时。
作者:Slaytanic
来源:http://slaytanic.blog.51cto.com/2057708/1978521