Estoy con Mac. Quiero que cualquier nuevo archivo/carpeta que se cree dentro de una carpeta específica tenga los mismos permisos (no de grupo, de los que ya se ha ocupado) que los del directorio principal. En Linux, normalmente usaría setfacl, pero parece que chmod en Mac podría hacer lo que estoy buscando. He leído la página de manual de chmod pero todavía no puedo averiguar cómo formatear correctamente el comando para obtener lo que quiero.
Respuestas
¿Demasiados anuncios?Primero, un poco de antecedentes para explicar lo que está pasando: Los archivos en OS X pueden tener dos tipos de permisos bastante diferentes aplicados a ellos: POSIX y ACLs.
Los archivos siempre (bueno, casi siempre) tienen aplicados permisos POSIX, que consisten en un propietario, un grupo y otros (con alguna combinación de lectura, escritura y ejecución para cada uno de ellos). No hay forma de controlar la herencia de los permisos POSIX: los nuevos elementos son siempre propiedad de cualquier usuario que los haya creado, la asignación de grupo se hereda de la carpeta en la que se encuentran, y el acceso está determinado por la umask (que es casi siempre: el propietario obtiene acceso total, el grupo y los demás sólo lectura + ejecución para las carpetas). Así que los permisos POSIX no funcionarán para lo que estás tratando de hacer.
Los archivos también pueden tener aplicada una lista de control de acceso (ACL). Se trata de una lista de entradas de control de acceso (ACEs), cada una de las cuales se aplica a un usuario o grupo, especifica los tipos de acceso (con gran detalle), si se permiten o se niegan, y si la ACEs también debe copiarse a los elementos creados dentro de la carpeta. Esta última parte es la que hace que esto sea útil para ti; necesitas crear un ACE en la carpeta que especifique el grupo que quieres, los tipos de acceso que quieres, y la herencia completa.
chmod en OS X puede manipular los ACEs con las opciones de permisos +a, -a, etc. Si entiendo lo que quieres, usarías esto (con el nombre de tu grupo y la ruta de la carpeta sustituida) para crear el 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
Ten en cuenta que la herencia no es "viva", es decir, no se aplica a los elementos creados antes de que asignaras el ACE, y no se aplica a los elementos creados en otro lugar y luego movidos a la carpeta. Puedes aplicarlo a los contenidos existentes usando -R ( chmod -R +a ...
). No conozco una forma (excepto las herramientas de administración de servidores de Apple) de forzar la herencia de los elementos movidos a la carpeta.
Esto (-R) no es lo que la mayoría de la gente busca hacer; la mayoría de las veces preferirían cambiar el ACL del directorio superior y hacer algo mágico para forzar a todos los objetos contenidos a heredar las banderas según el ACL que especificaron en root de ese subárbol. Esto es mucho más elegante ya que los ACLs de los objetos ordenarán estos ACEs heredados de acuerdo a la política.
Y sí, tuve que escribir un script Python script para hacer esto, tampoco encontré nada apropiado.
Intenta añadir -R
al mando de @gordon, así:
chmod -R +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" outdoors
El -R
La opción de la opción de la opción de la opción de la opción de la opción de la opción de la opción de la opción de la opción de la opción de la opción de la opción de la opción de la opción de la opción de la opción de la opción de la opción aquí ):
Recurrir: Cambiar el modo de las jerarquías de los archivos enraizados en los archivos en lugar de sólo los archivos en sí.
Cambiar las jerarquías de los archivos parece ser lo que estás buscando (para nuevos archivos, directorios, etc.).
También puedes ver esto El puesto de Apple.SE que cubre una situación algo similar a la suya (excepto en lo que se refiere a un directorio compartido), que requería una sudo
y se clavaron en la parte delantera.