Я пытаюсь развернуть службу выполнения кода Python с помощью nsjail для изолированной программной среды в Google Cloud Run, но nsjail завершается с ошибкой `prctl(PR_SET_SECUREBITS)` даже при минимальной настройке. Существует ли рабочая конфигурация nsjail для среды gVisor Cloud Run?
Среда
Платформа: Google Cloud Run (управляемая, на основе gVisor)
Базовый образ: python:3.11-slim
nsjail: Последняя версия с GitHub (построена) из исходного кода)
Развертывание: gcloud run Deploy с 1 ГБ памяти, без специальных флагов
## Что я пытаюсь сделать
Безопасное выполнение ненадежных сценариев Python с использованием nsjail для ограничения ресурсов (ЦП, памяти) и изоляции файловой системы.
## Проблема
nsjail не работает начать с этой ошибки:
[E][2025-11-24T23:58:07+0000][11] initNsFromChild():265 prctl(PR_SET_SECUREBITS, SECBIT_KEEP_CAPS | SECBIT_NO_SETUID_FIXUP): недопустимый аргумент
Что я пробовал
Конфигурация 1: минимальный nsjail (все пространства имен отключены)
Код: Выделить всё
name: "python-sandbox"
mode: ONCE
time_limit: 5
# All disabled to avoid namespace errors
clone_newnet: false
clone_newuser: false
clone_newns: false
clone_newpid: false
clone_newipc: false
clone_newuts: false
clone_newcgroup: false
# Only resource limits
rlimit_as: 512
rlimit_cpu: 10
rlimit_nofile: 64
rlimit_nproc: 32
Конфигурация 2: с отключением_no_new_privs
Код: Выделить всё
# ... same as above plus:
keep_caps: false
disable_no_new_privs: true
Конфигурация 3: Полный nsjail с пространствами имен
Код: Выделить всё
clone_newnet: true
clone_newuser: true
# ... etc
Код: Выделить всё
[W] clone(flags=CLONE_NEWNS|CLONE_NEWCGROUP|...) failed: Invalid argument
Код: Выделить всё
FROM python:3.11-slim
# Build nsjail
RUN apt-get update && apt-get install -y \
build-essential pkg-config libnl-route-3-dev \
libnl-3-dev libprotobuf-dev protobuf-compiler \
bison flex git && \
git clone --depth 1 https://github.com/google/nsjail.git /tmp/nsjail && \
cd /tmp/nsjail && make && \
cp /tmp/nsjail/nsjail /usr/bin/nsjail && \
chmod +x /usr/bin/nsjail
# ... rest of setup
CMD ["gunicorn", "--bind", "0.0.0.0:8080", "app:app"]
Код: Выделить всё
subprocess.run([
'/usr/bin/nsjail',
'--config', '/app/config/nsjail.cfg',
'--',
'/usr/local/bin/python3', 'script.py'
], timeout=5)
- Локально с Docker: Прекрасно работает с docker run --privileged
- Базовое выполнение: Скрипты Python прекрасно работают без оболочки nsjail
- Можно ли вообще запустить nsjail в Cloud Run? Мне сказали, что да, но я не могу найти рабочие конфигурации
- Существует ли флаг развертывания Cloud Run, разрешающий системные вызовы prctl()?
- Существует ли модифицированная сборка nsjail, которая работает без PR_SET_SECUREBITS?
- Рабочая конфигурация nsjail для Cloud Run
- nsjail GitHub
- Контракт контейнера Cloud Run
- Аналогично песочница: Windmill (также использует nsjail, но неясно, работает ли он в Cloud Run)
Подробнее здесь: https://stackoverflow.com/questions/798 ... ctl-errors
Мобильная версия