长亭实习(三)-项目代码从Lua到Teal-lang重构

长亭实习(三)-项目代码从Lua到Teal-lang重构

原本打算上周写的,但是因为上周大部分时间都在熟悉项目代码,加上周末去奥体中心去玩了一天,耽搁了些时间,所以就鸽了。

因为我是在安全策略部,之前牧云安全策略的代码,比如基线检查,本地提权模块的代码都是用lua开发的,不过lua作为弱类型语言实在是过于灵活,每个人写的代码风格各异,导致出现debug非常困难。所以李扬师傅就打算用tl来代替lua,而我这周的工作就是用tl重写基线检查的代码。

为什么要使用 Teal-lang 代替Lua?

这里我想直接引用李扬师傅在文档里写的话。

项目模块规模越来越多,如何来保证项目的代码质量成了一个比较难的问题。因为 Lua  是一个比 js 和 Python 还灵活动态的语言,在大型工程中维护 Lua 代码如履薄冰,相信写过 Golang 或者 Java 之类的语言的人都是有这样的感受。

teal 是带类型的 lua,类似于 TypeScript 和 JavaScript 的关系。

当然,它不可能捕捉到程序中的每一个可能的错误,但它应该可以帮助你解决一些问题,比如字段中的错字,参数缺失等等。它还会让你更清楚地知道你的程序要处理的是什么样的数据。用tl写的代码,最终还是会被翻译成lua执行。而Teal现在还只是一个开源项目

因为teal还尚不成熟,自身还存在一些bug。所以一开始我个人认为直接引入到生产环境中是否恰当,不过我感觉师傅这样的考虑也是有原因的,lua本身就不适合写大项目,但因为插件必须要热更新,而lua又是最好的选择,所以用tl代替lua开发也是尽可能减少维护项目代码的成本。

这一周下来,我感觉用tl还算比较顺利。不过写基线检查的代码也没什么好说的,就是按照cis文档的检测项,编写对应的代码以及测试用例的代码。熟悉整个流程之后其实没什么难度。

说一下项目中踩的一些坑,因为基线检测是对应不同的操作系统的,比如centos6和7,ubuntu,redhat的检查项代码是不同的,所以测试会挂载不同系统镜像的docker到虚拟机里。

这个是我在运行检查项代码时遇到的一个问题,lar是我们自己写的一个工具,直接打包到docker镜像中,而我使用时却报错了。最后请教了师傅,果然还是师傅有经验,这种可能是依赖的环境不同。师傅给我举了一个例子,比如有些打包好的二进制文件是依赖系统的glibc库的,但是如果当前环境没有或者与提供的版本不一致时就有可能出现这种问题。所以重新挂载一个外面编译好的文件到docker镜像去替换之前那个就可以解决了。

另外做的一件有意思的事就是,之前基线检查的yaml文档都是人工去官方文档里复制粘贴来的,这本身就是一件费时又没有意义的事情。所以师傅就在考虑能将pdf直接转换成yaml文档。听到这个想法后,我就打算来实现它。

比如这个就是一个检查项的pdf文档,而需要的yaml文档如下。

其实就是将其中的内容提取出来按照yaml格式写入。因为直接从pdf中提取过于麻烦,所以我们考虑先把pdf转换成html或者txt再进行内容提取。昨天花了半天的时间把这个小工具撸出来了,虽然说思路并不是很难,但做的过程中大量用的正常匹配,才发现这方面非常不熟练耽误了很多时间。

平时没感觉到正则这些基础有多重要,没有系统地掌握它,都是每次用的时候查一下,看似不重要的东西,实则花费了很多的时间。但真的到用的时候才发现功夫在平时,书到用时方恨少!

另外今天也是xray一周年的日子,今天朋友圈被xray刷屏了。看到李扬师傅的发的一条朋友圈。

因为李扬师傅去年一年时间都在写xray,其实这几天看着李扬师傅,P师傅和墨墨都加班到很晚,都在准备xray一周年版的发布。我心里真的很敬佩各位师傅们!能和长亭各位师傅们一起学习进步真的是我莫大的荣幸!

趁着今天是xray诞生一周年的日子,最后我也给xray推广一波,吹爆我长亭,牛逼!

zgao

如果有什么技术上的问题,可以加我的qq 1761321396 一起交流。

2条评论

Cherry 发布于5:52 下午 - 6月 19, 2020

旁友牛批,我记得长亭原来是在五道口的一个创业园吧,好像是学清路附近

    zgao 发布于3:01 下午 - 6月 21, 2020

    哈哈,是的。现在是在学清路768创意产业园。