Overzicht van dontallow
dontallow is een gespecialiseerde tool voor macOS (met name vanaf versie 15 Sequoia) die automatisch de optie "Niet toestaan" selecteert bij prompts over toegang tot lokale netwerken.
Het probleem In macOS Sequoia verschijnen lokale netwerkprompts vaak herhaaldelijk, zelfs nadat een keuze is gemaakt. Dit komt met name door:
- Chromium-browsers die hun app-bundel naar tijdelijke mappen kopiëren.
- Versie-gebaseerde installatiepaden waardoor elke update als een nieuwe app wordt gezien.
- Systeemfouten waarbij prompts worden toegeschreven aan de verkeerde applicaties.
Werking en Installatie De tool werkt als een agent die via de Toegankelijkheid-permissie van macOS een Accessibility-observer op het proces UserNotificationCenter plaatst. Zodra een lokale netwerkprompt verschijnt, klikt de tool binnen een fractie van een seconde op "Niet toestaan".
- Installatie: Via Homebrew (
brew install johncassil/tap/dontallow) of handmatig via make.
- Configuratie: Gebruikers kunnen apps toevoegen aan een
allowlist of de tool tijdelijk pauzeren (dontallow pause) om handmatig toegang te verlenen.
Technische details
- Compatibiliteit: Werkt op Apple Silicon en Intel; vereist macOS 13 voor build en macOS 15 voor gebruik.
- Beheer: Ondersteunt MDM-implementatie via PPPC-profielen voor vloten van beheerde Macs.
- Veiligheid: De tool wijzigt geen systeembestanden en schakelt geen beveiligingsfuncties uit.
dontallow: Automatisch weigeren van macOS-prompts voor lokale netwerken
Waarom deze tool bestaat
macOS (Sequoia en later) toont deze prompt de eerste keer dat een applicatie het lokale netwerk benadert. In principe zou deze keuze onthouden moeten worden, maar bij veel apps is dat niet het geval, waardoor de prompt bij elke start terugkeert. Dit gebeurt vaak bij apps die je niet eens actief gebruikt:
- Chromium-browsers (Chrome, Brave, Edge, Island, Arc): Deze kopiëren bij het opstarten hun eigen app-bundel naar een willekeurige tijdelijke map, zodat de codesignature behouden blijft bij updates op locatie. macOS koppelt de beslissing over het lokale netwerk aan dat willekeurige pad, waardoor elke volgende start wordt gezien als een gloednieuwe app. Hierdoor vullen de privacyinstellingen zich met dubbele rijen van "Google Chrome.app" die naar niets meer verwijzen.
- Apps met versie-gebaseerde installatiepaden: Elke update (bijvoorbeeld installaties in
.../versions/1.2.3/) resulteert in een nieuwe regel in de instellingen.
- Onjuist toegeschreven prompts: macOS koppelt de dialoog aan de app die het systeem als "verantwoordelijk" beschouwt, waardoor je prompts ziet voor apps die niet eens draaien.
Sommige apps maken legitiem gebruik van deze permissie, zoals browsers en mediaspelers voor Chromecast- en AirPlay-detectie, LAN-multiplayer in games, of printer- en scanner-hulpprogramma's. Als je deze functies gebruikt, kun je voor die specifieke app "Sta toe" kiezen (gebruik dontallow pause 10m terwijl je dit doet), en dit wordt onthouden zolang het pad van de app stabiel is.
Er is geen ondersteunde manier om de lijst op te schonen, geen MDM-payload om de permissie vooraf te weigeren, en tccutil reset dekt dit niet. Daarom is er een kleine agent ontwikkeld die voor jou "nee" antwoordt.
Installatie
Je kunt de tool installeren via Homebrew of handmatig:
brew install johncassil/tap/dontallow
# of:
make && make install
Voer daarna het volgende uit:
dontallow install
dontallow install schrijft een launchd-agent per gebruiker, start deze, opent Systeeminstellingen > Privacy en beveiliging > Toegankelijkheid en print het exacte pad dat moet worden toegevoegd als macOS je hier niet automatisch om vraagt. Toegankelijkheid is de permissie die de tool in staat stelt op de knop te klikken. De tool wacht op de toestemming en bevestigt wanneer de agent actief is. Met dontallow status kunnen de instructies op elk moment opnieuw worden opgevraagd als de toestemming ontbreekt.
Gebruik
| Commando | Functie |
dontallow status | Toont status van de agent, pauze-status, allowlist en recente weigeringen. |
dontallow pause [1h] | Laat prompts voor een bepaalde tijd ongemoeid (bijv. 30m, 2h, 1d, forever). |
dontallow resume | Hervat het automatisch weigeren van prompts. |
dontallow rules | Decodeert de Local Network regelstore van het systeem en toont wat elke privacy-rij werkelijk is, inclusief wezen. |
dontallow uninstall | Stopt en verwijdert de agent. |
dontallow run --dry-run | Draait op de voorgrond, logt wat er zou gebeuren, maar klikt nergens op. |
Elke weigering stuurt een notificatie met de naam van de app en het pauze-commando, zodat je niet hoeft te onthouden hoe je de tool tijdelijk uitschakelt. Je kunt deze notificaties dempen in de Systeeminstellingen.
Wanneer een app daadwerkelijk toegang tot het lokale netwerk nodig heeft
Kies een van de volgende drie opties:
- Voer
dontallow pause 10m uit, start de app en klik zelf op "Sta toe".
- Voeg de naam van de app toe aan
~/.config/dontallow/allowlist (één per regel, hoofdletterongevoelig substring). Prompts voor deze apps worden nooit aangeraakt.
- Zet de schakelaar om in Systeeminstellingen > Privacy en beveiliging > Lokale netwerk. Een geweigerde prompt registreert een "deny", wat je daar kunt terugdraaien.
Je kunt ~/.config/dontallow/grace instellen op een aantal seconden als je een tijdvenster wilt hebben om zelf op "Sta toe" te klikken voordat de agent dit doet (standaard is dit 0,25 seconden).
Hoe het werkt
De prompt is een venster dat eigendom is van het systeempreces UserNotificationCenter. dontallow registreert een Accessibility-observer voor het maken van vensters in dat proces en gaat in slaapstand tot er een melding komt. De tool leest de tekst van de dialoog, bevestigt dat het een lokale netwerkprompt is (en niet iets anders), controleert de pauze-status en de allowlist, en voert vervolgens de Accessibility-klikactie uit op de knop "Niet toestaan". Als de klik wordt geweigerd, valt de tool terug op een synthetische klik op de locatie van de knop.
De tool wijzigt nooit systeembestanden, schakelt nooit beveiligingen uit en kiest nooit voor "Sta toe".
Beheerde Mac's (Managed Macs)
Lokale netwerkpermissies kunnen niet vooraf worden ingesteld via MDM, maar Toegankelijkheid (Accessibility) wel. Voor een vloot van apparaten: bouw de tool één keer, signeer deze met een Developer ID, verspreid het binary samen met een PPPC-profiel (Privacy Preferences Policy Control) dat Toegankelijkheid verleent aan de code-requirement, en voer dontallow install per gebruiker uit. Hiermee is geen handmatige stap in de instellingen nodig.
Na een update
macOS koppelt de Toegankelijkheids-toestemming aan de codesignature van het binary. Elke build (inclusief brew upgrade) produceert een nieuwe signature. Voer na een update dontallow status uit. Als er staat dat de toestemming ontbreekt: verwijder de regel voor dontallow in de Toegankelijkheidsinstellingen en voeg deze opnieuw toe via het geprinte pad. De agent koppelt zichzelf binnen tien seconden opnieuw aan. Een toekomstige release ondertekend met een Developer ID zal deze stap overbodig maken.
Tests
Voer make test uit om tests te draaien.
Unit tests dekken de pure logica (het parsen van dialoogtekst, duur en pauze-parsing, allowlist-matching, genereren van launchd plists en de Local Network regel-decoder tegen een fixture-archief). Deze worden gebouwd met plain swiftc en vereisen geen Xcode of SwiftPM. De end-to-end route (een echte prompt, een echte klik) kan alleen worden getest op een Mac met verleende Toegankelijkheidsrechten; het handmatige recept hiervoor staat in Tests/INTEGRATION.md.
Compatibiliteit
- Build-omgeving: Kan worden gebouwd met alleen Apple's Command Line Tools. Xcode is niet vereist.
- Architectuur: Apple Silicon en Intel (Homebrew compileert native op beide).
- OS-versie: macOS 13 of later om te bouwen; de prompt zelf bestaat alleen op macOS 15 Sequoia en later.
- Getest op: Intel, macOS 15.6.
- Taal: Vooralsnog alleen voor Engelstalige macOS. De matcher kijkt naar de dialoogtekst en de titel van de knop "Don't Allow"; gelokaliseerde strings zijn gepland.
Licentie
MIT
dontallow: Automatisch weigeren van macOS-prompts voor lokale netwerken
Waarom deze tool bestaat
macOS (Sequoia en later) toont deze prompt de eerste keer dat een applicatie het lokale netwerk benadert. In principe zou deze keuze onthouden moeten worden, maar bij veel apps is dat niet het geval, waardoor de prompt bij elke start terugkeert. Dit gebeurt vaak bij apps die je niet eens actief gebruikt:
- Chromium-browsers (Chrome, Brave, Edge, Island, Arc): Deze kopiëren bij het opstarten hun eigen app-bundel naar een willekeurige tijdelijke map, zodat de codesignature behouden blijft bij updates op locatie. macOS koppelt de beslissing over het lokale netwerk aan dat willekeurige pad, waardoor elke volgende start wordt gezien als een gloednieuwe app. Hierdoor vullen de privacyinstellingen zich met dubbele rijen van "Google Chrome.app" die naar niets meer verwijzen.
- Apps met versie-gebaseerde installatiepaden: Elke update (bijvoorbeeld installaties in
.../versions/1.2.3/) resulteert in een nieuwe regel in de instellingen.
- Onjuist toegeschreven prompts: macOS koppelt de dialoog aan de app die het systeem als "verantwoordelijk" beschouwt, waardoor je prompts ziet voor apps die niet eens draaien.
Sommige apps maken legitiem gebruik van deze permissie, zoals browsers en mediaspelers voor Chromecast- en AirPlay-detectie, LAN-multiplayer in games, of printer- en scanner-hulpprogramma's. Als je deze functies gebruikt, kun je voor die specifieke app "Sta toe" kiezen (gebruik dontallow pause 10m terwijl je dit doet), en dit wordt onthouden zolang het pad van de app stabiel is.
Er is geen ondersteunde manier om de lijst op te schonen, geen MDM-payload om de permissie vooraf te weigeren, en tccutil reset dekt dit niet. Daarom is er een kleine agent ontwikkeld die voor jou "nee" antwoordt.
Installatie
Je kunt de tool installeren via Homebrew of handmatig:
brew install johncassil/tap/dontallow
# of:
make && make install
Voer daarna het volgende uit:
dontallow install
dontallow install schrijft een launchd-agent per gebruiker, start deze, opent Systeeminstellingen > Privacy en beveiliging > Toegankelijkheid en print het exacte pad dat moet worden toegevoegd als macOS je hier niet automatisch om vraagt. Toegankelijkheid is de permissie die de tool in staat stelt op de knop te klikken. De tool wacht op de toestemming en bevestigt wanneer de agent actief is. Met dontallow status kunnen de instructies op elk moment opnieuw worden opgevraagd als de toestemming ontbreekt.
Gebruik
| Commando | Functie |
dontallow status | Toont status van de agent, pauze-status, allowlist en recente weigeringen. |
dontallow pause [1h] | Laat prompts voor een bepaalde tijd ongemoeid (bijv. 30m, 2h, 1d, forever). |
dontallow resume | Hervat het automatisch weigeren van prompts. |
dontallow rules | Decodeert de Local Network regelstore van het systeem en toont wat elke privacy-rij werkelijk is, inclusief wezen. |
dontallow uninstall | Stopt en verwijdert de agent. |
dontallow run --dry-run | Draait op de voorgrond, logt wat er zou gebeuren, maar klikt nergens op. |
Elke weigering stuurt een notificatie met de naam van de app en het pauze-commando, zodat je niet hoeft te onthouden hoe je de tool tijdelijk uitschakelt. Je kunt deze notificaties dempen in de Systeeminstellingen.
Wanneer een app daadwerkelijk toegang tot het lokale netwerk nodig heeft
Kies een van de volgende drie opties:
- Voer
dontallow pause 10m uit, start de app en klik zelf op "Sta toe".
- Voeg de naam van de app toe aan
~/.config/dontallow/allowlist (één per regel, hoofdletterongevoelig substring). Prompts voor deze apps worden nooit aangeraakt.
- Zet de schakelaar om in Systeeminstellingen > Privacy en beveiliging > Lokale netwerk. Een geweigerde prompt registreert een "deny", wat je daar kunt terugdraaien.
Je kunt ~/.config/dontallow/grace instellen op een aantal seconden als je een tijdvenster wilt hebben om zelf op "Sta toe" te klikken voordat de agent dit doet (standaard is dit 0,25 seconden).
Hoe het werkt
De prompt is een venster dat eigendom is van het systeempreces UserNotificationCenter. dontallow registreert een Accessibility-observer voor het maken van vensters in dat proces en gaat in slaapstand tot er een melding komt. De tool leest de tekst van de dialoog, bevestigt dat het een lokale netwerkprompt is (en niet iets anders), controleert de pauze-status en de allowlist, en voert vervolgens de Accessibility-klikactie uit op de knop "Niet toestaan". Als de klik wordt geweigerd, valt de tool terug op een synthetische klik op de locatie van de knop.
De tool wijzigt nooit systeembestanden, schakelt nooit beveiligingen uit en kiest nooit voor "Sta toe".
Beheerde Mac's (Managed Macs)
Lokale netwerkpermissies kunnen niet vooraf worden ingesteld via MDM, maar Toegankelijkheid (Accessibility) wel. Voor een vloot van apparaten: bouw de tool één keer, signeer deze met een Developer ID, verspreid het binary samen met een PPPC-profiel (Privacy Preferences Policy Control) dat Toegankelijkheid verleent aan de code-requirement, en voer dontallow install per gebruiker uit. Hiermee is geen handmatige stap in de instellingen nodig.
Na een update
macOS koppelt de Toegankelijkheids-toestemming aan de codesignature van het binary. Elke build (inclusief brew upgrade) produceert een nieuwe signature. Voer na een update dontallow status uit. Als er staat dat de toestemming ontbreekt: verwijder de regel voor dontallow in de Toegankelijkheidsinstellingen en voeg deze opnieuw toe via het geprinte pad. De agent koppelt zichzelf binnen tien seconden opnieuw aan. Een toekomstige release ondertekend met een Developer ID zal deze stap overbodig maken.
Tests
Voer make test uit om tests te draaien.
Unit tests dekken de pure logica (het parsen van dialoogtekst, duur en pauze-parsing, allowlist-matching, genereren van launchd plists en de Local Network regel-decoder tegen een fixture-archief). Deze worden gebouwd met plain swiftc en vereisen geen Xcode of SwiftPM. De end-to-end route (een echte prompt, een echte klik) kan alleen worden getest op een Mac met verleende Toegankelijkheidsrechten; het handmatige recept hiervoor staat in Tests/INTEGRATION.md.
Compatibiliteit
- Build-omgeving: Kan worden gebouwd met alleen Apple's Command Line Tools. Xcode is niet vereist.
- Architectuur: Apple Silicon en Intel (Homebrew compileert native op beide).
- OS-versie: macOS 13 of later om te bouwen; de prompt zelf bestaat alleen op macOS 15 Sequoia en later.
- Getest op: Intel, macOS 15.6.
- Taal: Vooralsnog alleen voor Engelstalige macOS. De matcher kijkt naar de dialoogtekst en de titel van de knop "Don't Allow"; gelokaliseerde strings zijn gepland.
Licentie
MIT