¿Cómo copio ACL en Mac OS X?

13

La mayoría de los derivados de Unix pueden copiar ACL de un archivo a otro con:

getfacl filename1 | setfacl -f - filename2

Desafortunadamente, Mac OS X no tiene los comandos getfacl y setfacl, ya que han incorporado el manejo de ACL en chmod. chmod -E acepta una lista de ACL en stdin, pero no he encontrado un comando que escupe ACL en un formato adecuado en stdout. Lo mejor que se me ocurrió es:

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

¿Hay una solución más robusta?

Pregunta adicional: ¿hay una buena manera de hacerlo en Python, sin usar ningún módulo que no se envíe con 10.6?

MagerValp
fuente
Ahora es el año 2020, y macOS todavía no tiene getfacl/ setfacl. Muy notable github.com/jvscode/getfacl tiene 10 años y no he podido hacerlo funcionar. serverfault.com/a/303752/104173 parece complicado, y no estoy claro si intenta reemplazar la get/setfaclfuncionalidad. Entiendo que macOS no es una plataforma de servidor, pero aún puede experimentar intrusiones de seguridad. ¿Vale la pena reiniciar esta conversación en apple.stackexchange.com ?
Johnny Utahh

Respuestas:

8

ls -e Imprima la Lista de control de acceso (ACL) asociada con el archivo, si está presente, en una salida larga (-l).

esto da un resultado como ...

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

Personalmente, tengo "exportaciones" en mi ~/.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 lo hacen chmodposible ...

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

Desde la chmodpágina del manual, hay un poco de información ... que sugiere que de hecho puede ser posible hacer algo como lo que usted describe ...

"Las ACL se manipulan utilizando extensiones de la gramática del modo simbólico. Cada archivo tiene una ACL, que contiene una lista ordenada de entradas. Cada entrada se refiere a un usuario o grupo, y otorga o niega un conjunto de permisos. En los casos en que un usuario y un existen grupos con el mismo nombre, el nombre de usuario / grupo puede tener como prefijo "usuario:" o "grupo:" para especificar el tipo de nombre ".

chmod -E Lee la información de ACL de stdin, como una lista secuencial de ACE, separada por nuevas líneas. Si la información se analiza correctamente, la información existente se reemplaza.

Además, le daré un saludo a BatchMod , un viejo , pero un regalo para ACL, así como para TinkerToolSystem .

mralexgray
fuente
Esto funcionó para mí, pero tuve que cambiar el comando chmod a: sudo chmod +a "localadmin allow $DIR_ALL" /APPBUNDLE(cambiando el nombre de usuario y el allow)
E. Moffat
1

Debería poder statformatear su salida de manera adecuada.

Pausado hasta nuevo aviso.
fuente
stat no enumera las ACL.
MagerValp
1

Quizás eche un vistazo a https://github.com/jvscode/getfacl .

conocer
fuente
Buena referencia Por desgracia, este proyecto parece tener 10 años, no tiene setfacl(solo getfacl) y la getfaclfuncionalidad parece ser bastante limitada. Desafortunadamente no he encontrado una solución mejor.
Johnny Utahh