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

90

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

Джейсон С
источник

Ответы:

63

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

mark4o
источник
ааааа .... хорошо, это имеет смысл. Так что это контракт между реализациями браузера, которые сохраняют файлы, и ОС и / или 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. Он также отключает диалоговые окна гейткипера, даже если вы не разрешали загружать приложения из любой точки системной настройки.

LRI
источник
4

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

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

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

slhck
источник
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), не всегда рекомендуется, если вы действительно не злитесь на это. :-)

OsamaBinLogin
источник
эээ ... на какой вопрос ты отвечаешь?
Джейсон С
Похоже, вы комментируете другой ответ в этом вопросе ( superuser.com/a/126227/1162 ), а не предоставляете ответ самостоятельно.
Джейсон С