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
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
user
,group
yother
Entradas de ACL. Si tiene entradas de ACL predeterminadas para usuarios o grupos con nombre, ‘ se heredarán según lo especificado, ¿verdad?