是否有python模块判断命令字符串是否会对linux系统产生修改??

发布于 2022-09-07 21:24:38 字数 352 浏览 28 评论 0

我们有个系统, 允许执行客户post过来的命令, 调用ansible api 在远程系统上执行命令,

应该限制只有查询类命令, 比如

ps -ef | grep java
netstat -anpt | grep 1234

但是, 客户可能会修改系统, 写的如下命令

ps -ef | grep java | rm somefile
netstat -anpt | grep 1234 | pkill someprocess

是否有python的模块或者其他方法判定命令一个命令字符串是否会对系统产生修改

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜味超标? 2022-09-14 21:24:38

检查命令字符串不能防范未知的风险,建议从执行命令的用户/组着手,做一个安全沙盒。

何时共饮酒 2022-09-14 21:24:38

我换了种做法,

每种查询类命令比如 ps/ss, 查询后, 一般都是做grep 操作

我们限制用户执行的命令种类, 比如 ps/ss, 用户post时, 选择执行的命令类型,
并只能添加过滤关键字, 格式类似于

<cmd> key1 key2 key3

依次校验 key1..., 限制key只能是单词或包含有限的特殊字符, 拼接执行时不会对系统产生影响的,
这类校验就比较简单了, 一个正则就可以确定,

如下

word_re = re.compile(r'([a-zA-Z0-9\.]+)')

greps = []
for key in keys:
    matches = word_re.findall(key)
    # key 包含特殊字符
    if len(matches) == 0 or len(matches) > 1 or matches[0] != key:
        return send_msg(from_user, f'进程关键字包含特殊字符: {key}')
    greps.append(f'grep -i {key}')

cmd = f'ps -ef | {"|".join(greps)}'

在拼接命令后, 最终的执行格式如下

ps -ef | grep key1 | grep key2 | grep key3

这样就达到了在用户post关键字后校验命令仅会查询, 不会对系统产生影响

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文