Operação não permitida quando no root - El Capitan (sem root desativado)

236

Estou tentando mover algo para / usr / bin no OS X El Capitan. Desativei o rootless usando os seguintes comandos:, sudo nvram boot-args="rootless=0"; sudo rebootmas continuo recebendo o mesmo erro:

MacBook-Air:~ Mark$ sudo cp class-dump /usr/bin
Password:
cp: /usr/bin/class-dump: Operation not permitted
MacBook-Air:~ Mark$ sudo mv class-dump /usr/bin
mv: rename class-dump to /usr/bin/class-dump: Operation not permitted
Mark Bourke
fonte
14
Por que você está tentando colocar o despejo de classe em / usr / bin? Adições locais pertencem em / usr / / bin local, e sem raízes permite-lhe colocar as coisas lá ...
Gordon Davisson
1
Basta fazer um alias em ~ / .bash_profile e não frack com / usr / bin
Warren P
5
O class-dump é usado diretamente para programação (ferramenta de engenharia reversa - diretamente para programação), portanto, o motivo do fechamento não parece válido. Além disso, 28 estrelas, quase 40 votos positivos para perguntas e 90 votos positivos para respostas significam que a pergunta é útil.
Vive
engenharia reversa porque é usada para obter uma lista de classes?
marciokoko

Respostas:

355

Nvm. Para qualquer outra pessoa com esse problema, é necessário reiniciar o seu Mac e pressionar ⌘ + R ao inicializar. Em seguida, vá em Utilitários> Terminal e digite os seguintes comandos:

csrutil disable
reboot 

Isso é resultado da Proteção da integridade do sistema. Mais informações aqui .

EDITAR

Se você sabe o que está fazendo e está acostumado a executar o Linux, deve usar a solução acima, pois muitas das restrições do SIP são um problema total.

No entanto, se você é um tinkerer / noob / "poweruser" e não sabe o que está fazendo, isso pode ser muito perigoso e é melhor usar a resposta abaixo .

Mark Bourke
fonte
2
@ Chris, você precisará reiniciar com o CMD + R novamente, abra o terminal e execute csrutil enable; reboot. Infelizmente, o comando não funciona no modo normal.
Alexander Kachkaev 27/01
7
@AlexanderKachkaev Sim, foi o que eu fiz. Eu só queria salientar que todo mundo deveria habilitá- lo novamente depois de realizar as alterações! Caso contrário, a proteção de integridade do sistema será desativada permanentemente, o que pode levar a sérios problemas.
Chris
9
Isso só causará sérios problemas se você remover / modificar algo que não deveria ser removido / modificado. Em outras palavras, se você sabe o que está fazendo, é perfeitamente seguro deixá-lo desativado.
Clintm
16
Qualquer pessoa que esteja usando o Linux provavelmente deixará isso desativado. É uma dor completa na bunda.
mschuett
3
@ Chris, não faz sentido algemar-se à cadeira do escritório para evitar ser atropelado por um carro ... em outras palavras ... se você souber olhar para os dois lados antes de atravessar a rua ... é perfeitamente seguro não a algema-se a uma cadeira
Clintm
254

A solução correta é copiar ou instalar para /usr/local/binnão /usr/bin. Isso ocorre devido à proteção de integridade do sistema (SIP) . O SIP faz /usr/binsomente leitura, mas sai /usr/localcomo leitura e gravação.

O SIP não deve ser desativado, conforme indicado na resposta acima, porque adiciona outra camada de proteção contra malware que obtém acesso root. Aqui está uma explicação completa do que o SIP faz e por que é útil.

Conforme sugerido nesta resposta , não se deve desativar o SIP (modo sem raiz) "Não é recomendado desativar o modo sem raiz! A melhor prática é instalar itens personalizados apenas em" / usr / local "."

hariszaman
fonte
8
Isso corrigiu meu problema. Obrigado pelo link! Ficar sem raízes ou desabilitar coisas no modo de recuperação parecia super perigoso! Ainda bem que encontrei isso.
caokey
1
Esta não muito fazer o truque para mim - eu tinha algum aliasing sorte (por exemplo, no meu caso) javapara /usr/local/bin/javanos meus aliases bashrc, depois que eu fiz no link apropriado nessa pasta como esta resposta sugere.
Eli Albert
Esta resposta resolveu meu problema perfeitamente. Deve ser a resposta aceita, pois não requer modificação no sistema nem reinicialização.
Stephan
Então, isso não deixa caminho para rmnada /usr/bin/? Entendo que o SIP tem seu objetivo, mas quero remover um executável específico.
Brad Solomon
1
Eu tenho /usr/local/binno meu caminho e o openssl 1.0.2n está vinculado corretamente, /usr/local/bin/opensslmas toda vez que o faço, which opensslele ainda mostra /usr/bin/opensslqual é a OpenSSL 0.9.8zh 14 Jan 2016versão mais antiga. Como faço para o meu sistema preferir /usr/local/bin/opensslum ao outro?
Francisc0
15

Se você deseja assumir o controle de /usr/bin/

Você precisará reiniciar o seu sistema:

Logo após o som de inicialização, mantenha pressionada a tecla Command-R para inicializar no sistema de recuperação

Clique no menu Utilitários e selecione Terminal

Digite csrutil disable e pressione return

Clique no menu and e selecione Reiniciar

Depois de confirmar suas alterações, reative o SIP! Isso faz muito para proteger seu sistema. (As mesmas etapas acima, exceto o tipo: csrutil enable)

Elliot Yap
fonte
0

Se depois de chamar "csrutil desabilitado" ainda seu comando não funcionar, tente com "sudo" no terminal, por exemplo:

sudo mv geckodriver /usr/local/bin

E deve funcionar.

Nicolas
fonte