¿Cómo hacer cumplir las reglas de sandbox para la aplicación en particular?

8

Escribí un archivo de especificación de sandbox (inspirado en archivos de /usr/share/sandboxy manuales como este ) y ahora puedo iniciar alguna aplicación en sandbox con sandbox-exec $path_to_rules /Applications/$appname.app/Content/.... Multa.

¿Hay alguna manera de hacer cumplir las reglas cuando la aplicación se inicia de manera regular (Finder's "Abrir con ...", etc.)?

Pensé en reemplazar el binario dentro de .app con un script de envoltura, pero se sobrescribirá después de la actualización de la aplicación y tendré que restaurarlo cada vez.

Equidamoide
fuente

Respuestas:

5

Sí, puede cambiar el binario, o incluso cambiar el Info.plist, pero al igual que cambiar el binario que haga, tendrá que volver a hacerlo cada vez que se actualice la aplicación. No hay forma de hacerlo sin cambiar la aplicación de una manera que no se sobrescribirá cuando se actualice.

Puede realizar sus cambios automáticamente con un Agente de lanzamiento.
Guarde lo siguiente en ~/Library/LaunchAgentscomo com.yourname.youragent.plist, luego ejecute 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>

La secuencia de comandos anterior verificará WatchPathscualquier modificación (en este caso, está viendo el binario para una aplicación) y se ejecutará cppara copiar su binario en la aplicación en / Aplicaciones.

grg
fuente
Estoy pensando en parchear automáticamente las aplicaciones instaladas. ¿Hay alguna manera de ejecutar mi script automáticamente cada vez que /Applicationsse cambia algo ? Y también para prohibir que cualquier aplicación se modifique a sí misma.
Equidamoid
@Equidamoid Puede usar LaunchAgents; respuesta editada
grg
1
entonces, en su ejemplo, ¿se ejecutará cp /Users/.../MyApp /Applications...cada vez que se cambie el binario MyApp? ¡Gracias!
Equidamoid
@Equidamoid ¡Sí, exactamente!
grg