В настоящее время я использую на своем компьютере 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 без расширения, скомпилированного для той же архитектуры, что и мой компьютер, использующий песочницу автоматически?
Я не знаю о способе сделать это через binfmt-misc и xattrs, но я предложу другой подход. Я не испытал его, но я не вижу, почему это не работало бы.
идея состоит в том, чтобы использовать , объединение монтируется для сокрытия реальных двоичных файлов сценарием обертки, который называет песочницу. Нам нужно объединение, монтируют, где верхний каталог главным образом прочитан и пишет в незатененный файл, переходят к более низкому каталогу, который не поддерживается всем объединением, монтируют системы. В особенности это исключает OverlayFS, который теперь встроен в ядро Linux.
Запись универсальный сценарий обертки:
#!/bin/sh
exec /usr/local/bin/sandbox "${0#/sandboxed}" "$@"
Создают каталог /sandbox
и создают объединение, монтируют что тени корневая файловая система. Я буду использовать aufs (Ubuntu: aufs-tools
), от которого, к сожалению, недавно отказались; может быть лучший выбор.
mount -t aufs -o br:/,br:/sandbox aufs-sandbox /
Для каждого исполняемого файла, который Вы хотите поиграть в песочнице, свяжитесь /sandbox/path/to/foo
со сценарием обертки (после создания необходимых каталогов /path/to
под /sandbox
).