Как избавиться от диалога брандмауэра «принимать входящие подключения»?

Я принимал это так много раз, что брандмауэр уже должен это помнить.

Вы хотите, чтобы приложение "AppName.app" принимало входящие сетевые подключения?

Нажатие «Запретить» может ограничить поведение приложения. Этот параметр можно изменить на панели «Брандмауэр» в настройках «Безопасность».

Запретить | Позволять

Например, я получаю его для Eclipse при запуске своих java-программ в режиме отладки. Иногда это диалоговое окно отображается очень короткое время, например полсекунды, и исчезает. Я также получаю его для iTunes (когда я разрешаю совместное использование моей библиотеки) и других программ, даже несмотря на то, что они указаны на панели настроек брандмауэра (дополнительные настройки).

Какую версию OS X вы используете?
@Martin: добавлен тег снежного барса. Я использую последнюю и лучшую версию 1.6.4.
Насколько мне известно, поведение очень странное. Брандмауэр просматривает подпись приложения, чтобы распознать его, поэтому любое изменение в приложении означает, что оно может больше не распознаваться и, таким образом, вызовет новый запрос. Leopard был более склонен к этому, чем 10.6, однако, судя по тому, что вы рассказываете, это все же происходит.
Раньше я видел это все время с VirtualBox на Snow Leopard. Я бы тоже хотел услышать объяснение по этому поводу.
Очень назойливый. Я вижу всплывающее окно пару раз в день во время работы в Eclipse. Он появляется только на долю секунды или около того. Это происходит на Mountain Lion с Eclipse Juno SR2.
Также бывает с VLC v221, на Yosemite

Ответы (13)

Здесь есть два варианта:

  1. Вы можете просто выбрать «Разрешить все» в своем брандмауэре или просто отключить его.
  2. Вы можете удалить приложения из списка, удалить plistфайл для этих приложений, запустить их, а затем добавить в список. Plist отвечает за многие действия, и я готов поспорить, что либо обновление до ОС, либо приложение могут привести к разрыву «ссылки».

О plistфайлах... Plist — это текстовый файл особого типа, который содержит свойства, которые приложение и другие ресурсы, обычно ОС, используют для хранения и повторного использования информации, необходимой для запуска приложения. plistявляется типом файла и имеет множество применений, обычно для хранения пользовательских настроек, но, по сути, это XML-файл. Вы можете посмотреть, есть ли какие-либо кэши, которые обычно являются plistфайлами, для рассматриваемых приложений в /Library/Cachesи /System/Library/Caches. Есть также один, ~/Library/Caches/но плохие вещи могут случиться, когда там возятся, так что просто оставьте его в покое. Система заходит в эти папки по самым разным причинам, и я обычно полностью очищаю первые две папки, которые я перечислил, примерно раз в месяц.

Не могли бы вы объяснить, что вы подразумеваете под «удалить файл plist для этих приложений»?
файлы plist содержат среди прочего настройки приложения (их можно безопасно удалить, но всегда делайте копию на всякий случай). Любое приложение Cocoa должно быть запрограммировано на воссоздание собственного plist в случае «исчезновения» файла. Plist для приложений обычно находится в /Users/your_user/Library/Preferences. Файлы заканчиваются расширением .plist и обычно имеют такие имена, как: «com.company.appname.plist», например: com.adobe.Phosothop.plist . Вы можете переместить их на рабочий стол и запустить приложение, чтобы «пересоздать» его.
Являются ли ~s в приведенных выше путях к файлам ссылкой на домашнюю папку текущего пользователя или на корневой каталог?
По соглашению, у Mac нет пользователя root, поэтому ~подразумевается домашняя папка пользователя. / это, конечно, корневой каталог
Проголосовали против, поскольку во многих случаях это не вариант. Комментарий user465139 более уместен. Хотя риск для безопасности все еще остается — это, по крайней мере, меньше, чем разрешение входа/выхода всех приложений.
где эти файлы будут расположены для службы брандмауэра? у меня проблема в том, что этот диалог происходит каждый раз, когда определенный процесс открывает сокет. даже несмотря на то, что ранее он был либо внесен в белый, либо в черный список. сбросил все настройки в брандмауэре.
согласен с @sholsinger в этом, просто наткнулся на это для Mavericks + PHPStorm, и альтернатива самоподписания проста, быстра и работает. Этот плист-бизнес довольно грязный.
sudo codesign --force --deep --sign - /path/to/application.app

Мне никогда не приходилось создавать сертификат, используя этот метод.

Если это не помогает, попробуйте --deepбез косой черты и без косой черты:

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

Обратите внимание, просто чтобы было понятнее: после применения подписи запустите приложение, примите входящие подключения в последний раз, затем закройте и запустите снова, чтобы убедиться, что запрос ушел.

Итак... откуда вы знаете, что это работает? Можете дать ссылку на ваш источник информации?
Я знаю, потому что я сделал это? Я не уверен, что именно вы просите ... с помощью этого метода я смог избавиться от всплывающего окна «принять входящие уведомления» (хотя после подписания вас попросят в последний раз, а затем не более ). У меня это сработало для Spotify и AppCode. Если вам нужна информация, прочитайте справочную страницу? edit: я использую Yosemite GM Candidate v3.0, если это вам поможет.
Ваш исходный пост противоречив. Вы предоставляете терминальную команду, но затем заявляете, что вам «... никогда не приходилось создавать сертификат с помощью этого метода». Если вам никогда не приходилось создавать сертификат с помощью этой команды, то откуда вы знаете, что она действительно работает?
Я хотел бы внести поправку в одну маленькую деталь: приложение, которое нужно адресовать в /path/to/app, должно содержать окончание .app , то есть: /path/to/exampleapp.app.
@IconDaemon Использование -after --signозначает, что используется «специальная подпись»; нет необходимости иметь сертификат для использования этой команды. Я не понимаю, почему это противоречит использованию терминала. Бегите man codesign, чтобы увидеть объяснение.
Просто и работает. Гораздо лучше, чем принятый ответ, так как я не хочу удалять файлы plist.
Это сработало и для меня. Просто гениально.
sudo codesign --force --sign - /path/to/application.appу меня сработало, но не вариант, предложенный автором. Интересно, --deepбыла ли проблема с ведущей косой чертой.
Нужен для питона, скопированного через virtualenv. Использовал «codesign -f -s - /path/to/python», и ворчания ушли.
После перезагрузки системы меня снова спрашивают, но только один раз.
@ssnobody Я попробовал ваше решение для python3.6 и 3.7, но оно не сработало — какую версию вы использовали?
Честно говоря, я не помню, на какой версии я его использовал. Скорее всего, это было 2,7, хотя вполне могло быть и 3,6.
Может кто-нибудь объяснить, почему это работает? У меня был бинарный файл, который уже был подписан, но замена такой подписи исправила это.

Хотя ссылка RedYeti полезна, просто чтобы сэкономить несколько кликов для других, позвольте мне напомнить, как сгенерировать сертификат для подписи кода и использовать его для (повторной) подписи кода:

  1. Создайте свой собственный сертификат подписи кода:

    • В разделе «Связка ключей» выберите «Связка ключей» > «Помощник по сертификатам» > «Создать сертификат». Это запускает помощника по сертификатам:

    • Имя: Введите здесь произвольную строку, которую вы сможете запомнить. Избегайте пробелов, иначе вам нужно будет экранировать имя сертификата при использовании codesignиз командной строки.

    • Тип удостоверения: Самоподписанный корень

    • Тип сертификата: Подписание кода

    • Установите флажок «Позвольте мне переопределить значения по умолчанию», это очень важно.

    • Серийный номер: 1 (допустимо, если комбинация имени сертификата и серийного номера уникальна)

    • Срок действия: 3650 (10 лет)

    • Электронная почта, Имя и т.д. заполняйте как хотите.

    • Информация о паре ключей: установлено значение RSA, 2048 бит. ИМХО особого значения не имеет.

    • От «Расширение использования ключа» до «Расширение альтернативного имени субъекта»: примите значения по умолчанию.

    • Расположение: брелок для входа.

    • После его создания установите значение «Всегда доверять» в цепочке ключей входа: щелкните сертификат правой кнопкой мыши, выберите «Получить информацию» и в разделе «Доверие» установите для параметра «При использовании этого сертификата» значение «Всегда доверять».

  2. Переподписание приложения:codesign -f --deep -s <certname> /path/to/app

  3. Убедитесь, что это сработало:codesign -dvvvv /path/to/app

Наслаждаться!

ОБНОВЛЕНИЕ: люди спрашивали меня, почему это «не работает» в macOS 10.14 «Мохаве». Теперь, когда я, наконец, обновился :-), вот что я узнал.

По сути, не используйте самозаверяющий сертификат для подписи кода. Вместо этого создайте сертификат, используя свой Apple ID в Xcode . Кратко повторим шаги:

В Xcode> «Настройки»> «Учетные записи» выберите свой идентификатор разработчика Apple, нажмите «Управление сертификатами», выберите «+» в левом нижнем углу, он предлагает вам вариант «Разработка Apple». Выберите это, это сделает сертификат для вас. Щелкнув по новому сертификату, удерживая нажатой клавишу Ctrl, вы можете экспортировать его (в .p12формате), а с помощью open-ing этот .p12файл загружается в вашу цепочку ключей для входа.

Вы увидите, что этот сертификат действителен в течение года, «Выдан: Apple Worldwide Developer Relations Certification Authority». Я подозреваю, что это надежнее, чем самозаверяющий сертификат.

Теперь вы можете подписать свое приложение, как и раньше, с помощью codesign -f -s <apple_ID> /path/to/prog. Я попробовал это с помощью простого двоичного файла (скомпилированного из hello.c:-)) и его можно было проверить с помощью codesign -v.

Я еще не пробовал это с пакетами Python, поэтому у меня нет советов людям, которые упомянули в своих комментариях, что это не может подписать «python.app».

Спасибо! Это единственное решение, которое избавило меня от диалогов брандмауэра. Я использую OSX 10.10 Yosemite.
очень хорошо! легко для разработчиков, у которых уже есть сертификат!
примечание: я увеличил срок действия до 7300 (дней), то есть 20 лет. С некоторыми попытками я обнаружил, что это максимальное число, которое принимает поле ввода (по крайней мере, на OSX Yosemite 10.10.3) — очень хорошо, слава!
ответ Ахолла намного проще и работал у меня на OS X 10.10
У меня не работало на OS X 10.11.1 (15B42)
Любой случайный первый шаг можно сделать программно?
@Xavier Nodet, вы пробовали свое решение на macOS Mojave? Создание сертификата работает хорошо, как вы описываете. Но, похоже, это не относится к исполняемому файлу python (не python.app)
@AgileBean: это не решение Xavier Nodet, а мое :-) и извините, я еще не установил Mojave (обычно я отстаю от Apple на год, люблю ждать, пока они правильно отладят macOS)
@LaryxDecidua извините, я неправильно понял славу. в любом случае - к сожалению, мохаве, кажется, очень устойчив к любым изменениям, предложенным выше (ваше решение) и ниже (решения по дизайну).
не работает под Мохаве. Я пробовал подписывать Python.app, а также bin/python3.. ничего не помогло.

Это относится к тому, подписано приложение или нет. Если он не подписан, предпочтение не будет запомнено.

Чтобы узнать, подписано ли приложение, сделайте это в Терминале:

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

Для Eclipse - мой говорит, что он вообще не подписан. Я не могу дальше комментировать, как подписать приложение, так как я не удосужился этого сделать, но этот ответ о суперпользователе охватывает это:

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

Хотя ответ Ахалла дает решение, этот ответ объясняет, почему. Если объединить, это будет идеальный ответ.

Если вы программируете на Go:

http.ListenAndServe("localhost:8080", ноль)

Вместо:

http.ListenAndServe(":8080", ноль)

Добро пожаловать в Ask Different. Можете ли вы уточнить, как ваш ответ относится к вопросу и где следует использовать эту строку кода?
Приведенный выше ответ предназначен для разработчиков Go на macOS. Это действительно работает и останавливает все надоедливые всплывающие окна каждый раз при перезапуске двоичного файла (что часто происходит в течение дня). Это может не иметь большого смысла без контекста, но это отличный ответ для разработчиков.
Спасибо! Это был ответ, который я искал.
На самом деле это не просто ответ. Это связано с тем, прослушиваете ли вы все сетевые интерфейсы или только интерфейс локального хоста. Таким образом, на любом языке, если вы используете прослушивание по умолчанию, это обычно означает «прослушивание на всех интерфейсах», что означает более вероятное взаимодействие с брандмауэром.

Просто примечание: если вы используете виртуальную среду, обязательно подпишите приложение, которое используется для среды. Я знаю, что это очевидно, но, тем не менее, необходимо сказать.

Большое спасибо, но вместо приложения, как мне подписать версию Python (скажем, python3.6) в среде conda?

Я получил помощь в ответе Саяна Мохсина, и я считаю, что он более общий, чем go.

У меня была эта проблема с частью программного обеспечения, которому не нужно разрешать подключения извне, только с моей машины. Такое программное обеспечение не нужно подписывать, чтобы избежать этого предупреждения: его нужно только явно прослушивать localhost.

В зависимости от вашей среды установка ограничения хоста будет выполняться по-разному. В моем случае я работал с nginxсервером, и изменения его конфигурации с listen 8080на listen 127.0.0.1:8080было достаточно, чтобы это исправить.

Если это также ваш случай, вам обязательно следует проверить, предоставляет ли ваш сервер способ настройки ограничения хоста и установить его на localhostили 127.0.0.1.

Если вы ищете способ отключить это оповещение для симулятора iOS, вы можете использовать этот скрипт от Тома Содерлинга :

#!/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

Обратите внимание, что вам придется запускать его снова после каждого перезапуска. Вы можете сделать это launchd, следуя этим инструкциям . Обязательно укажите это:

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

Я понимаю, что это старые вопросы и ответы, но это был первый поиск в Google, когда у меня была такая же проблема. Просто хотел добавить кое-что для других, которые могут приземлиться здесь.

Чтобы выполнить любую из описанных здесь команд codesign, необходимо установить инструменты командной строки xcode. Без них вы получите сообщение об ошибке:

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

Чтобы это исправить, установите инструменты с помощью:

xcode-select install

Я бы прокомментировал пост Ахолла, но у меня нет на это очков репутации.

Моя ситуация связана с двумя копиями Eclipse, установленными на MacOS Mojave 10.14.5. Первая копия была авторизована с помощью брандмауэра MacOS. Вторая копия всегда будет отображать приглашение «принять входящие подключения». При выборе «Принять» сообщение будет отображаться после каждой перезагрузки, очевидно, настройки брандмауэра не были обновлены.

Решение заключалось в том, чтобы открыть Системные настройки MacOS -> Безопасность и конфиденциальность -> Брандмауэр, разблокировать экран, Параметры брандмауэра. Выберите Eclipse.app «Разрешить входящие подключения» и удалите его кнопкой «-». В следующий раз, когда я выбрал «Разрешить», приглашение Eclipse «принимать входящие подключения» было последним.

У меня возникла та же проблема после обновления до MacOS 11.0.1 Big Sur и Eclipse 2020-09. Сообщение было немного другим; «Вы хотите, чтобы приложение «Eclipse.app» принимало входящие сетевые подключения?» но решение такое же.

Я получаю это диалоговое окно (Canon ccpd) каждый раз после запуска моего компьютера. Откройте брандмауэр> безопасность и конфиденциальность> разблокируйте, чтобы включить изменения> нажмите кнопку «Включить скрытый режим»> нажмите кнопку «Блокировать все входящие подключения».

После этого больше не будет раздражающего диалогового окна драйвера принтера Canon.

Но приложение не работает...

Я попробовал все вышеперечисленное в Mac 10.13, и ничего не получилось.

В конце концов я написал сценарий, который запускался при выходе из системы, прикрепленный к хуку входа в систему, который отключал брандмауэр, поэтому при входе в систему ему больше не требовалось разрешение, а затем с помощью отложенного запуска запускался другой сценарий, который включал брандмауэр.

Все хорошо сейчас

Добро пожаловать в Спроси Разное! Возможно, вы захотите поделиться своим сценарием, чтобы другие пользователи также могли извлечь выгоду из вашего решения.

Решением для меня было просто полностью отключить брандмауэр. Чрезвычайно распространено создание частей программного обеспечения с поддержкой Интернета, которые, конечно же, не подписаны, потому что вы компилируете их изначально.

Откройте прожектор с помощью CMD + пробел, найдите «конфиденциальность» и выберите «Безопасность и конфиденциальность». Затем перейдите на вкладку «Брандмауэр» и отключите там брандмауэр.

Это кажется довольно плохим решением для большинства людей, если они не знают, что делают. Брандмауэры существуют не зря — даже на Mac.
Я думаю, вы имели в виду «Брандмауэры раздражают даже на Mac». Не все неграмотны, бегают по открытым сетям Wi-Fi в аэропортах со всеми открытыми портами и скачивают вирусы с сайтов распространения вредоносных программ. Мой ответ правильно решает проблему и позволяет обойти глупо раздражающие всплывающие окна Apple. Каждый раз, когда вы перекомпилируете двоичный файл, который использует сеть, вы получаете всплывающее окно, что абсолютно непростительно. Всплывающее окно — это еще один раздражающий способ, которым Apple пытается нянчить необразованных людей, оставляя разработчиков в беде.
Согласен - не все необразованные. Однако на эту тему думает подавляющее большинство людей. Даже те, кто этого не делает, должны знать лучше, чем отключать основной компонент сетевой безопасности. По крайней мере, предупредить людей о возможных последствиях было бы хорошо. Простое отключение брандмауэра я бы не считал «исправлением», а очень хитрым обходным путем.