Questão O que devo fazer sobre com.apple.quarantine?


Eu baixei alguns .jar arquivos da Internet e deseja usá-los no Mac OS X. Mas o sistema operacional parece tê-los marcado com o atributo extendido com.apple.quarantine (sem nenhuma indicação disso até que eu notei o "@" no ls -l e descobri como usar ls -l@) - aparentemente porque eles foram baixados da internet. Qual é o jeito certo de lidar com isso?


82


origem




Respostas:


Este atributo é adicionado para que ele possa solicitar a confirmação do usuário na primeira vez que o programa baixado for executado, para ajudar a impedir o malware. Após a confirmação, o atributo deve ser removido automaticamente e, em seguida, o programa será executado normalmente.


56



ahhhhhh .... ok isso faz sentido. Portanto, é um contrato entre implementações de navegador que salvam arquivos e o SO e / ou Java quando ele executa executáveis. - Jason S


Você não ter Para lidar com isso. Abra-o e o OS X pedirá sua permissão. Ou como richard sugeriu, exclua-o usando algo como:

xattr -d com.apple.quarantine my_jar.jar

Para fazer isso automaticamente para qualquer arquivo baixado, você pode anexar uma ação de pasta à pasta de download, como descrito em macosxhints.com em 10.5: Remover o sinalizador de aviso 'arquivo baixado'.

E o seguinte foi postado em macosxhints.com há muito tempo atrás, para o Safari: 10.5: Desativar o aviso de arquivo 'baixado da internet', alegando que se pode remover VerifiedDownloadPlugin.plugin a partir de /Library/Internet Plug-Ins. Eu não testei isso.

Como um aparte: às vezes é preciso iniciar um único programa várias vezes em um Mac. Isso pode ser feito usando cd /Applications/some-application/ Seguido por open -n "Application Name.app". Isso realmente precisa do .app sufixo; corrida open -n "Application Name" pode ter um GateKeeper parando o acesso:

"Application Name" não pode ser aberto porque é de um desenvolvedor não identificado.

Suas preferências de segurança permitem a instalação de apenas aplicativos da Mac App Store e dos desenvolvedores identificados.

Acima, mesmo removendo o atributo estendido com.apple.quarantine não conserta isso, mas usando o .app sufixo funciona bem.

(Eu não estou aconselhando ninguém a se livrar das medidas de segurança.)


73



Eu tenho um número de arquivos como este e tive que remover manualmente o xattr como OS X não pediu permissão ... - Brian Knoblauch
@Brian, e clicou com o botão direito do mouse, Abrir não solicitar? (Isso às vezes ajuda se o OS X solicitar um, mas não mostra a opção para continuar.) - Arjan
Obrigado pelo encantamento xattr, menos incomodo do que descobrir como desencadear algum diálogo inadequado (IMO) em um framework. - Sue Spence


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

18



Não use sudo quando você não precisa. - s4y
Editou a resposta para remover 'sudo'. - Richard Hoskins
Como você faz isso recursivamente para todos os arquivos em um diretório? - Landon Kuhn
@ landon9720 - O (atualmente) abaixo resposta tem um Comente que permite instruir o xattr a trabalhar recursivamente sobre o conteúdo de um diretório fornecido - user66001
find /path/to/dir -exec xattr -d com.apple.quarantine {} \; - sepehr


Você pode desativar os avisos permanentemente com defaults write com.apple.LaunchServices LSQuarantine -bool false. Também desativa as caixas de diálogo do Gatekeeper, mesmo que você não tenha permitido o download de aplicativos de qualquer lugar nas Preferências do Sistema.


4





Eu encontrei o seguinte comando

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

muito útil ao tentar se livrar do atributo. Observe as aspas duplas ao redor $l - você precisa deles se a sua pasta de aplicativos contiver arquivos com um espaço em branco no nome deles.


1



Você também pode usar xattr -rd com.apple.quarantine Application.app. - user495470
Você não precisa do tempo ... loop. find pode fazer tudo: "localizar Application.app -print -exec xattr -d com.apple.quarantine {} \" " - rivimey
"opção -r não reconhecida" - Jamie Ivanov
Não há necessidade de gerar um novo processo para cada arquivo, nem é necessário remover o atributo xattribute do arquivo, se ele não existir em primeiro lugar: find . -xattrname com.apple.quarantine -print0 | xargs -0 xattr -d com.apple.quarantine - dland