¿Cómo uso chmod en una Mac para hacer que los archivos nuevos hereden los permisos del directorio principal?

En MacOS . Quiero hacer que cualquier archivo/carpeta nueva que se cree dentro de una carpeta específica tenga los mismos permisos ( no de grupo , eso ya se solucionó) que los del directorio principal.

En Linux , normalmente usaría setfacl, pero parece que chmoden MacOS podría hacer lo que estoy buscando. He leído la manpágina chmodpero todavía no puedo entender cómo formatear correctamente el comando para obtener lo que quiero.

Respuestas (5)

Primero, un poco de historia para explicar lo que está pasando: los archivos en OS X pueden tener dos tipos muy diferentes de configuración de permisos aplicados a ellos: POSIX y ACL.

Los archivos siempre (bueno, casi siempre) tienen permisos POSIX aplicados, 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 elementos nuevos siempre son propiedad del usuario que los creó, la asignación de grupo se hereda de la carpeta en la que se encuentran y el acceso está determinado por el umask (que casi siempre es: el propietario obtiene acceso completo, grupo y otros solo lectura + ejecución para carpetas). Entonces, los permisos POSIX no funcionarán para lo que está tratando de hacer.

Los archivos también pueden tener una lista de control de acceso (ACL) aplicada. Esta es una lista de entradas de control de acceso (ACE), cada una de las cuales se aplica a un usuario o grupo, especifica tipos de acceso (con gran detalle), si se permiten o deniegan, y si el ACE también se debe copiar a elementos creados dentro de la carpeta. Esa última parte es la parte que hace que esto sea útil para ti; debe crear un ACE en la carpeta que especifique el grupo que desea, los tipos de acceso que desea y la herencia completa.

chmoden OS X puede manipular ACE con las opciones de permisos +a, -a, etc. Si entiendo lo que quiere, usaría esto (con el nombre de su 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

Nota : la herencia no es "en vivo", es decir:

  • no se aplica a los elementos creados antes de que asignara el ACE
  • no se aplica a elementos creados en otro lugar y luego movidos a la carpeta.

Puede aplicarlo a contenidos existentes utilizando -R(es decir: chmod -R +a ...). No conozco una forma (excepto las herramientas de administración del servidor de Apple) para forzar la herencia de los elementos que se mueven a la carpeta.

Gracias por la grandiosa explicación. Sin embargo, acabo de probarlo y aún así creó un nuevo archivo con lectura/escritura de usuario, todos los demás leen permisos. La carpeta principal (al aire libre) tiene 775 permisos con mi usuario (jhicks) como propietario y _www como grupo. Me he agregado al grupo _www. drwxrwxr-x+ 13 jhicks _www 442B 16 de noviembre 09:47 al aire libre Ejecuté su comando de la siguiente manera: chmod +a "group:_www lista de permisos, agregar_archivo, buscar, agregar_subdirectorio, eliminar_niño, readattr, writeattr, readextattr, writeextattr, readsecurity, file_inherit, directory_inherit" al aire libre
ls -lsolo muestra permisos POSIX (aunque el "+" después de los permisos indica que hay una ACL presente). Úselo ls -lepara mostrar también las ACL.
Si el nombre del grupo tiene un espacio, puede usar : como delimitador. Por ejemplo, "grupo:mi grupo con un espacio:permitir"
Seguí el chmod +a ...comando, luego creé un abc.txt en la carpeta. Cambiado a otro usuario y editado con TextEdit, el archivo se indica como Bloqueado y no es editable.
Estuve jugando un poco con esto creo que fuerza herencia con +ai

Intente agregar -Ral comando 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

La -Ropción será (como se indica aquí ):

Recurse: cambie el modo de las jerarquías de archivos enraizados en los archivos en lugar de solo los archivos en sí.

Cambiar las jerarquías de archivos parece ser lo que está buscando (para nuevos archivos, directorios, etc.).

También puede consultar esta publicación de Apple.SE , que cubre una situación algo similar a la suya (excepto en relación con un directorio compartido), que requirió una sudotachuela en el frente.

Esto (-R) no es lo que la mayoría de la gente busca hacer; la mayoría de las veces preferirían cambiar la ACL en el directorio superior y hacer algo mágico para obligar a todos los objetos contenidos a heredar banderas de acuerdo con la ACL que especificaron en la raíz de ese subárbol. Esto es mucho más elegante ya que las ACL en los objetos ordenarán estas ACE heredadas de acuerdo con la política.

Y sí, tuve que escribir un script en python para hacer esto, tampoco encontré nada apropiado.

¿Le importa compartir (por ejemplo, en esencia ? Si no le importa, creo que fue un buen gesto.

En una Mac, intente usar PathFinder , facilita la configuración de ACL y POSIX. Si está alojando WordPress en un servidor Mac, también deberá configurar define('FS_METHOD', 'direct');wp-config.php para que la instalación de complementos y la actualización no le soliciten detalles de FTP.

Básicamente, mantiene los permisos POSIX predeterminados y agrega el usuario _www (no el grupo) a ACL, luego hace clic en Propagar permiso en la ventana de ACL.

chmod +ai, i = heredar reglas ACL