Как применить правила песочницы для конкретного приложения?

9

Я написал файл спецификация песочницы (вдохновленный файлами из /usr/share/sandboxи руководств , как это ) , и теперь я могу запустить некоторые приложения в песочнице с sandbox-exec $path_to_rules /Applications/$appname.app/Content/.... Хорошо.

Есть ли способ обеспечить соблюдение правил при регулярном запуске приложения («Открыть с помощью ...» и т. Д.)?

Я думал о замене двоичного файла внутри .app скриптом-оберткой, но он будет перезаписан после обновления приложения, и мне нужно будет каждый раз восстанавливать его.

Equidamoid
источник

Ответы:

5

Да, вы можете изменить двоичный файл или даже изменить Info.plist, но, как и изменение двоичного файла, который вы делаете, вам придется делать это снова при каждом обновлении приложения. Нет способа сделать это без изменения приложения таким образом, чтобы оно не было перезаписано при его обновлении.

Вы можете автоматически вносить изменения с помощью Launch Agent.
Сохраните следующее в ~/Library/LaunchAgentsas com.yourname.youragent.plist, затем запустите launchctl load ~/Library/LaunchAgents/com.yourname.youragent.plist.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.yourname.youragent</string>
        <key>OnDemand</key>
        <true/>
        <key>Program</key>
        <string>cp</string>
        <key>ProgramArguments</key>
        <array>
            <string>/Users/grgarside/test/MyApp</string>
            <string>/Applications/MyApp.app/Contents/MacOS/</string>
        </array>
        <key>WatchPaths</key>
        <array>
            <string>/Applications/MyApp.app/Contents/MacOS/MyApp</string>
        </array>
    </dict>
</plist>

Приведенный выше скрипт будет следить WatchPathsза любыми изменениями (в данном случае это бинарный файл для приложения) и будет запускать cpдля копирования вашего бинарного файла в приложение в / Applications.

Grg
источник
Я думаю об автоматическом исправлении установленных приложений. Есть ли способ запустить мой скрипт автоматически каждый раз, когда что-то /Applicationsменяется? А также запретить любому приложению изменять себя.
Эквидамоид
@Equidamoid Вы можете использовать LaunchAgents; отредактированный ответ
grg
1
Итак, в вашем примере он будет запускаться cp /Users/.../MyApp /Applications...каждый раз, когда изменяется двоичный файл MyApp? Спасибо!
Эквидамоид
@Equidamoid Да, именно так!
grg