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

55

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 ls -lash o arquivo culpado, parece da seguinte forma:

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

Eu tentei sudo e sudo su ; nada funciona. Alguma idéia que está acontecendo?

Estou tentando chmod arquivos que copiei da minha antiga caixa do Ubuntu. A maioria dos arquivos foi com sucesso chmod 'recursivamente; apenas este está preso e eu não entendo o porquê.

    
por josef.van.niekerk 04.05.2011 / 22:42

7 respostas

6

Depois de muita luta, aqui está o que eu precisava fazer para corrigir o problema:

  • moveu o arquivo para ~/Desktop
  • sudo chown myusername:staff ./entries
  • Mover o arquivo de volta ao seu local original não funcionou (Operação não permitida, novamente), então ...
  • sudo rm ./entries
  • sudo mv ~/Desktop/entries ./entries
por 04.05.2011 / 23:02
75

Sim, o Mac tem muitos aprimoramentos no Unix na área de arquivos. Ignorando toda a coisa fork do recurso que não é mais usada, existem:

  • as permissões padrão do Unix ugo rwx e assim por diante. Aplicam-se ferramentas normais do Unix.
  • ACL , visível com ls -le e alterável com chmod [ -a | +a | =a ] .
  • sinalizadores de arquivo visíveis com ls -lO e alteráveis com chflags .
  • atributos estendidos , visíveis com ls -l@ (somente chaves de atributos) e visíveis e alteráveis com xattr . (Use xattr -h para ajuda se man xattr não der nada a você.)
  • A partir do OS X 10.11 "El Capitan", Proteção de integridade do sistema ( O SIP protege ainda mais alguns arquivos contra alterações de processos comuns, mesmo quando usa sudo para ser executado como root . Os arquivos protegidos pelo SIP serão listados por ls -lO como tendo o sinalizador restricted .

Você pode ter suas operações negadas em um arquivo por causa de 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

Se a proteção de integridade do sistema (SIP) estiver ativada, sudo chflags norestricted também retornará um erro "Operação não permitida". Para limpar o sinalizador restricted , você precisa inicializar em recuperação do macOS e executar chflags norestricted do Terminal (você pode ser necessário primeiro usar o Utilitário de Disco para desbloquear e montar sua unidade de inicialização e, em seguida, lembre-se de que seus arquivos estarão em /Volumes/Macintosh HD ou o nome da sua unidade de inicialização) ou disable SIP completamente e, em seguida, reinicie e sudo chflags norestricted deverá funcionar. Esteja ciente, no entanto, de que futuras atualizações do sistema operacional provavelmente restaurarão o sinal restricted em qualquer arquivo do qual você o removeu.

A desativação do SIP não é recomendada , 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 em uma execução. base de arquivos. Se você desabilitar o SIP, reative-o quando terminar de fazer alterações.

Observe que, se ls -lO mostrar o sinalizador schg definido, você precisará entrar no modo de usuário único para desativá-lo. Eu não vou entrar nisso aqui, pois há questões maiores sobre por que o arquivo tem essa flag set e porque você está tentando mexer com ele e quais serão as consequências.

    
por 12.12.2012 / 22:58
18

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

link

It seems like the rm command has changed in Tiger such that if you use rm -Rf with elevated privileges, it will automatically unlock the files.

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 uchg e uappnd , que impedem qualquer modificação nas permissões ou na propriedade do arquivo. chflags pode remover as bandeiras. Alguns dos atributos de arquivo / metadados e como eles são manipulados por diferentes ferramentas de cópia são aqui .

    
por 08.06.2011 / 19:47
12

Eu tive o mesmo problema com o Crashplan.app.

Todas as soluções listadas aqui não me ajudariam, mas essa foi a solução: link

Você precisa alterar os sinalizadores imutáveis do sistema e 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 essas 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 está desbloqueado e você pode excluí-lo!

    
por 21.08.2014 / 19:30
11

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 resumo, para alguns diretórios importantes, não há como modificá-los - se você usa sudo , chown ou chmod . Isso afeta o diretório /usr (embora você possa modificar /usr/local ).

Para modificar um diretório protegido por Rootless, você precisa desabilitar o Rootless . E, claro, reative-o depois de fazer as modificações, porque é um importante aprimoramento de segurança.

    
por 01.10.2015 / 01:09
3

Eu tive o mesmo problema, sobre minha pasta pessoal. No final acabei de usar o localizador assim:

Ir - > Computador - > seu disco - > Usuários - > seu nome de usuário - > clique com o botão direito - > Obter informações

Eu achei que estava trancado, provavelmente eu fiz isso no passado e esqueci. Desmarcada a caixa de seleção bloqueada, problema resolvido.

Posso recomendar o uso de 'Get Info' do localizador para resolver esse tipo de problema.

(OS X 10.8.3)

    
por 20.09.2013 / 00:49
0

Certifique-se de que o arquivo e sua pasta pai estejam desbloqueados

Eu estava enfrentando um problema semelhante ao tentar excluir um arquivo de assinatura de e-mail do Mac Mail. Eu não consegui excluí-lo até que eu tenha desbloqueado o arquivo, bem como sua pasta pai.

    
por 23.03.2015 / 16:28