V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
piaochen0
V2EX  ›  Python

Python 下有什么 Bash Shell 脚本的解析库?

  •  
  •   piaochen0 · 2020-12-03 11:10:39 +08:00 · 2267 次点击
    这是一个创建于 1452 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近项目需要在 python 下解析 bash shell 脚本,对其中解析到的命令,进行风险识别。
    目前在试了下 github 上的 bashlex 库

    目前试了几个脚本,就发现了一些问题:
    1.不支持注释
    2.空行不支持
    3.$((..))不支持
    4.部分方法声明调用也会报错
    还有部分空格之类的会报错

    当然这些都是可以前置处理的,不过不知道接下来还有什么坑。
    想问问各位有没有其他更好的 shell 脚本解析库。

    7 条回复    2020-12-03 15:04:47 +08:00
    factoid
        1
    factoid  
       2020-12-03 12:59:21 +08:00 via iPhone
    不太懂你的解析是什么意思,paramiko 库可以 ssh 上,可以执行 shell 脚本,
    abersheeran
        2
    abersheeran  
       2020-12-03 13:05:21 +08:00
    就是对 Bash Shell 做语法解析呗。这个需求感觉蛮少的,如果你谷歌不到,那估计就是真没有。
    chizuo
        3
    chizuo  
       2020-12-03 13:07:51 +08:00
    @factoid 题主意思是 parser 吧,查了查好像就 bashlex 支持还算完整了,
    实在不行,看着源码改吧,捡起你的编译知识
    piaochen0
        4
    piaochen0  
    OP
       2020-12-03 14:11:02 +08:00
    @chizuo #3 是的 parser,目前我也只找到了 bashlex 能跑起来的,还试了 simple-shell-parser,发现 import 都直接报异常。
    aloxaf
        5
    aloxaf  
       2020-12-03 14:32:19 +08:00
    我觉得你的方向错了,bash 这种混乱的玩意儿你想通过静态分析来规避掉危险命令是不可能的……
    piaochen0
        6
    piaochen0  
    OP
       2020-12-03 14:36:39 +08:00
    @aloxaf #5 我也觉得方向错了,上头要做这个需求,没办法。昨天在另外一个帖子里,就探讨过这个问题了。
    丢个链接: https://www.v2ex.com/t/731372#reply17
    no1xsyzy
        7
    no1xsyzy  
       2020-12-03 15:04:47 +08:00
    你这之前的讨论没看到
    其实最好的方案是不用 shell,类似 Ansible 那样做成元信息的方式,然后自己调用 FileSystem API 去处理(也包括自己写个 shell )。
    次一等是白名单,任何不按格式来绕过的尝试全否决了
    再次一等就是换用 SeLinux 这种强权限控制
    要么就是初步判断解析然后人工 Review
    之后就是随便糊弄一下,假装弄了点搞头,到时候你就输入一下,然后 “看,拦截下来了”
    最末一等是认认真真做出来这么个工具,然后被各种奇技淫巧一秒骗过( python -c )
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2991 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:06 · PVG 21:06 · LAX 05:06 · JFK 08:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.