Як застосувати правила пісочниці для конкретного додатка?


8

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

Чи є спосіб застосувати правила, коли додаток запускається регулярно ("Відкрити з ..." Finder тощо)?

Я думав про заміну бінарного файлу всередині .app скриптом для обгортки, але він буде перезаписаний після оновлення програми, і мені потрібно буде щоразу відновлювати його.

Відповіді:


4

Так, ви можете змінити двійкове або навіть змінити Info.plist, але, як змінити створений вами бінарний файл, потрібно буде робити це ще раз під час оновлення програми. Немає способу це зробити, не змінюючи додаток таким чином, що він не буде перезаписаний під час оновлення.

Ви можете автоматично внести свої зміни за допомогою агента запуску.
Збережіть наступне у ~/Library/LaunchAgentsяк 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змінено? А також заборонити будь-якій програмі змінювати себе.
Equidamoid

@Equidamoid Ви можете використовувати LaunchAgents; відредагована відповідь
гр

Отже, у вашому прикладі він буде працювати cp /Users/.../MyApp /Applications...щоразу, коли бінарний файл MyApp змінюється? Дякую!
Equidamoid

@Equidamoid Так, точно!
гр
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.