Wie entferne ich den Firewall-Dialog "Eingehende Verbindungen akzeptieren"?

Ich habe dies so oft akzeptiert, dass sich die Firewall bereits daran erinnern sollte.

Möchten Sie, dass die Anwendung „AppName.app“ eingehende Netzwerkverbindungen akzeptiert?

Durch Klicken auf Verweigern kann das Verhalten der Anwendung eingeschränkt werden. Diese Einstellung kann im Bereich „Firewall“ der Systemeinstellung „Sicherheit“ geändert werden.

verweigern | Erlauben

Zum Beispiel bekomme ich es für Eclipse, wenn ich meine Java-Programme im Debugging-Modus starte. Manchmal wird dieser Dialog nur ganz kurz, etwa eine halbe Sekunde, angezeigt und verschwindet. Ich bekomme es auch für iTunes (wenn ich die Freigabe meiner Bibliothek aktiviere) und andere Programme, obwohl ich sie im Firewall-Einstellungsfeld (erw. Einstellungen) aufgelistet habe.

Welche Version von OSX verwendest du?
@Martin: Schneeleoparden-Tag hinzugefügt. Ich benutze die neueste und beste 1.6.4.
Das Verhalten ist meines Wissens sehr merkwürdig. Die Firewall prüft die App-Signatur, um sie zu erkennen, sodass jede Änderung in der App bedeutet, dass sie möglicherweise nicht mehr erkannt wird und daher eine neue Eingabeaufforderung verursacht. Leopard war anfälliger dafür als 10.6, aber es passiert immer noch nach dem, was Sie sagen.
Ich habe das die ganze Zeit mit VirtualBox auf Snow Leopard gesehen. Ich würde auch gerne eine Erklärung dafür hören.
Sehr nervig. Ich sehe das Popup ein paar Mal am Tag, während ich in Eclipse arbeite. Es wird nur für eine Sekunde oder so angezeigt. Dies geschieht auf Mountain Lion mit Eclipse Juno SR2.
Passiert auch mit VLC v221 auf Yosemite

Antworten (13)

Hier gibt es zwei Möglichkeiten:

  1. Sie können in Ihrer Firewall einfach "Alle zulassen" auswählen oder sie einfach deaktivieren.
  2. Sie können die Apps aus der Liste entfernen, die plistDatei für diese Apps löschen, sie ausführen und sie dann zur Liste hinzufügen. Die Plist ist für viele Verhaltensweisen verantwortlich, und ich bin bereit zu wetten, dass entweder ein Upgrade auf das Betriebssystem oder die App dazu führen kann, dass der "Link" unterbrochen wird.

Informationen zu Dateien... Eine Plist plistist eine spezielle Art von Textdatei, die Eigenschaften enthält, die die Anwendung und andere Ressourcen, typischerweise das Betriebssystem, verwenden, um Informationen zu speichern und wiederzuverwenden, die zum Ausführen der Anwendung erforderlich sind. plistist ein Dateityp und hat viele Verwendungsmöglichkeiten, typischerweise zum Speichern von Benutzereinstellungen, aber im Wesentlichen ist es eine XML-Datei. Sie können nachsehen, ob es Caches, bei denen es sich in der Regel um plistDateien handelt, für die betreffenden Anwendungen in /Library/Cachesund gibt /System/Library/Caches. Es gibt auch einen ~/Library/Caches/drin, aber wenn man dort herumfummelt, können schlimme Dinge passieren, also lass es einfach in Ruhe. Das System geht aus einer Vielzahl von Gründen in diese Ordner, und normalerweise räume ich die ersten beiden Ordner, die ich aufgelistet habe, etwa einmal im Monat vollständig auf.

Können Sie bitte erklären, was Sie mit "Löschen der Plist-Datei für diese Apps" meinen?
Die Plist-Dateien enthalten unter anderem die Anwendungseinstellungen (und es ist sicher, sie zu löschen, aber machen Sie immer eine Kopie für alle Fälle). Jede Cocoa-App muss so programmiert werden, dass sie ihre eigene Plist neu erstellt, falls die Datei „verschwindet“. Die Plist für Apps befindet sich normalerweise in /Users/your_user/Library/Preferences. Die Dateien enden mit der Erweiterung .plist und haben normalerweise Namen wie: „com.company.appname.plist“, z. B.: com.adobe.Phosothop.plist . Sie können sie auf Ihren Desktop verschieben und die Anwendung starten, um sie „neu zu erstellen“.
Verweisen die ~s in den obigen Dateipfaden auf den Basisordner des aktuellen Benutzers oder das Stammverzeichnis?
Per Konvention haben Macs keinen Root-Benutzer , was ~einen Benutzer-Home-Ordner impliziert. / ist natürlich das Stammverzeichnis
Abgestimmt, da dies in vielen Fällen nicht wirklich eine Option ist. Der Kommentar von user465139 ist angemessener. Obwohl es immer noch ein Sicherheitsrisiko darstellt, ist es zumindest weniger als das Ein- und Aussteigen aller Apps.
Wo würden sich diese Dateien für den Firewall-Dienst befinden? Das Problem, das ich habe, ist, dass dieser Dialog jedes Mal auftritt, wenn ein bestimmter Prozess einen Socket öffnet. obwohl es zuvor entweder auf die weiße oder schwarze Liste gesetzt wurde. Habe alle Einstellungen in der Firewall gelöscht.
stimme @sholsinger in diesem Punkt zu, stolpere nur darüber für Mavericks + PHPStorm und die selbstsignierende Alternative ist einfach, schnell und funktioniert. Dieses Plist-Geschäft ist ziemlich chaotisch.
sudo codesign --force --deep --sign - /path/to/application.app

Ich musste noch nie ein Zertifikat mit dieser Methode erstellen.

Wenn das nicht hilft, versuchen Sie es ohne --deepund ohne abschließenden Schrägstrich:

sudo codesign --force --sign - /path/to/application.app

Hinweis, nur um es klarer zu machen: Nachdem Sie die Signatur angewendet haben, starten Sie die App, akzeptieren Sie ein letztes Mal eingehende Verbindungen, beenden Sie sie und starten Sie sie erneut, um zu überprüfen, ob die Anfrage weg ist.

Also ... woher wissen Sie, dass es funktioniert? Können Sie einen Link zu Ihrer Informationsquelle angeben?
Ich weiß, weil ich es getan habe? Ich bin mir nicht sicher, wonach Sie genau fragen ... mit dieser Methode konnte ich das Popup-Fenster "Eingehende Benachrichtigungen akzeptieren" entfernen (obwohl Sie nach der Unterzeichnung ein letztes Mal gefragt werden und dann nicht mehr ). Es hat für mich für Spotify und AppCode funktioniert. Wenn Sie Informationen benötigen, lesen Sie die Manpage? Bearbeiten: Ich verwende Yosemite GM Candidate v3.0, wenn Ihnen das hilft.
Ihr ursprünglicher Beitrag ist widersprüchlich. Sie geben einen Terminalbefehl ein, geben dann aber an, dass Sie mit dieser Methode nie ein Zertifikat erstellen mussten.“ Wenn Sie mit diesem Befehl nie ein Zertifikat erstellen mussten, woher wissen Sie dann, dass es tatsächlich funktioniert?
Eine Kleinigkeit möchte ich ändern: Die App, die unter /path/to/app angesprochen werden soll, muss die Endung .app enthalten , also: /path/to/exampleapp.app.
@IconDaemon Die Verwendung von -after --signbedeutet, dass "Ad-hoc-Signierung" verwendet wird; Es ist kein Zertifikat erforderlich, um diesen Befehl zu verwenden. Ich verstehe nicht, warum dies der Verwendung des Terminals widersprechen würde. Laufen man codesignSie, um die Erklärung zu sehen.
Einfach und funktioniert. Viel besser als die akzeptierte Antwort, da ich keine Plist-Dateien löschen möchte.
Das hat bei mir auch funktioniert. Einfach genial.
sudo codesign --force --sign - /path/to/application.apphat bei mir funktioniert, aber nicht die vom Autor vorgeschlagene Variante. Ich frage mich, ob --deepoder der führende Schrägstrich ein Problem war.
Benötigt für eine über virtualenv kopierte Python. Benutzte "codesign -f -s - /path/to/python" und Nörgel gingen weg.
Nach einem Systemneustart werde ich erneut gefragt, aber nur einmal.
@ssnobody Ich habe Ihre Lösung für Python 3.6 und 3.7 ausprobiert, aber es hat nicht funktioniert - welche Version haben Sie verwendet?
Um ehrlich zu sein, kann ich mich nicht erinnern, auf welcher Version ich es verwendet habe. Es war höchstwahrscheinlich 2,7, obwohl es durchaus auch 3,6 hätte sein können.
Kann jemand erklären, warum das funktioniert? Ich hatte eine Binärdatei, die bereits signiert war, aber das Ersetzen der Signatur auf diese Weise hat das Problem behoben.

Der Link von RedYeti ist zwar nützlich, aber nur um ein paar Klicks für andere zu sparen, lassen Sie mich noch einmal zusammenfassen, wie Sie ein Code-Signatur-Zertifikat generieren und es zum (Neu-)Signieren von Code verwenden:

  1. Erstellen Sie Ihr eigenes Codesignatur-Zertifikat:

    • In der Schlüsselbundverwaltung, Schlüsselbundverwaltung > Zertifikatsassistent > Zertifikat erstellen. Dadurch wird der Zertifikatsassistent gestartet:

    • Name: Geben Sie hier eine beliebige Zeichenfolge ein, die Sie sich merken können. Vermeiden Sie Leerzeichen, da Sie sonst den Namen des Zertifikats maskieren müssen, wenn Sie es über codesigndie Befehlszeile verwenden.

    • Identitätstyp: Selbstsignierter Stamm

    • Zertifikatstyp: Code Signing

    • Aktivieren Sie das Kontrollkästchen "Standardwerte überschreiben lassen", dies ist sehr wichtig

    • Seriennummer: 1 (OK, solange die Kombination aus Zertifikatsname und Seriennummer eindeutig ist)

    • Gültigkeitsdauer: 3650 (ergibt 10 Jahre)

    • E-Mail, Name usw. nach Belieben ausfüllen.

    • Informationen zum Schlüsselpaar: auf RSA, 2048 Bit eingestellt. Spielt IMHO keine Rolle.

    • Von „Schlüsselverwendungserweiterung“ bis „Subject Alternate Name Extension“: Akzeptieren Sie die Standardeinstellungen.

    • Ort: Login-Schlüsselbund.

    • Sobald es erstellt ist, stellen Sie im Login-Schlüsselbund „Immer vertrauen“ ein: Klicken Sie mit der rechten Maustaste auf das Zertifikat, wählen Sie „Informationen abrufen“ und setzen Sie im Abschnitt „Vertrauen“ „Bei Verwendung dieses Zertifikats“ auf „Immer vertrauen“.

  2. App neu signieren:codesign -f --deep -s <certname> /path/to/app

  3. Überprüfen Sie, ob es funktioniert hat:codesign -dvvvv /path/to/app

Genießen!

UPDATE: Leute haben mich gefragt, warum das in macOS 10.14 „Mojave“ „nicht funktioniert“. Jetzt, wo ich endlich aufgerüstet habe :-), hier ist, was ich gelernt habe.

Verwenden Sie grundsätzlich kein selbstsigniertes Zertifikat für Codesignierung. Generieren Sie stattdessen ein Zertifikat mit Ihrer Apple-ID in Xcode. Um die Schritte noch einmal kurz zusammenzufassen:

Wählen Sie in Xcode > Einstellungen > Konten Ihre Apple-Entwickler-ID aus, klicken Sie auf „Zertifikate verwalten“, wählen Sie das „+“ in der linken unteren Ecke, es bietet Ihnen die Option „Apple-Entwicklung“. Wählen Sie das aus, damit wird ein Zertifikat für Sie erstellt. Durch Strg-Klick auf das neue Zertifikat können Sie es (im .p12Format) exportieren und durch open-ing dieser .p12Datei wird es in Ihren Login-Schlüsselbund geladen.

Sie werden sehen, dass dieses Zertifikat ein Jahr lang gültig ist, "Ausgestellt von: Apple Worldwide Developer Relations Certification Authority". Ich vermute, das ist vertrauenswürdiger als ein selbstsigniertes Zertifikat.

Nun können Sie Ihre App wie bisher mit signieren codesign -f -s <apple_ID> /path/to/prog. Ich habe es mit einer einfachen Binärdatei versucht (kompiliert von hello.c:-) ), und es konnte mit verifiziert werden codesign -v.

Ich habe es noch nicht mit Python-Paketen versucht, daher habe ich keinen Rat an Leute, die in ihren Kommentaren erwähnt haben, dass dies "python.app" nicht signieren kann.

Danke schön! Dies ist die einzige Lösung, die die Firewall-Nag-Dialoge für mich beseitigt hat. Ich verwende OSX 10.10 Yosemite.
Sehr schön! Auch für Entwickler, die bereits ein Zertifikat haben, einfach!
eine Randnotiz: Ich habe die Gültigkeitsdauer auf 7300 (Tage) maximiert, das sind 20 Jahre. Ich habe mit einigen Versuchen herausgefunden, dass dies die maximale Zahl ist, die das Eingabefeld akzeptiert (zumindest unter OSX Yosemite 10.10.3) - sehr gut, großes Lob!
ahalls Antwort ist viel einfacher und hat für mich unter OS X 10.10 funktioniert
Hat bei mir unter OS X 10.11.1 (15B42) nicht funktioniert
Jeder mögliche erste Schritt kann programmatisch durchgeführt werden?
@Xavier Nodet hast du deine Lösung auf macOS Mojave ausprobiert? Die Erstellung des Zertifikats funktioniert gut, wie Sie es beschreiben. Aber es scheint nicht für die ausführbare Python-Datei (nicht python.app) zu gelten.
@AgileBean: Es ist nicht die Lösung von Xavier Nodet, sondern meine :-) und sorry, ich habe Mojave noch nicht installiert (ich bin normalerweise ein Jahr hinter Apple zurück, warte gerne, bis sie macOS richtig debuggen)
@LaryxDecidua Entschuldigung, ich habe das Kudos falsch verstanden. wie auch immer - leider scheint Mojave sehr resistent gegen alle oben (Ihre Lösung) und unten (Codesign-Lösungen) vorgeschlagenen Änderungen zu sein.
funktioniert nicht unter Mojave. Ich habe versucht, Python.app und auch bin/python3 zu signieren. Nichts hat geholfen

Dies bezieht sich darauf, ob die App signiert ist oder nicht. Wenn es nicht signiert ist, wird die Einstellung nicht gespeichert.

Um zu sehen, ob eine App signiert ist, tun Sie dies im Terminal:

cd path/to/your/app
codesign -vvv Eclipse.app/

Für Eclipse - meins sagt, dass es überhaupt nicht signiert ist. Ich kann nicht weiter kommentieren, wie die App signiert wird, da ich mich nicht darum gekümmert habe, aber diese Antwort auf Superuser deckt es ab:

https://superuser.com/questions/100013/why-does-the-mac-os-x-firewall-dialog-recurringly-pop-up-and-disappear-by-itself#300841

Während ahalls Antwort eine Lösung gibt, erklärt diese Antwort warum. Wenn es zusammengeführt würde, wäre es die perfekte Antwort.

Wenn Sie in Go programmieren:

http.ListenAndServe("localhost:8080", nil)

Anstatt von:

http.ListenAndServe(“:8080”, null)

Willkommen bei Ask Different. Können Sie erläutern, wie sich Ihre Antwort auf die Frage bezieht und wo diese Codezeile verwendet werden sollte?
Die obige Antwort ist für Go-Entwickler auf macOS. Es funktioniert in der Tat wunderbar und stoppt all das lästige Popup jedes Mal, wenn die Binärdatei neu gestartet wird (was den ganzen Tag über sehr häufig ist). Ohne Kontext macht es vielleicht nicht viel Sinn, aber es ist eine großartige Antwort für Go-Entwickler.
Danke schön! Das war die Antwort, nach der ich gesucht habe.
Dies ist eigentlich nicht nur eine Go-Antwort. Es bezieht sich darauf, ob Sie auf allen Netzwerkschnittstellen oder nur auf der localhost-Schnittstelle lauschen. Wenn Sie also das Standard-Listen verwenden, bedeutet dies in jeder Sprache normalerweise "Listen auf allen Schnittstellen", was eine wahrscheinlichere Firewall-Interaktion bedeutet.

Nur ein Hinweis: Wenn Sie eine virtuelle Umgebung verwenden, müssen Sie die App signieren, die für die Umgebung verwendet wird. Ich weiß, das ist offensichtlich, aber es musste trotzdem gesagt werden.

vielen Dank, aber wie würde ich anstelle einer App eine Python-Version (sagen wir python3.6) in einer Conda-Umgebung signieren?

Ich habe Hilfe bei Sayan Mohsins Antwort erhalten, und ich glaube, sie ist allgemeiner als go.

Ich hatte dieses Problem mit einer Software, die keine Verbindungen von außen zulassen muss, sondern nur von meinem Computer. Solche Software muss nicht signiert werden, um diese Warnung zu vermeiden: Sie muss nur ausdrücklich localhostnur zuhören.

Abhängig von Ihrer Umgebung wird das Festlegen einer Hosteinschränkung unterschiedlich durchgeführt. In meinem Fall habe ich mit einem nginxServer gearbeitet, und das Ändern seiner Konfiguration von listen 8080auf listen 127.0.0.1:8080reichte aus, um das Problem zu beheben.

Wenn dies auch bei Ihnen der Fall ist, sollten Sie auf jeden Fall prüfen, ob Ihr Server eine Möglichkeit zum Einrichten der Hostbeschränkung bietet, und diese auf localhostoder einrichten 127.0.0.1.

Wenn Sie nach einer Möglichkeit suchen, diese Warnung für den iOS-Simulator zu deaktivieren, können Sie dieses Skript von Tom Soderling verwenden :

#!/bin/bash

# Script to disable the iOS Simulator app from showing the "Do you want the application xxxx to accept incoming network connections?" pop-up every time the app is run

echo "> Enter password to temporarily shut firewall off"
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off

echo "> Add Xcode as a firewall exception"
/usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/Xcode.app/Contents/MacOS/Xcode

echo "> Add iOS Simulator as a firewall exception"
/usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator

echo "> Re-enable firewall"
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on

exit 0

Beachten Sie, dass Sie es nach jedem Neustart erneut ausführen müssen. Sie können dies tun, launchdindem Sie diese Anweisungen befolgen . Geben Sie dies unbedingt an:

    <key>LaunchOnlyOnce</key>
    <true/>

Ich schätze, dass dies ein altes Q & A ist, aber es war der erste Treffer bei Google für mich, als ich das gleiche Problem hatte. Ich wollte nur etwas für andere hinzufügen, die hier landen können.

Um einen der hier beschriebenen Codesign-Befehle auszuführen, müssen die xcode-Befehlszeilentools installiert sein. Ohne diese bekommt man eine Fehlermeldung:

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

Um dies zu beheben, installieren Sie die Tools mit:

xcode-select install

Ich hätte ahalls Beitrag kommentiert, aber ich habe nicht die Reputationspunkte dafür.

Meine Situation beinhaltet zwei Kopien von Eclipse, die auf MacOS Mojave 10.14.5 installiert sind. Die erste Kopie wurde mit der MacOS-Firewall autorisiert. Die zweite Kopie würde immer die Eingabeaufforderung "Eingehende Verbindungen akzeptieren" anzeigen. Die Auswahl von "Akzeptieren" würde die Meldung weiterhin nach jedem Neustart anzeigen, anscheinend wurde die Firewall-Einstellung nicht aktualisiert.

Die Lösung bestand darin, MacOS-Systemeinstellungen -> Sicherheit und Datenschutz -> Firewall zu öffnen, den Bildschirm zu entsperren, Firewall-Optionen. Wählen Sie Eclipse.app „Eingehende Verbindungen zulassen“ und entfernen Sie es mit der Schaltfläche „-“. Das nächste Mal, als ich "Zulassen" für die Eclipse-Eingabeaufforderung "Eingehende Verbindungen akzeptieren" auswählte, war das letzte Mal.

Ich hatte das gleiche Problem nach dem Upgrade auf MacOS 11.0.1 Big Sur und Eclipse 2020-09. Die Botschaft war etwas anders; „Möchten Sie, dass die Anwendung „Eclipse.app“ eingehende Netzwerkverbindungen akzeptiert?“ aber die Lösung ist die gleiche.

Ich bekomme dieses Dialogfeld (Canon ccpd) jedes Mal, nachdem ich meinen Computer gestartet habe. Öffnen Sie die Firewall > Sicherheit und Datenschutz > entsperren, um Änderungen zu aktivieren > klicken Sie auf die Schaltfläche "Stealth-Modus aktivieren" > klicken Sie auf die Schaltfläche "Alle eingehenden Verbindungen blockieren".

Danach kein lästiges Dialogfeld mehr vom Canon-Druckertreiber.

Aber die App funktioniert nicht...

Ich habe alles oben in Mac 10.13 ausprobiert und nichts hat funktioniert.

Am Ende schrieb ich ein Skript, das beim Abmelden ausgeführt wurde und an den Anmelde-Hook angehängt war, der die Firewall ausschaltete. Wenn er also angemeldet war, benötigte er keine Berechtigung mehr. Dann führte die Verwendung von delaylauncher ein anderes Skript aus, das die Firewall einschaltete.

Alles gut jetzt

Willkommen bei Ask Different! Vielleicht möchten Sie Ihr Skript teilen, damit auch andere Benutzer von Ihrer Lösung profitieren können.

Die Lösung für mich war, die Firewall einfach komplett zu deaktivieren. Es ist sehr üblich, webfähige Software zu erstellen, die natürlich nicht signiert ist, weil Sie sie nativ kompilieren.

Öffnen Sie das Spotlight mit CMD + Leertaste und suchen Sie nach „Datenschutz“ und wählen Sie „Sicherheit und Datenschutz“. Wechseln Sie dann auf den Reiter „Firewall“ und deaktivieren Sie dort die Firewall.

Das scheint für die meisten Menschen eine ziemlich schlechte Lösung zu sein, es sei denn, sie wissen, was sie tun. Firewalls gibt es aus gutem Grund – sogar auf Macs.
Ich denke, Sie meinten "Firewalls sind nervig - sogar auf Macs". Nicht jeder ist ungebildet und läuft in offenen WLAN-Netzwerken an Flughäfen mit allen offenen Ports herum und lädt Viren von Malware-Verteilungsseiten herunter. Meine Antwort behebt das Problem richtig und umgeht die dumm nervigen Popup-Boxen von Apple. Jedes Mal, wenn Sie eine Binärdatei neu kompilieren, die das Netzwerk verwendet, erhalten Sie das Popup, das absolut unentschuldbar ist. Das Popup ist nur eine weitere ärgerliche Art und Weise, wie Apple versucht, ungebildete Menschen zu babysitten, während es die Entwickler auf dem Trockenen lässt.
Ich stimme zu - nicht jeder ist ungebildet. Doch zu diesem Thema ist die überwiegende Mehrheit der Menschen. Selbst diejenigen, die es nicht sind, sollten es besser wissen, als die Hauptkomponente für die Netzwerksicherheit herauszunehmen. Zumindest wäre es gut gewesen, die Menschen vor den möglichen Konsequenzen zu warnen. Das einfache Ausschalten der Firewall würde ich nicht als "Fix" zählen, sondern als sehr hackigen Workaround.