sudo chown falha com operação não permitida

8

Encontrei perguntas semelhantes aqui, mas as respostas fornecidas para essas perguntas não resolvem meu problema.

Se eu fizer:

sudo chown <username> main.m

Eu recebo um erro de operação não permitida.

A solução geral para erros anteriores foi:

sudo chflags nouchg main.m

para limpar uma bandeira de bloqueio. No entanto, depois de fazer isso, ainda não consigo mostrar o arquivo. Eu também tentei:

chflags noschg main.m

no modo de usuário único sem sorte - recebo um erro de operação não permitida.

Se alguém tiver alguma idéia, eu estaria interessado.

ericg
fonte
Qual é a coisa subjacente que você está tentando fazer? Talvez haja uma razão para esse arquivo ter um bloqueio.
Tamara Wijsman
Para que eu possa usá-lo como dados de teste sem colocar o código em uma ferramenta auxiliar segura, o que exige trabalho extra para depuração - não impossível, mas irritante o suficiente para que eu possa alterar os atributos do arquivo para que uma ferramenta auxiliar segura não seja necessária, isso tornaria as coisas um pouco mais fáceis. Considerando que se trata apenas de dados de teste que foram criados, não há mais nenhuma boa razão para ter um bloqueio.
EricG
11
Em que tipo de sistema de arquivos está o arquivo? Você não está tentando usar chownem um sistema de arquivos NTFS / FAT, está?
Zoredache
@ericgorr: A maior parte disso está no topo da minha cabeça; Não sei o que exatamente é uma ferramenta auxiliar segura. Mas, como você diz, são apenas dados de teste que foram criados; você fechou corretamente o arquivo de teste no seu código?
Tamara Wijsman
@ Uma ferramenta auxiliar é a maneira do OS X de conceder privilégios elevados a um aplicativo enquanto mantém privilégios - por isso, se um aplicativo deseja modificar um arquivo seguro, por exemplo, ele diz à ferramenta auxiliar (autorizada) para modificar o arquivo. Estou supondo que ericgorr quer evitar elevar sua aplicação ou algo para evitar a depuração rigorosa que vem com isso.
Vervious

Respostas:

8

Arquivos de Mac podem ser protegidos em quatro de três maneiras diferentes que eu estou ciente de:

  1. Propriedade e permissões padrão do Unix, como r / w / x, para usuário / grupo / outros que você vê ls -le corrige com chown(1)e chmod(1).
  2. Sinalizadores de arquivo como uchge schgque você vê ls -lOe corrige chflags(1).
  3. Os antigos metadados do Finder "Bit de bloqueio" que você vê GetFileInfo filename. Você também pode ver a presença dos metadados do Finder, mas não seu significado, com ls -l@. Você pode consertar isso SetFile(1). Não importa, isso está mapeado para a uchgbandeira agora.
  4. Listas de controle de acesso (ACLs) que você vê ls -lee corrige com os argumentos relacionados à ACL chmod(1).

Então, vamos ver o que há com seu arquivo combinando todos esses sinalizadores para ls:

ls -lO@e main.m

Parece que você já sabe como lidar com os nºs 1 e 2.

Se você vir uma ACL (nº 4), poderá corrigi-la com os argumentos relacionados à ACL chmod(1).

Se você ainda estiver perplexo, atualize sua resposta com a saída do lscomando combinado sugerido acima, para que possamos ver o que está acontecendo.

Spiff
fonte
O problema parece estar com as ACLs. Acho interessante que o sudo não contorne esses bloqueios. Além disso, chmod -R -a # 0 * removeu as ACLs da maioria dos arquivos na hierarquia, mas falhou em removê-las de algumas - o uso de sudo com o chmod não ajudou.
EricG