Что мне делать с com.apple.quarantine?


90

Я скачал некоторые .jarфайлы из Интернета и хочу использовать их под Mac OS X. Но ОС, похоже, пометила их расширенным атрибутом com.apple.quarantine (никаких указаний на это, пока я не заметил " @" в ls -lи разобрался как пользоваться ls -l@) - видимо потому что их скачали из интернета. Какой правильный способ справиться с этим?

Ответы:


63

Этот атрибут добавлен, чтобы он мог запрашивать подтверждение пользователя при первом запуске загруженной программы, чтобы помочь остановить вредоносное ПО. После подтверждения атрибут должен быть удален автоматически, и тогда программа будет работать в обычном режиме.


ааааа .... хорошо, это имеет смысл. Так что это контракт между реализациями браузера, которые сохраняют файлы, и ОС и / или Java, когда он запускает исполняемые файлы.
Джейсон С

за исключением того, что он не удаляется при открытии и, кажется, сохраняется бесконечно, даже если его перетаскивают в / Applications
Эрик Эйгнер

83

Вам не нужно иметь дело с этим. Откройте его, и OS X попросит вашего разрешения. Или, как предложил Ричард, удалите его, используя что-то вроде:

xattr -d com.apple.quarantine my_jar.jar

Чтобы сделать это автоматически для любого загруженного файла, вы можете прикрепить действие папки к папке загрузки, как описано на macosxhints.com в 10.5: Снимите флаг предупреждения «загруженный файл» .

А вот на macosxhints.com давно было опубликовано следующее: для Safari: 10.5: отключить предупреждение о файле «скачано из интернета» , утверждая, что его можно удалить VerifiedDownloadPlugin.pluginиз /Library/Internet Plug-Ins. Я не проверял это.

В качестве отступления: иногда нужно запускать одну программу несколько раз на Mac. Это может быть сделано с помощью cd /Applications/some-application/следующего open -n "Application Name.app". Это действительно нуждается в .appсуффиксе; Выполнение open -n "Application Name"может получить один доступ остановки GateKeeper:

«Имя приложения» не может быть открыто из-за неизвестного разработчика.

Ваши настройки безопасности позволяют устанавливать только приложения из Mac App Store и определенных разработчиков.

Выше, даже удаление расширенного атрибута com.apple.quarantineне исправляет это, но использование .appсуффикса работает просто отлично.

(Я никому не советую фактически избавляться от мер безопасности.)


1
У меня есть несколько таких файлов, и мне пришлось вручную удалить xattr, поскольку OS X не запрашивала разрешения ...
Брайан

1
@ Брайан, а сделал правый клик, Открыть тоже не подсказка? (Это иногда помогает, если OS X действительно запрашивает один, но не показывает возможность продолжить.)
Arjan

1
Спасибо за заклинание xattr, меньше надоедать, чем выяснять, как вызвать какой-то неуместный (IMO) диалог на платформе.
Сью Спенс

22
 xattr -d com.apple.quarantine /path/to/file

3
Не используйте, sudoкогда вам не нужно.
s4y

1
Отредактировал ответ, чтобы удалить «sudo».
Ричард Хоскинс

1
Как вы делаете это рекурсивно для всех файлов в каталоге?
Лэндон Кун,

1
@ landon9720 - (в настоящее время) приведенный ниже ответ содержит комментарий , позволяющий настроить xattr для рекурсивной работы над содержимым поставляемого каталога
user66001

2
find /path/to/dir -exec xattr -d com.apple.quarantine {} \;
Sepehr

6

Вы можете отключить предупреждения навсегда с помощью defaults write com.apple.LaunchServices LSQuarantine -bool false. Он также отключает диалоговые окна гейткипера, даже если вы не разрешали загружать приложения из любой точки системной настройки.


4

Я нашел следующую команду

find Application.app | while read l; do echo $l; xattr -d com.apple.quarantine "$l"; done

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


9
Вы также можете использовать xattr -rd com.apple.quarantine Application.app.
Lri

4
Вам не нужно время пока ... петля. find может делать все это: "find Application.app -print -exec xattr -d com.apple.quarantine {} \;"
rivimey

«Вариант -r не признается»
Джейми Иванов

Не нужно создавать новый процесс для каждого файла, и при этом вам не нужно удалять xattribute из файла, если он не имеет его в первую очередь:find . -xattrname com.apple.quarantine -print0 | xargs -0 xattr -d com.apple.quarantine
dland

Все эти примеры командной строки работают только тогда, когда вы находитесь в каталоге, содержащем приложение. @dland findтакже имеет -execосновной. find /Applications -xattrname com.apple.quarantine -exec xattr -d com.apple.quarantine {} \; Вы можете заменить /Applicationsна полный путь, который вы хотите, например, /Users/jdoe/Downloads если вы находитесь в каталоге, где находится файл, просто укажите, xattr -d com.apple.quarantine <target>где <target>находится файл или имя приложения.
user2531336

0

У xattr теперь есть флаг -r для рекурсии. Так что вам не нужно проходить через эти вещи. Также он имеет -c, который очищает ВСЕ флаги (включая FinderInfo), не всегда рекомендуется, если вы действительно не злитесь на это. :-)


эээ ... на какой вопрос ты отвечаешь?
Джейсон С

Похоже, вы комментируете другой ответ в этом вопросе ( superuser.com/a/126227/1162 ), а не предоставляете ответ самостоятельно.
Джейсон С
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.