Wie erzwinge ich Sandbox-Regeln für die jeweilige App?

8

Ich habe eine Sandbox-Spezifikationsdatei geschrieben (inspiriert von Dateien /usr/share/sandboxund Handbüchern wie dieser ) und jetzt kann ich eine App in der Sandbox mit starten sandbox-exec $path_to_rules /Applications/$appname.app/Content/.... Fein.

Gibt es eine Möglichkeit, die Regeln zu erzwingen, wenn die App auf normale Weise gestartet wird (Finder "Öffnen mit ..." usw.)?

Ich habe darüber nachgedacht, die Binärdatei in .app durch ein Wrapper-Skript zu ersetzen, diese wird jedoch nach dem App-Update überschrieben und muss jedes Mal wiederhergestellt werden.

Equidamoid
quelle

Antworten:

4

Ja, Sie können die Binärdatei oder sogar die Info.plist ändern, aber wie bei der Änderung der von Ihnen erstellten Binärdatei müssen Sie dies jedes Mal erneut tun, wenn die App aktualisiert wird. Es gibt keine Möglichkeit, dies zu tun, ohne die App so zu ändern, dass sie bei der Aktualisierung nicht überschrieben wird.

Sie können Ihre Änderungen automatisch mit einem Launch Agent vornehmen.
Speichern Sie das Folgende ~/Library/LaunchAgentsunter com.yourname.youragent.plistund führen Sie es aus 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>

Das obige Skript überwacht die WatchPathsÄnderungen (in diesem Fall wird die Binärdatei für eine App überwacht ) und wird ausgeführt, cpum Ihre Binärdatei in die App in / Applications zu kopieren.

grg
quelle
Ich denke über das automatische Patchen von installierten Apps nach. Gibt es eine Möglichkeit, mein Skript jedes Mal automatisch auszuführen, wenn sich etwas /Applicationsändert? Und auch jede App zu verbieten, sich selbst zu ändern.
Equidamoid
@ Equidamoid Sie können LaunchAgents verwenden. bearbeitete Antwort
grg
In Ihrem Beispiel wird es also cp /Users/.../MyApp /Applications...jedes Mal ausgeführt, wenn die MyApp-Binärdatei geändert wird. Vielen Dank!
Equidamoid
@ Equidamoid Ja, genau!
grg