Насколько легко разработчику «изолировать» программу? ( bsd.lv )
В другом комментарии уже упоминался Chromium. В похожем баулбарке я бы упомянул Deno для запуска TypeScript/JavaScript в песочнице, которой нужно дать явное разрешение на файловую систему и сетевой доступ [1].
Вероятно, следует упомянуть и WebAssembly [2].
[1] https://docs.deno.com/runtime/fundamentals/security/
[2] Существуют разные среды выполнения, вот одна из них: https://docs.wasmtime.dev/security.html
Я игрался с deno в течение последних недель. Это определенно интересный проект. Однако я нахожу, что системе разрешений не хватает той детализации, которую я хотел бы. Вы быстро оказываетесь в состоянии «все или ничего», где я бы действительно хотел вместо этого различать код, который я считаю надежным, и код, который я считаю рискованным.
Тем не менее, довольно аккуратно, и я понимаю, где буду использовать это в будущем.
Ситуация с macOS просто удручающа. sandbox-exec / seatbelt помечены как устаревшие почти десять лет назад (с macOS Sierra в 2016 году), но все по-прежнему используют их — вот OpenAI использует их для своего нового Codex CLI: https://github.com/openai/codex/issues/215
Может быть, новые “контейнеры” в macOS 26 станут хорошей заменой? Хотя, похоже, это другое решение.
Все, что мне нужно, это простой, документированный, поддерживаемый способ запустить двоичный файл на моем компьютере и сказать: «он может получить доступ только к этим файлам, использовать столько-то оперативной памяти и не может делать никаких исходящих сетевых запросов». Меня всегда удивляло, насколько это сложно!
Согласен, macOS здесь отстает от всех остальных ОС.
Самое простое решение — отказаться от этого и использовать Linux (Docker).
Я использую Docker для этого. Песочница неэффективна. Например, если вы запустите Firefox с профилем “deny network”, вы все равно сможете просматривать веб-страницы как обычно.

то же самое.. Я использую https://github.com/jrz/container-shell для запуска нового образа Debian+Tools в текущем каталоге, но при этом он позволяет мне легко открывать несколько терминалов для одного и того же экземпляра.
shell my:sandbox Я также использую sandbox-exec с ограничениями по pwd, в зависимости от того, что я хочу выполнить.
На самом деле это не имеет значения, если:
1) Разработчики отмечают «каждое разрешение»
2) На уровне распределения никаких проверок не происходит.
По понятным причинам хром имеет довольно обширную песочницу. Вы можете прочитать исходный код прямо здесь: https://source.chromium.org/chromium/chromium/src/+/main:con…

Вот более информативный документ о песочнице в Chromium
https://source.chromium.org/chromium/chromium/src/+/main:san…
Похоже, это подмножество их песочницы, которое применяется к графическим процессорам, файл — content/gpu/gpu_main.cc

Мне это интересно для предстоящего проекта, но сложность настройки не кажется хорошим способом сравнения этих проектов. Мне нужно знать: (a) могу ли я запустить полностью ненадежный код в этих песочницах? (b) которые позволяют мне отключить сетевой доступ, доступ к файловой системе и ограничить использование ЦП и ОЗУ? т. е. набор функций.
Настройка может оказаться непростой задачей, но я предполагаю, что мне придется сделать это только один раз, а затем я смогу запихивать в него произвольные программы.
Tangential: Есть ли хорошие методы для windows/windows software? Hyper V хорош для небольшого кода, но если вы хотите устанавливать программу каждый раз, она устаревает очень быстро. Я бы тоже не хотел доверять случайным файлам из интернета.

Хотя это и интересно, отсутствие различия между кооперативными и немодифицированными программами в данном случае несколько ослабляет сравнение.
Я имею в виду, что API OpenBSD великолепны и все такое, но большинство разработчиков не будут знать о них и не будут развертывать их на платформе, которая их изначально поддерживает.
И да, супервизоры режима ядра, если они доступны, страдают от непонятных конфигураций, поэтому ясно, что было бы неплохо найти золотую середину (особенно такую, которая применима и к W-среде), но не ясно, заинтересован ли кто-то в этом?
Действительно, если вы пытаетесь создать что-то кроссплатформенное и используете специфические API BSD для безопасности, легко получить #ifdef soup в некоторых из самых чувствительных частей вашего кода. Один неверный логический шаг там, и вы скомпрометируете свое приложение, пытаясь его укрепить. Я не знаю решения 🙁
Source: news.ycombinator.com