Jak egzekwować reguły piaskownicy dla konkretnej aplikacji?

9

Napisałem plik specyfikacji piaskownicy (zainspirowany plikami /usr/share/sandboxi instrukcjami tego typu ), a teraz mogę uruchomić aplikację w piaskownicy sandbox-exec $path_to_rules /Applications/$appname.app/Content/.... W porządku.

Czy istnieje sposób na egzekwowanie zasad, gdy aplikacja jest uruchamiana regularnie (Finder „Otwórz za pomocą ...” itp.)?

Myślałem o zastąpieniu pliku binarnego wewnątrz .app skryptem otoki, ale zostanie on nadpisany po aktualizacji aplikacji i za każdym razem będę musiał go przywrócić.

Equidamoid
źródło

Odpowiedzi:

5

Tak, możesz zmienić plik binarny, a nawet zmienić Info.plist, ale podobnie jak zmiana pliku binarnego, musisz to zrobić ponownie przy każdej aktualizacji aplikacji. Nie można tego zrobić bez zmiany aplikacji w sposób, który nie zostanie nadpisany po aktualizacji.

Możesz automatycznie wprowadzić zmiany za pomocą agenta uruchamiania.
Zapisz następujące elementy ~/Library/LaunchAgentsjako com.yourname.youragent.plist, a następnie uruchom 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>

Powyższy skrypt będzie obserwował WatchPathswszelkie modyfikacje (w tym przypadku ogląda plik binarny dla aplikacji) i uruchamia się, cpaby skopiować plik binarny do aplikacji w / Applications.

grg
źródło
Myślę o automatycznym łataniu zainstalowanych aplikacji. Czy istnieje sposób automatycznego uruchamiania skryptu za każdym razem, gdy coś /Applicationssię zmienia? A także zabronić dowolnej aplikacji samodzielnej modyfikacji.
Equidamoid
@Equidamoid Możesz używać LaunchAgents; zredagowana odpowiedź
grg
1
więc w twoim przykładzie będzie działać za cp /Users/.../MyApp /Applications...każdym razem, gdy zmieniana jest wersja binarna MyApp? Dzięki!
Equidamoid
@Equidamoid Tak, dokładnie!
grg