Использование binfmt-misc совместно с xattrs

Использование binfmt-misc совместно с xattrs

В настоящее время я использую часть программного обеспечения «песочницы» на моем компьютере 14.04, которая изолирует двоичные файлы Linux друг от друга (используя специальный тип изоляции пространства имен, отличный от AppArmor)

В настоящее время способ вызова песочницы выглядит следующим образом:

/usr/local/bin/sandbox /path/to/binary --optional-arguments

Моя проблема в том, что я хочу вызвать определенные произвольные двоичные файлы и выполнить их в песочнице.безнеобходимо добавить эту /usr/local/bin/sandboxчасть к моей команде оболочки. То есть:

/usr/local/bin/sandbox /path/to/binary --optional-arguments --> *new process*

Становится:

/path/to/binary --optional-arguments --> *binfmt-misc* --> *new process*

Я подумал, что смогу легко сделать это благодаря binfmt-misc, однако после прочтения документации он, похоже, поддерживает только запрос интерпретатора либо через магические биты в самом файле, либо через расширение файла. Поскольку в этом конкретном случае невозможно сделать ни одну из этих вещей, я поискал опцию в binfmt-misc, которая позволила бы мне указать расширенные атрибуты для определенных двоичных файлов, которые я хочу запустить в песочнице, которые binfmt-misc затем мог бы прочитать и использовать для определения того, что эти двоичные файлы должны запускаться /usr/local/bin/sandbox«интерпретатором». Однако я пока не нашел в нем такой функции, которая позволила бы мне это сделать.

Есть ли способ автоматически запускать произвольные двоичные файлы ELF без расширения, скомпилированные для той же архитектуры, что и мой компьютер, используя песочницу?

решение1

Я не знаю способа сделать это через binfmt-misc и xattrs, но я предложу другой подход. Я не пробовал, но не вижу, почему это не сработает.

Идея состоит в том, чтобы использоватькрепление для союзачтобы скрыть реальные двоичные файлы с помощью скрипта-обертки, который вызывает песочницу. Нам нужно объединенное монтирование, где верхний каталог в основном читается, а запись в нетеневой файл переходит в нижний каталог, что поддерживается не всеми системами объединения монтирования. В частности, это исключает OverlayFS, который теперь встроен в ядро ​​Linux.

Напишите универсальный скрипт-обертку:

#!/bin/sh
exec /usr/local/bin/sandbox "${0#/sandboxed}" "$@"

Создайте каталог /sandboxи создайте объединенное монтирование, которое затеняет корневую файловую систему. Я буду использоватьауфс(Убунту:aufs-tools), от которого, к сожалению, недавно отказались; возможно, есть лучший выбор.

mount -t aufs -o br:/,br:/sandbox aufs-sandbox /

Для каждого исполняемого файла, который вы хотите поместить в песочницу, создайте ссылку /sandbox/path/to/fooна скрипт-оболочку (предварительно создав необходимые каталоги /path/toв /sandbox).

Связанный контент