В macOS, когда вы открываете приложение, загруженное из Интернета, Gatekeeper автоматически проверяет подпись кода и в случае возникновения проблем предупреждает вас и блокирует приложение. Насколько я понимаю, это происходит только для приложений (расширение .app), а Gatekeeper не будет делать то же самое для установщиков пакетов (расширение .pkg).
Я решил провести эксперимент, чтобы проверить это. Я использовал установщик пакетов ( 1Password-7.8.pkg
) с действительной подписью и полностью удалил подпись, по сути, я сделал следующее:
pkgutil --expand 1Password-7.8.pkg Unsigned.unpkg
pkgutil --flatten Unsigned.unpkg Unsigned.pkg
pkgutil --check-signature Unsigned.pkg
Результат 3 шага:
Package "Unsigned.pkg":
Status: no signature
Затем я дважды щелкнул Unsigned.pkg
и смог выполнить установку без каких-либо предупреждений или блокировок со стороны гейткипера. Этот эксперимент доказывает, что Gatekeeper не проверяет подпись кода установщика пакета (расширение .pkg) автоматически, я прав?
Если приведенное выше предположение актуально, оно приводит ко второму вопросу. Как проверить подпись установщика пакета вручную перед его запуском?
У Apple есть отличная статья о том, как проверить подпись установщика пакета: https://support.apple.com/en-us/HT202369 : вам просто нужно открыть установщик и нажать на замок в правом верхнем углу. . Это работает гладко в большинстве случаев. Но если установщик содержит сценарий предварительной установки , при открытии установщика вы увидите всплывающее окно с текстом «Этот пакет запустит программу, чтобы определить, можно ли установить программное обеспечение». всплывающее окно выглядит следующим образом: в этом случае замок становится серым, и вы не можете нажать на него, пока не нажмете «Разрешить». Проблема в том, что когда вы нажимаете «Разрешить», запускается предустановочный скрипт, а это значит, что вы запускаете какой-то скрипт перед проверкой его подлинности. Обычно,script только проверяет требования и совместимость, как указано в заголовке всплывающего окна. Но потенциально он может делать произвольные вещи, например, случай с установщиком масштабирования: https://twitter.com/c1truz_/status/1244737672930824193
Итак, есть ли возможность проверить обозначение кода установщика пакета из графического интерфейса перед его запуском, или Apple просто пропустила этот случай, и мне нужно отправить им запрос на функцию?
Конечно, вы всегда можете проверить подпись из терминала следующим образом: `pkgutil --check-signature, но выполнение этой команды для любого установщика пакета, загруженного из Интернета, кажется неправильным, и должен быть родной и более удобный способ сделай это.
Спасибо!
В настоящее время нет способа проверить подпись с помощью Installer.app, прежде чем принять сценарий предварительной проверки. Это давняя оплошность инженеров Apple.
Оставьте отзыв или, если вы разработчик, официально сообщите об этой проблеме в Apple.