Como copio ACLs no Mac OS X?

9

A maioria das derivadas unix pode copiar ACLs de um arquivo para outro com:

getfacl filename1 | setfacl -f - filename2

Infelizmente, o Mac OS X não tem os comandos getfacl e setfacl, já que eles passaram o processamento de ACL para o chmod. chmod -E aceita uma lista de ACLs em stdin, mas eu não encontrei um comando que irá distribuir as ACLs em um formato adequado no stdout. O melhor que eu encontrei é:

ls -led filename1 | tail +2 | sed 's/^ *[0-9][0-9]*: *//' | chmod -E filename2

Existe uma solução mais robusta?

Pergunta de bônus: há uma maneira legal de fazer isso em Python, sem usar nenhum módulo que não seja enviado com 10.6?

    
por MagerValp 17.09.2010 / 15:48

3 respostas

4

ls -e Imprime a Lista de Controle de Acesso (ACL) associada ao arquivo, se presente, na saída longa (-l).

isto dá um resultado como ...

drwxr-xr-x@ 19 localadmin   646B Aug  4 00:21  APPBUNDLE
0: user:localadmin allow add_file,add_subdirectory,writeattr,writeextattr,writesecurity
                   ⬆    ⇧                      ⇶                                     ⬆

Pessoalmente, tenho "exportações" no meu ~/.bash_profile

export FILE_ALL="read,write,append,execute,delete,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown"
export DIR_ALL="list,search,add_file,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown"

que tornam tal chmod possível ...

sudo chmod + a "permitir localadmin $ DIR_ALL" / APPBUNDLE

A partir da página chmod man, existe essa informação ... que sugere que, de fato, é possível fazer algo como você descreve.

"As ACLs são manipuladas usando extensões para a gramática do modo simbólico. Cada arquivo tem uma ACL, contendo uma lista ordenada de entradas. Cada entrada refere-se a um usuário ou grupo e concede ou nega um conjunto de permissões. usuário e um grupo existem com o mesmo nome, o nome do usuário / grupo pode ser prefixado com "user:" ou "group:" para especificar o tipo de nome. "

chmod -E Reads the ACL information from stdin, as a sequential list of ACEs, separated by newlines. If the information parses correctly, the existing information is replaced.

Além disso, vou dar uma mensagem para o BatchMod , um velho, mas um presente para o ACL, bem como o TinkerToolSystem .

    
por 22.08.2011 / 13:39
1

Você deve conseguir que stat formate sua saída de maneira adequada.

    
por 17.09.2010 / 19:20
1

Talvez dê uma olhada no link .

    
por 21.07.2011 / 21:04