Por que o chown reporta "Operação não permitida" no OS X?

65

Estou tentando fazer o seguinte no meu Mac (10.6.7):

sudo chown myusername:wheel ./entries

mas o Unix / Mac está retornando "Operação não permitida". Quando eu for ls -lasho arquivo culpado, ele terá a seguinte aparência:

8 -rwxrwxrwx   1 myusername  staff   394B Apr 26 23:26 entries

Eu tentei sudoe sudo su; nada funciona. Alguma idéia, o que houve?

Estou tentando chmodarquivos que copiei da minha antiga caixa do Ubuntu. A maioria dos arquivos foi chmodeditada com êxito de forma recursiva; apenas este está preso e eu não entendo o porquê.

josef.van.niekerk
fonte
11
Você já tentou sudo chgrp wheel ./entries?
squircle
11
Faça uma verificação no sistema de arquivos. Abra o Utilitário de Disco, selecione seu volume, clique em Verificar Disco e, se necessário, em Reparar Disco .
Daniel Beck
Verifique se o arquivo não está bloqueado no Finder (nenhum crachá de bloqueio no ícone). Para alterá-lo, abra a caixa de diálogo Obter informações e desmarque Bloqueado .
Daniel Beck
Se for um volume "externo" (ou seja, não o volume do sistema), talvez seja necessário remover a opção "Ignorar propriedade neste volume". (Veja na parte inferior da janela Obter informações o próprio volume).
mivk

Respostas:

85

Sim, o Mac possui muitos aprimoramentos no Unix na área de arquivos. Ignorando toda a bifurcação de recursos que não é mais usada muito, existem:

  • as permissões padrão do Unix ugo rwx e assim por diante. Aplicam-se as ferramentas normais do Unix.
  • ACL , visíveis ls -lee alteráveis ​​com chmod [ -a | +a | =a ].
  • sinalizadores de arquivo visíveis com ls -lO(Capital oh, não zero) e alteráveis ​​com chflags.
  • atributos estendidos , visíveis com ls -l@(apenas chaves de atributo) e visíveis e alteráveis ​​com xattr. (Use xattr -hpara obter ajuda se man xattrnão lhe der nada.)
  • A partir do OS X 10.11 "El Capitan", o SIP ( System Integrity Protection ) protege ainda mais alguns arquivos contra alterações de processos comuns, mesmo quando usado sudopara executar como root. Os arquivos protegidos pelo SIP serão listados ls -lOcom o restrictedsinalizador e / ou ls -l@com o com.apple.rootlessatributo.

Você pode ter operações negadas em um arquivo devido a permissões do Unix, ACLs, sinalizadores de arquivo ou SIP. Para desbloquear completamente um arquivo:

sudo chmod -N file        # Remove ACLs from file
sudo chmod ugo+rw file    # Give everyone read-write permission to file
sudo chflags nouchg file  # Clear the user immutable flag from file
sudo chflags norestricted file  # Remove the SIP protection from file
sudo xattr -d com.apple.rootless file # Remove SIP protection from file

Se a Proteção de Integridade do Sistema (SIP) estiver ativada sudo chflags norestrictede sudo xattr -d com.apple.rootlesstambém retornará um erro "Operação não permitida". Para limpar o sinalizador e / ou o atributo, você precisa inicializar no macOS Recovery e executar os comandos do Terminal (talvez seja necessário primeiro usar o Disk Utility para desbloquear e montar sua unidade de inicialização, lembre-se de que seus arquivos estarão abaixo /Volumes/Macintosh HDou abaixo da inicialização) nome da unidade) ou desabilite o SIP completamente e, em seguida, reinicie e os comandos deverão funcionar. No entanto, esteja ciente de que futuras atualizações do sistema operacional provavelmente restaurarão o restrictedsinalizador e o com.apple.rootlessatributo para todos os arquivos dos quais você o removeu.

Desabilitar o SIP não é recomendado , pois remove muita proteção contra malware e danos acidentais, além de não ser necessário quando você pode simplesmente remover a proteção por arquivo. Se você desativar o SIP, reative-o quando terminar de fazer alterações.

Observe que, se ls -lOmostra que o schgsinalizador está definido, você precisa entrar no modo de usuário único para desmarcá-lo. Não vou abordar isso aqui, pois há perguntas maiores sobre por que o arquivo tem esse sinalizador definido e por que você está tentando mexer com ele e quais serão as consequências.

Old Pro
fonte
7
Além disso, outros sinalizadores podem impedir que você altere seus arquivos. No meu script eu coloqueisudo chflags -R nouchg,noschg,nouappnd,nosappnd,noopaque,dump .
djjeck
11
Nota: se algo tiver o sinalizador "imutável", a caixa de seleção Bloqueado em Obter informações será marcada e acinzentada. "sudo chflags nouchg" corrige.
Foo Bar
11
Eu não poderia fazer o -Ne os ugo+rwdois ao mesmo tempo (consegui Failed to clear ACL on file ugo+rw: No such file or directory), mas executá-los individualmente funcionou bem. Se recursivo for desejado, -Rdeve ser o primeiro argumento.
owenfi
3
Observe que a proteção de integridade do sistema (sem raiz) também pode causar isso no El Capitan e em versões posteriores. Para resolver isso, inicialize no Modo de recuperação ( Cmd-R), abra o Terminal e execute csrutil disable, depois reinicie (para reativar, use csrutil enable).
Erwin Wessels
Obrigado ... Eu não tinha idéia sobre sinalizadores de arquivos. Agora eu entendo por que disseoverride rwxrwxrwx huttarl/staff uchg for green.html?
LarsH 27/01
18

Eu tive o mesmo problema. Acontece que os arquivos incorretos foram marcados como "Bloqueados" pelo sistema operacional. Encontrei esta solução e resolveu os problemas em segundos:

http://explanatorygap.net/2005/07/10/unlocking-files-recursively-from-the-command-line/

Parece que o rmcomando mudou no Tiger, de modo que, se você usar rm -Rfcom privilégios elevados, ele desbloqueará os arquivos automaticamente.

No OS X antes do Tiger: find /Volumes/Transit -flags +uchg -print0 | xargs -0 chflags nouchg

No OS X após o Tiger: sudo rm -Rf foldername/

Além disso, mesmo após o OS X 10.4, pode haver sinalizadores de metadados de arquivo como uchge uappnd, que impedem qualquer modificação nas permissões ou propriedade do arquivo. chflagspode remover as bandeiras. Alguns dos atributos / metadados do arquivo e como eles são tratados por diferentes ferramentas de cópia estão aqui .

Bendalton
fonte
sudo rm -Rf foldername/está funcionando perfeitamente no OSX Mountain Lion
Aryo
5
@Aryo: rmexclui o diretório. Existe uma maneira de desbloquear tudo sem excluí-lo? Quando olho uchgnão está definido e posso ativá-lo e desativá-lo novamente conforme o esperado (com chflags [no]uchg), mas isso não afeta o ícone de cadeado no Finder ou a capacidade de fazê-lo chown.
Orome
12

Eu tive o mesmo problema com o Crashplan.app.

Todas as soluções listadas aqui não me ajudariam, mas esta funcionou: http://forums.macrumors.com/showthread.php?t=1546163

Você precisa alterar o sistema e os sinalizadores imutáveis ​​do usuário:

Faça isso para ver quais sinalizadores estão ativos no seu arquivo / pasta:

ls -lhdO MyFile

A resposta pode ser assim:

drwxrwxr-x 3 root admin schg,uchg 102B Apr 8 2013 MyFile

schg , uchg são aquelas bandeiras imutáveis. Um para o sistema e outro para o usuário. Para removê-los, faça o seguinte:

chflags noschg CrashPlan.app # this removes system immutable flag
chflags nouchg CrashPlan.app # this removes the user immutable flags

Então, pelo menos para mim, o arquivo é desbloqueado e você pode excluí-lo!

ruffy
fonte
Awesome, teve que chflagsusar sudoembora, mas faz sentido
Felipe
Tive o mesmo problema com o CrashPlan.app (eu tinha drwxrwxr-x@ 3 _BGMXPCHelper admin schg 96B 9 Jan 2018 CrashPlan.app), e essa foi a única solução que me permitiu excluí-lo, obrigado!
Web
12

No OS X 10.11 (El Capitan), isso também pode ser causado pelo novo recurso Rootless . Veja esta resposta para uma explicação.

Em suma, para determinados diretórios importantes, não há nenhuma maneira de modificá-los - se você usa sudo, chownou chmod. Isso afeta o /usrdiretório (embora você possa modificar /usr/local).

Para modificar um diretório protegido sem raiz, você precisa desativar o Rootless . E, é claro, reative-o após fazer suas modificações, porque é um importante aprimoramento de segurança.

Nate
fonte
11
Uau. Isso me deixou louco. De alguma forma, eu precisava copiar algo para / usr / lib que, de outra forma, não era encontrado em / usr / local / lib (não me pergunte por que). E isso fez o truque.
23416 jQuery
4
Na verdade, você não precisa desativar o Rootless por completo, basta inicializar no modo de recuperação (o que seria necessário para desativar o Rootless) e fazer as alterações desejadas no Terminal.
Old Pro
6

Depois de muita luta, eis o que eu tinha que fazer para resolver o problema:

  • Moveu o arquivo para ~/Desktop
  • sudo chown myusername:staff ./entries
  • Mover o arquivo de volta para o local original não funcionou (operação não permitida novamente), então ...
  • sudo rm ./entries
  • sudo mv ~/Desktop/entries ./entries
josef.van.niekerk
fonte
4

Eu tive o mesmo problema, sobre a minha pasta pessoal. No final, eu apenas usei o Finder como este:

Vá -> Computador -> seu disco -> Usuários -> seu nome de usuário -> clique com o botão direito do mouse -> Obter Informações

Descobri que estava trancado, provavelmente fiz no passado e esqueci. Desmarcada a caixa de seleção bloqueada, problema corrigido.

Eu posso recomendar o uso de 'Obter informações' do localizador para lidar com esse tipo de problema.

(OS X 10.8.3)

danza
fonte
Isso me ajudou a desbloquear o .isoglitchy Virtual Box.
Nakilon
1

Verifique se o arquivo e sua pasta pai estão desbloqueados

Eu estava enfrentando um problema semelhante ao tentar excluir um arquivo de assinatura de email do Mac Mail. Não pude excluí-lo até ter desbloqueado o arquivo e sua pasta pai.

camslice
fonte