Как получить полные сообщения Traceback, когда «открытый» системный вызов запрещен?Python

Программы на Python
Ответить
Anonymous
 Как получить полные сообщения Traceback, когда «открытый» системный вызов запрещен?

Сообщение Anonymous »

Я работаю над созданием среды для запуска ненадежного кода Python для пользователей. Я использую привязки Python библиотеки libseccomp, чтобы избежать запуска небезопасных системных вызовов, и служба работает в контейнере докера.
Вот сценарий, который будет выполняться в моем окружающая среда.
P.S. Список запрещенных системных вызовов взят из этого проекта: https://github.com/langgenius/dify-sand ... s_amd64.go

Код: Выделить всё

import sys
from seccomp import *
import json
import requests
import datetime
import math
import re
import os
import signal
import urllib.request
allowed_syscalls_str = "syscall.SYS_NEWFSTATAT, syscall.SYS_IOCTL, syscall.SYS_LSEEK, syscall.SYS_GETDENTS64,syscall.SYS_WRITE, syscall.SYS_CLOSE, syscall.SYS_OPENAT, syscall.SYS_READ,syscall.SYS_FUTEX,syscall.SYS_MMAP, syscall.SYS_BRK, syscall.SYS_MPROTECT, syscall.SYS_MUNMAP, syscall.SYS_RT_SIGRETURN,syscall.SYS_MREMAP,syscall.SYS_SETUID, syscall.SYS_SETGID, syscall.SYS_GETUID,syscall.SYS_GETPID, syscall.SYS_GETPPID, syscall.SYS_GETTID,syscall.SYS_EXIT, syscall.SYS_EXIT_GROUP,syscall.SYS_TGKILL, syscall.SYS_RT_SIGACTION, syscall.SYS_IOCTL,syscall.SYS_SCHED_YIELD,syscall.SYS_SET_ROBUST_LIST, syscall.SYS_GET_ROBUST_LIST, syscall.SYS_RSEQ,syscall.SYS_CLOCK_GETTIME, syscall.SYS_GETTIMEOFDAY, syscall.SYS_NANOSLEEP,syscall.SYS_EPOLL_CREATE1,syscall.SYS_EPOLL_CTL, syscall.SYS_CLOCK_NANOSLEEP, syscall.SYS_PSELECT6,syscall.SYS_TIME,syscall.SYS_RT_SIGPROCMASK, syscall.SYS_SIGALTSTACK, syscall.SYS_CLONE,syscall.SYS_MKDIRAT,syscall.SYS_MKDIR,syscall.SYS_SOCKET, syscall.SYS_CONNECT, syscall.SYS_BIND, syscall.SYS_LISTEN, syscall.SYS_ACCEPT, syscall.SYS_SENDTO, syscall.SYS_RECVFROM,syscall.SYS_GETSOCKNAME, syscall.SYS_RECVMSG, syscall.SYS_GETPEERNAME, syscall.SYS_SETSOCKOPT, syscall.SYS_PPOLL, syscall.SYS_UNAME,syscall.SYS_SENDMSG, syscall.SYS_SENDMMSG, syscall.SYS_GETSOCKOPT,syscall.SYS_FSTAT, syscall.SYS_FCNTL, syscall.SYS_FSTATFS, syscall.SYS_POLL, syscall.SYS_EPOLL_PWAIT"

allowed_syscalls_tmp = allowed_syscalls_str.split(',')
L = []
for item in allowed_syscalls_tmp:
item = item.strip()
parts = item.split('.')[1][4:].lower()
L.append(parts)

# create a filter object with a default KILL action
f = SyscallFilter(defaction=KILL)
for item in L:
f.add_rule(ALLOW, item)
f.add_rule(ALLOW, 307)
f.add_rule(ALLOW, 318)
f.add_rule(ALLOW, 334)
f.load()

#User's code, triggers ZeroDivision
a = 10 / 0
Однако, поскольку системный вызов open запрещен, я не могу предоставить пользователям полное сообщение об ошибке. Безопасно ли предоставлять пользователям возможность открытия и записи? Или есть другой способ получить полное сообщение трассировки? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -is-banned
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»