2

我正在尝试使用 Amazon Lambda 来托管一个编程学习平台,我必须在其中执行简单的不受信任的 Python 代码。

我最近以一种简单的方式隔离用户代码的尝试是用于seccomp禁用除从文件读取和写入stdout/之外stderr的任何内容,代码如下所示:

   from pyseccomp import *

   f = SyscallFilter(defaction=KILL)

   f.add_rule(ALLOW, "open",
                  Arg(1, MASKED_EQ, os.O_RDONLY,
                      os.O_RDONLY | os.O_RDWR | os.O_WRONLY))
   f.add_rule(ALLOW, "openat",
                  Arg(2, MASKED_EQ, os.O_RDONLY,
                      os.O_RDONLY | os.O_RDWR | os.O_WRONLY))
   f.add_rule(ALLOW, "read")
   f.add_rule(ALLOW, "write", Arg(0, EQ, sys.stdout.fileno()))
   f.add_rule(ALLOW, "write", Arg(0, EQ, sys.stderr.fileno()))
   f.add_rule(ALLOW, "close")
   f.add_rule(ALLOW, "getdents64")
   f.add_rule(ALLOW, "exit_group")
   f.add_rule(ALLOW, "rt_sigaction")
   f.add_rule(ALLOW, "sigaltstack")
   f.add_rule(ALLOW, "brk")
   f.add_rule(ALLOW, "lseek")
   f.add_rule(ALLOW, "fstat")
   f.add_rule(ALLOW, "mmap")
   f.add_rule(ALLOW, "mprotect")
   f.add_rule(ALLOW, "stat")
   f.add_rule(ALLOW, "ioctl", Arg(1, EQ, 0x5401)) # TCGETS
   f.add_rule(ALLOW, "fcntl")

   f.load()

这在本地运行良好,但在 Amazon Lambda 上,它没有找到该seccomp库。

我尝试将libseccomp.2我的 Debian 稳定机器包含在 Amazon Lambda 函数中,并且代码一直运行到f.load(),但随后失败

Traceback (most recent call last):
  File "sandbox.py", line 32, in <module>
    f.load()
  File "/var/task/pyseccomp.py", line 335, in load
    _check_status(_libseccomp.seccomp_load(self._filter))
  File "/var/task/pyseccomp.py", line 183, in _check_status
    raise _build_oserror(-res)
PermissionError: [Errno 1] Operation not permitted

seccomp_load返回是否EPERM意味着我根本无法在 Amazon Lambda 上使用 seccomp,或者我做错了什么。

4

0 回答 0