Cuando uso setfacl para administrar qué permisos deben tener los archivos / directorios secundarios, por alguna razón los archivos tienen todos los permisos excepto el de ejecución («x»).

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ getfacl . # file: . # owner: someuser # group: webs # flags: -s- user::rwx group::rwx other::rwx default:user::rwx default:group::rwx default:other::rwx someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rw-rw-rw- 1 someuser webs 0 paź 31 13:35 file 

Pensé que tenía algo que ver con umask, pero cambiarlo de varias formas nunca da el resultado esperado a menos que me esté perdiendo algo.

¿Cómo se puede solucionar esto?

Respuesta

La respuesta de Hauke Laging está tratando de decir:

Cualquier programa que crea un archivo o directorio especifica el modo (permisos) que desea que tenga ese archivo. Esto casi siempre está codificado en el programa C (o en cualquier idioma que se use ) y el usuario casi nunca puede acceder directamente. Entonces, el valor umask y la ACL predeterminada pueden desactivar los bits de permiso, pero no agréguelos.

Su problema es que, mientras que mkdir especifica un modo de 777 (rwxrwxrwx), casi todos los programas que crean archivos especifican 666 (rw-rw-rw-). Esto incluye touch, el shell (para la redirección de E / S; p. Ej., program > file), los editores (vi, vim, emacs, etc…), dd, split y así sucesivamente. Por lo tanto, no obtendrá permisos de rwxrwxrwx en un archivo sin formato inmediatamente después de la creación (por cualquiera de estos programas), sin importar lo que haga con las ACL; debe crear el archivo y luego chmod.

Hay un par de excepciones a esta regla:

  • cp y programas relacionados (por ejemplo, cpio, tar, etc.) que copian o vuelven a -crear un archivo, que (intentará) establecer el nuevo archivo en el mismo modo que el archivo original.
  • Los compiladores, que crean archivos ejecutables binarios, especifican un modo de 777 (al menos, si el compilación exitosa), por lo que el usuario podrá ejecutar el programa que acaba de compilar.

Comentarios

  • Asumo que esto solo se aplica a los modos de permiso tradicionales de Unix, que corresponden a user, group y other Entradas de ACL. Si tiene entradas de ACL predeterminadas para usuarios o grupos con nombre, ‘ se heredarán según lo especificado, ¿verdad?
  • ¿Es esta una cita de alguna parte? Si es así, agregue la fuente y, si no es así, elimine el formato de la cita.
  • @terdon: No es una cita; es (como se describe) una paráfrasis de la respuesta de Hauke Laging . ¿Cómo debería ser manejado? (1) Podría haber editado la otra respuesta, pero sé que las reescrituras masivas de las publicaciones de otras personas están mal vistas. (Y tenga en cuenta, FWIW, que mi representante en este sitio fue < 2000 en octubre de 2014.) (2) Podría haberlo publicado como comentario sobre la otra respuesta. O más bien, podría haberlo publicado como una serie de tres comentarios, ya que tiene > 1200 caracteres. Pero eso no es coherente con mi comprensión del propósito de los comentarios. … (Continuación)
  • ¡Oye, no fue ‘ una queja! Esta es una buena respuesta y solo la encontré porque me preguntaba lo mismo. Simplemente eliminaría el formato de comillas, que ‘ es todo. Publicar una respuesta aclarando una existente está bien siempre que menciones el original (lo cual hiciste). Sí, agregar un enlace sería una buena idea, pero ‘ no es gran cosa. Claramente, no está simplemente copiando su respuesta en la suya.
  • No pensé que fuera una queja; gracias por los elogios. Pero seguramente te das cuenta de que cualquier petición de una persona-rombo tiene el aire de un puño de hierro en un guante de terciopelo. 🙂 P.S. He editado mi respuesta de acuerdo con su sugerencia.

Respuesta

No menciona el » El resultado esperado «es. Supongo que son los archivos que tienen los x bits configurados.

No puede hacer cumplir eso, ya que la ACL predeterminada (como umask) solo impide los permisos, pero no los establece por sí mismo. Un directorio o archivo nuevo no obtiene más permisos (para usuarios, grupos y otros) que open() o mkdir() llamada que lo crea.

Para archivos, generalmente solo se solicita permiso de lectura y escritura. Pero si un compilador crea un archivo binario, también solicita permiso de ejecución.

Comentarios

  • Tu respuesta es bastante caótica desde el punto de vista del inglés. ¿Puedes corregirla? También ‘ no estoy seguro. qué quieres decir. Echa un vistazo a mi código. Para directorios siempre funciona.Para los archivos, también funciona siempre, excepto el bit » x «. Además, si ‘ no es la forma correcta de hacer esto, ¿qué es excepto establecer una máscara de usuario cada vez que se accede a un directorio?

Respuesta

$ touch file && chmod a+x file

Las explicaciones en otras respuestas son excelentes. Quiero agregar algo que realmente dé una respuesta a la pregunta,

¿Cómo se puede solucionar esto?

con código específico. @Scott dijo cómo hacer esto,

debes crear el archivo y luego chmod.

El código de mi respuesta muestra cómo hacerlo y lo resalta poniéndolo primero.


Más explicación

Para empezar, por simplicidad, simplemente agrego touch comando dado por el OP, específicamente touch file se convierte en touch file && chmod a+x file.

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file && chmod a+x file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rwxrwxrwx 1 someuser webs 0 paź 31 13:35 file 

Aquí, configuraré la misma situación en mi máquina (Cygwin) para mostrar que funciona, luego haré lo mismo en una caja virtual de Ubuntu para mostrar las diferencias en la configuración . (Tenga en cuenta que el comando real para arreglar las cosas no cambia, simplemente quiero mostrar algunas diferencias que podrían surgir con setfacl, así como para verificar por mí mismo que funciona .)

$ uname -a | head -n 1 CYGWIN_NT-10.0 my_machine 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin $ pwd /home/me $ mkdir user294034 $ setfacl -m u::rwx user294034/ $ setfacl -m d:u::rwx user294034/ $ setfacl -m g::rwX user294034/ setfacl: illegal acl entries $ setfacl -m g::rws user294034/ setfacl: illegal acl entries $ # I guess I don"t know how to get the `flags: -s-` on Cygwin $ setfacl -m g::rwx user294034/ $ setfacl -m d:g::rwx user294034/ $ setfacl -m o::rwx user294034/ $ setfacl -m d:o::rwx user294034/ $ cd user294034 $ getfacl . # file: . # owner: me # group: my_group user::rwx group::rwx other:rwx default:user::rwx default:group::rwx default:other:rwx $ # I admitted that I don"t know how to get `# flags: -s-` $ umask 0022 $ umask 0000 $ touch file $ mkdir dir $ # Here, we"ll see the same problem $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rw-rw-rw- 1 me my_group 0 Sep 18 20:31 file $ # Here, we"ll fix the problem $ rm file $ touch file && chmod a+x file $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rwxrwxrwx 1 me my_group 0 Sep 18 20:32 file 

Responder

Puede probar este sencillo script que reemplaza los registros ACL para cada archivo y directorio, otorgando los permisos predeterminados especificados.

$ cd ~ $ mkdir .config $ cat <<"EOF" >> .config/dacl user::rwx group::rwx other:r-x default:user::rwx default:group::rwx default:other:r-x EOF $ cat <<"EOF" >> .config/facl user::rw- group::rw- other:r-- default:user::rw- default:group::rw- default:other:r-- EOF $ cd / $ find $1 -type d -exec setfacl -f ~/.config/dacl {} \; $ find $1 -type f -exec setfacl -f ~/.config/facl {} \; $ getfacl . # file: . # owner: MyUser # group: Administrators user::rwx group::rwx other::r-x default:user::rwx default:group::rwx default:other::r-x 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *