Я пытаюсь развернуть службу выполнения кода 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
Мобильная версия