Python Seccomp 允许 STDIN

0 投票
1 回答
658 浏览
提问于 2025-04-18 16:47

我正在做一个项目,需要运行一些可能有害的代码。这个项目的基本结构是有一个主进程和一个从进程。从进程负责运行那些可能有害的代码,并且启用了seccomp。

import prctl

prctl.set_seccomp(True)

这就是如何开启seccomp的。我可以从从进程向主进程发送信息,但反过来就不行了。当我没有开启seccomp时,我可以使用:

import sys

lines = sys.stdin.read()

或者类似的方式。我觉得这很奇怪,按照seccomp的默认设置,我应该有权限进行读写,特别是对于标准输入和输出。我甚至在开启seccomp之前尝试过打开标准输入。例如:

stdinFile = sys.stdin
prctl.set_seccomp(True)
lines = stdinFile.read()

但还是没有成功。我还尝试过readlines(),也不行。一个朋友建议我试试Unix域套接字,在开启seccomp之前打开它,然后直接使用write()调用。但这也没用。如果有人有解决这个问题的建议,请分享一下!我看到过一些C语言的代码,类似于

seccomp_add_rule(stuff)

但我在用Python的cffi模块时没有成功。

1 个回答

0

sys.stdin 不是一个文件句柄,你需要先打开它,才能在调用 set_seccomp 之前获取一个文件句柄。你可以用 os.fdopen 来做到这一点。标准输入(stdin)和标准输出(stdout)的文件描述符可以通过 sys.stdin.fileno() 来获取。

撰写回答