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

23

Estoy en Mac Quiero hacerlo para que cualquier archivo / carpeta nuevo que se cree dentro de una carpeta específica tenga los mismos permisos (no grupales, que ya se han solucionado) 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 entender cómo formatear correctamente el comando para obtener lo que quiero.

Jeremy Hicks
fuente
Quiero que los nuevos archivos / carpetas sean legibles y de escritura grupal.

Respuestas:

33

Primero, un poco de antecedentes para explicar lo que está sucediendo: los archivos en OS X pueden tener dos tipos diferentes de configuraciones de permisos aplicados: 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 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 completo, grupo y otros solo lectura + ejecución para carpetas). Por lo tanto, los permisos POSIX no funcionarán para lo que intentas 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 los tipos de acceso (en gran detalle), si están permitidos o denegados, y si el ACE también debe copiarse en elementos creados dentro de la carpeta. Esa última parte es la parte que lo hace útil para usted; debe crear un ACE en la carpeta que especifique el grupo que desea, los tipos de acceso que desea y la herencia completa.

chmod en OS X puede manipular ACE con las opciones de permisos + a, -a, etc. Si entiendo lo que quieres, usarías esto (con el nombre del grupo y la ruta de la carpeta sustituidos) 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

Tenga en cuenta que la herencia no es "en vivo", es decir, no se aplica a los elementos creados antes de asignar el ACE, y no se aplica a los elementos creados en otro lugar y luego se trasladó a la carpeta. Puede aplicarlo a contenidos existentes utilizando -R ( chmod -R +a ...). No conozco una forma (excepto las herramientas de administración del servidor de Apple) para forzar la herencia a los elementos movidos a la carpeta.

Gordon Davisson
fuente
Gracias por la magnifica explicación. Sin embargo, lo probé y todavía creó un nuevo archivo con lectura / escritura del usuario, todos los demás leen permisos. La carpeta principal (exterior) está configurada con 775 permisos con mi usuario (jhicks) como propietario y _www como grupo. Me agregué 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 allow list, add_file, search, add_subdirectory, delete_child, readattr, writeattr, readextattr, writeextattr, readsecurity, file_inherit, directorio_inherir "al aire libre
Jeremy Hicks
ls -lsolo muestra los permisos POSIX (aunque el "+" después de los permisos indica que hay una ACL presente). Use ls -lepara mostrar ACL también.
Gordon Davisson el
Si el nombre del grupo tiene un espacio, puede usar: como delimitador. Por ejemplo, "grupo: mi grupo con un espacio: permitir"
Doug Richardson
Seguí el chmod +a ...comando, luego creé un abc.txt en la carpeta. Cambió a otro usuario y editó con TextEdit, el archivo se indica como Bloqueado y no es editable.
ohho
He estado jugando un poco con esto, creo que forzas la herencia con + ai
Robin
4

Intente agregar -Ral comando @ 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 (como se indica aquí ):

Recurse: cambie el modo de las jerarquías de archivos enraizadas 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 requería una sudotachuela en el frente.

JW8
fuente
4

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 de Python para hacer esto, tampoco encontré nada apropiado.

narices
fuente
2
¿Te importaría compartir (por ejemplo, de manera esencial ? Si no te importa, creo que fue un buen gesto.
Myhd
1

chmod + ai, i = heredar reglas acl

zaonline
fuente
0

En una Mac intente usar PathFinder , facilita la configuración de ACL y POSIX. Si aloja WordPress en un servidor Mac, también deberá configurarlo define('FS_METHOD', 'direct');en 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 grupo) a ACL, luego haga clic en Propagar permiso en la ventana de ACL.

Max
fuente