Como uso o chmod em um Mac para fazer com que novos arquivos herdam as permissões do diretório pai?


23

Estou no Mac. Quero fazer com que todos os novos arquivos / pastas criados em uma pasta específica tenham as mesmas permissões (não grupo, que já foram resolvidas) como as do diretório pai. No Linux, eu normalmente usaria o setfacl, mas parece que o chmod no Mac pode fazer o que estou procurando. Eu li a página de manual do chmod, mas ainda não consigo descobrir como formatar corretamente o comando para obter o que quero.


Quero que os novos arquivos / pastas sejam legíveis e graváveis ​​em grupo.

Respostas:


33

Primeiro, um pouco de plano de fundo para explicar o que está acontecendo: os arquivos no OS X podem ter dois tipos bem diferentes de configurações de permissão aplicadas a eles: POSIX e ACLs.

Os arquivos sempre (bem, quase sempre) têm permissões POSIX aplicadas, consistindo em um proprietário, grupo e outros (com alguma combinação de leitura, gravação e execução para cada um deles). Não há como controlar a herança de permissões POSIX: os novos itens sempre pertencem a qualquer usuário que os criou, a atribuição do grupo é herdada da pasta em que estão e o acesso é determinado pelo umask (que é quase sempre: proprietário obtém acesso total, grupo e outros somente leitura + execução para pastas). Portanto, as permissões POSIX não funcionarão para o que você está tentando fazer.

Os arquivos também podem ter uma lista de controle de acesso (ACL) aplicada. Esta é uma lista de entradas de controle de acesso (ACEs), cada uma das quais se aplica a um usuário ou grupo, especifica os tipos de acesso (em grande detalhe), se eles estão sendo permitidos ou negados e se a ACE também deve ser copiada para itens criados dentro da pasta. Essa última parte é a parte que torna isso útil para você; você precisa criar uma ACE na pasta que especifica o grupo que você deseja, os tipos de acesso que você deseja e a herança completa.

O chmod no OS X pode manipular ACEs com as opções de permissões + a, -a, etc. Se eu entendo o que você deseja, você usaria isso (com o nome do grupo e o caminho da pasta substituídos) para criar o ACE:

chmod +a "group:examplegroup allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" /path/to/folder

Observe que a herança não é "ativa", ou seja, não se aplica aos itens criados antes de você atribuir o ACE, e não se aplica aos itens criados em outro lugar e depois movidos para a pasta. Você pode aplicá-lo ao conteúdo existente usando -R ( chmod -R +a ...). Não conheço uma maneira (exceto as ferramentas administrativas de servidor da Apple) de forçar a herança aos itens movidos para a pasta.


Obrigado pela ótima explicação. Apenas tentei e ainda assim criei um novo arquivo com leitura / gravação do usuário, todo mundo leu permissões. A pasta pai (ao ar livre) é definida como 775 permissões com meu usuário (jhicks) como proprietário e _www como grupo. Eu me adicionei ao grupo _www. drwxrwxr-x + 13 jhicks _www 442B 16 de novembro 09:47 outdoors Eu executei seu comando da seguinte maneira: chmod + a "group: _www lista de permissões, arquivo_de_utilização, pesquisa, add_subdirectory, delete_child, readattr, writeattr, readextattr, writeextattr, readsecurity, file_inherit, directory_inherit "outdoors"
Jeremy Hicks

ls -lmostra apenas permissões POSIX (embora o "+" após as permissões indique que há uma ACL presente). Use ls -lepara mostrar ACLs também.
Gordon Davisson

Se o nome do grupo tiver um espaço, você poderá usar: como delimitador. Por exemplo, "grupo: meu grupo com um espaço: permitir"
Doug Richardson

Segui o chmod +a ...comando, então criei um abc.txt na pasta Comutado para outro usuário e edite com o TextEdit, o arquivo é indicado como Bloqueado e não é editável.
ohho

Eu tenho brincado com isso, acho que você força a herança com + ai #
Robin

4

Tente adicionar -Rao comando @ gordon, assim:

chmod -R +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" outdoors

A -Ropção irá (como observado aqui ):

Recomendação: altere o modo das hierarquias de arquivos enraizadas nos arquivos, em vez de apenas os próprios arquivos.

Alterar as hierarquias de arquivos parece ser o que você está procurando (para novos arquivos, diretórios etc.).

Você também pode conferir esta postagem Apple.SE , que cobre uma situação um pouco semelhante à sua (exceto em relação a um diretório compartilhado), que exigia uma sudotacha na frente.


4

Este (-R) não é o que a maioria das pessoas procura fazer; na maioria das vezes eles preferem alterar a ACL no diretório superior e fazer algo mágico para forçar todos os objetos contidos a herdarem sinalizadores de acordo com a ACL especificada na raiz dessa subárvore. Isso é muito mais elegante, pois as ACLs nos objetos classificam essas ACEs herdadas de acordo com a política.

E sim, eu tive que escrever um script python para fazer isso, também não achei nada apropriado.


2
Você gostaria de compartilhar (por exemplo, uma essência ? Se você não se importa, acho que foi um gesto agradável.
myhd


0

Em um Mac, tente usar o PathFinder , facilita a configuração do ACL e do POSIX. Se você estiver hospedando o WordPress em um servidor Mac, também precisará definir define('FS_METHOD', 'direct');o arquivo wp-config.php para que a instalação de plugins e a atualização não solicitem detalhes sobre o FTP.

Então, basicamente, você mantém as permissões POSIX padrão e adiciona o usuário _www (não grupo) à ACL, depois clique em Propagar permissão na janela ACL.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.