Как запустить nsjail в Google Cloud Run без ошибок prctl()?Python

Программы на Python
Ответить
Anonymous
 Как запустить nsjail в Google Cloud Run без ошибок prctl()?

Сообщение Anonymous »

## Резюме

Я пытаюсь развернуть службу выполнения кода Python с помощью nsjail для изолированной программной среды в Google Cloud Run, но nsjail завершается с ошибкой `prctl(PR_SET_SECUREBITS)` даже при минимальной настройке. Существует ли рабочая конфигурация nsjail для среды gVisor Cloud Run?
## Environment

- **Платформа:** 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): неверный аргумент

## What I've Tried

### Configuration 1: Minimal nsjail (all namespaces disabled)
```protobuf
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

Результат: Все равно происходит сбой из-за ошибки prctl()
Конфигурация 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

Dockerfile
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
Ответить

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

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

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

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

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