Песочница приложений, службы XPC и различные права

Мой дизайн приложения какао представляет собой одно приложение (пользовательский интерфейс) и три службы XPC.

Главному приложению требуется файл только для чтения, чтобы показать powerbox и отобразить выбранный путь в пользовательском интерфейсе

  • com.apple.security.app-песочница
  • com.apple.security.files.bookmarks.app-scope
  • com.apple.security.files.user-selected.только для чтения

Двум службам XPC нужен файл только для чтения.

  • com.apple.security.app-песочница
  • com.apple.security.files.bookmarks.app-scope
  • com.apple.security.files.user-selected.только для чтения

Для одной службы XPC требуется файл чтение-запись

  • com.apple.security.app-песочница
  • com.apple.security.files.bookmarks.app-scope
  • com.apple.security.files.user-selected.read-write

Из-за потока взаимодействия с пользователем основное приложение открывает диалоговое окно Powerbox, позволяющее пользователю выбрать каталог и отобразить его в пользовательском интерфейсе. Затем основное приложение сохраняет это как закладку с областью безопасности. Данные о закладках передаются по соединениям XPC по мере необходимости, и каждый отдельный процесс XPC разрешает закладки, чтобы получить доступ к этим файлам в своей собственной изолированной программной среде.

Проблема в том, что если я не настрою главное приложение (которое открывает блок питания) на доступ к файлу чтение-запись, служба XPC, которой требуется доступ на запись, не получит его, даже если в его файле прав указан файл доступ для чтения и записи. В консоли логируется следующее:

deny file-write-unlink <file path>

Единственный способ обойти это — дать основному приложению, которое открывает файл powerbox, права на чтение-запись или перепроектировать поток пользовательского интерфейса, чтобы процесс, которому требуется доступ для записи, отображал powerbox? Конечная цель состоит в том, чтобы каждый процесс имел как можно меньше разрешений. Идеальным вариантом было бы отсутствие доступа к файлам в основном процессе .app, наличие двух служб XPC с файлами только для чтения и одного служебного файла XPC для чтения и записи. Спасибо!

Изменить:

Доступ к Powerbox и файловой системе за пределами вашего контейнера :

Технология безопасности OS X, которая взаимодействует с пользователем для расширения вашей песочницы, называется Powerbox. Powerbox не имеет API. Ваше приложение прозрачно использует Powerbox, когда вы используете классы NSOpenPanel и NSSavePanel.


person Andrew    schedule 09.01.2014    source источник
comment
Я обновил свой вопрос ссылкой на соответствующую документацию по блоку питания.   -  person Andrew    schedule 09.01.2014


Ответы (1)


Я не эксперт в песочнице, но, эй, даже ребята, которые ее написали, не являются экспертом. Зинг!

В любом случае, архитектурно для встроенных сервисов XPC имеет смысл разрешить только подмножество содержащего их приложения, если это действительно то, что происходит. Можно было бы выдвинуть аргумент против этого, но аргументом было бы то, что системе и пользователям намного проще понять, что может делать приложение, если оно должно объявлять ВСЕ на верхнем уровне, а нижние уровни (XPC) только разрешено делать столько же или меньше.

Хотя попытаться сохранить права как можно меньше, в этом случае вы действительно открываете файл для чтения и записи, поэтому вы можете объявить его.

person Wil Shipley    schedule 09.01.2014