最近项目需要在 python 下解析 bash shell 脚本,对其中解析到的命令,进行风险识别。
目前在试了下 github 上的 bashlex 库
目前试了几个脚本,就发现了一些问题:
1.不支持注释
2.空行不支持
3.$((..))不支持
4.部分方法声明调用也会报错
还有部分空格之类的会报错
当然这些都是可以前置处理的,不过不知道接下来还有什么坑。
想问问各位有没有其他更好的 shell 脚本解析库。
1
factoid 2020-12-03 12:59:21 +08:00 via iPhone
不太懂你的解析是什么意思,paramiko 库可以 ssh 上,可以执行 shell 脚本,
|
2
abersheeran 2020-12-03 13:05:21 +08:00
就是对 Bash Shell 做语法解析呗。这个需求感觉蛮少的,如果你谷歌不到,那估计就是真没有。
|
3
chizuo 2020-12-03 13:07:51 +08:00
@factoid 题主意思是 parser 吧,查了查好像就 bashlex 支持还算完整了,
实在不行,看着源码改吧,捡起你的编译知识 |
4
piaochen0 OP @chizuo #3 是的 parser,目前我也只找到了 bashlex 能跑起来的,还试了 simple-shell-parser,发现 import 都直接报异常。
|
5
aloxaf 2020-12-03 14:32:19 +08:00
我觉得你的方向错了,bash 这种混乱的玩意儿你想通过静态分析来规避掉危险命令是不可能的……
|
6
piaochen0 OP |
7
no1xsyzy 2020-12-03 15:04:47 +08:00
你这之前的讨论没看到
其实最好的方案是不用 shell,类似 Ansible 那样做成元信息的方式,然后自己调用 FileSystem API 去处理(也包括自己写个 shell )。 次一等是白名单,任何不按格式来绕过的尝试全否决了 再次一等就是换用 SeLinux 这种强权限控制 要么就是初步判断解析然后人工 Review 之后就是随便糊弄一下,假装弄了点搞头,到时候你就输入一下,然后 “看,拦截下来了” 最末一等是认认真真做出来这么个工具,然后被各种奇技淫巧一秒骗过( python -c ) |