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

90

Fiz o download de alguns .jararquivos da Internet e quero usá-los no Mac OS X. Mas o sistema operacional parece que os marcou com o atributo estendido com.apple.quarantine (nenhuma indicação disso até que eu tenha notado o " @" no ls -le descobri como usar ls -l@) - aparentemente porque eles foram baixados da internet. Qual é o caminho certo para lidar com isso?

Jason S
fonte

Respostas:

63

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

mark4o
fonte
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.
23710 Jason S
exceto que ele não é removido em aberto e parece persistir indefinidamente, mesmo quando arrastado para / Applications
Erik Aigner
83

Você não precisa lidar com isso. Abra-o e o OS X solicitará sua permissão. Ou, como Richard sugeriu, exclua-o usando algo como:

xattr -d com.apple.quarantine my_jar.jar

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

E a seguir foi publicado de macosxhints.com há muito tempo, para o Safari: 10,5: Desative o 'baixado de internet' aviso de arquivo , alegando que se pode remover VerifiedDownloadPlugin.plugina partir /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 .appsufixo; A execução open -n "Application Name"pode ter um GateKeeper interrompendo o acesso:

"Nome do aplicativo" 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 de desenvolvedores identificados.

Acima, mesmo remover o atributo estendido com.apple.quarantinenão corrige isso, mas o uso do .appsufixo funciona bem.

(Não aconselho ninguém a se livrar das medidas de segurança.)

Arjan
fonte
11
Eu tenho um número de arquivos como este e tiveram que remover manualmente o xattr como OS X não pediu permissão ...
Brian Knoblauch
11
@ Brian, e clique com o botão direito do mouse em Abrir também não? (Isso às vezes ajuda se OS X faz um alerta, mas não mostra a opção de continuar.)
Arjan
11
Obrigado pelo encantamento do xattr, menos incomodado do que descobrir como desencadear algum diálogo inadequado (IMO) em uma estrutura.
Sue Spence
22
 xattr -d com.apple.quarantine /path/to/file
Richard Hoskins
fonte
3
Não use sudoquando não precisar.
S4y
11
Editou a resposta para remover 'sudo'.
Richard Hoskins
11
Como você faz isso recursivamente para todos os arquivos em um diretório?
Landon Kuhn
11
@ landon9720 - A (atualmente) a seguir resposta tem um comentário que lhe permite instruir xattr para trabalhar de forma recursiva sobre conteúdo de um diretório fornecido
user66001
2
find /path/to/dir -exec xattr -d com.apple.quarantine {} \;
sepehr
6

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

Lri
fonte
4

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 $l- você precisará delas se a pasta de aplicativos contiver arquivos com um espaço em branco no nome.

slhck
fonte
9
Você também pode usar xattr -rd com.apple.quarantine Application.app.
Lri
4
Você não precisa do tempo ... loop. O find pode fazer tudo: "encontre Application.app -print -exec xattr -d com.apple.quarantine {} \;"
rivimey 15/06/2015
"opção -r não reconhecida"
Jamie Ivanov
Não há necessidade de gerar um novo processo para cada arquivo, nem você tem que remover o XAttribute do arquivo se ele não tê-lo em primeiro lugar:find . -xattrname com.apple.quarantine -print0 | xargs -0 xattr -d com.apple.quarantine
dland
Todos esses exemplos de linha de comando funcionam apenas quando você está no diretório que contém o aplicativo. @dland findtambém tem um -execprimário. find /Applications -xattrname com.apple.quarantine -exec xattr -d com.apple.quarantine {} \; Você pode substituir /Applicationspelo caminho completo que você deseja, por exemplo, /Users/jdoe/Downloads se você estiver no diretório em que o arquivo está, basta fazer o local xattr -d com.apple.quarantine <target>onde <target>está o nome de um arquivo ou aplicativo.
user2531336 7/01
0

O xattr agora tem um sinalizador -r para recursar. Então você não precisa passar por essas coisas. Além disso, possui um -c que limpa TODAS as sinalizações (incluindo FinderInfo), nem sempre é recomendável, a menos que você esteja realmente zangado. :-)

OsamaBinLogin
fonte
uh ... qual pergunta você está respondendo?
Jason S
Parece que você está comentando outra resposta nesta pergunta ( superuser.com/a/126227/1162 ) em vez de fornecer uma resposta por conta própria.
Jason S