GNU/Linux >> Tutoriales Linux >  >> Linux

Configuración de diferentes ACL en directorios y archivos

Como señala Gilles, setfacl los permisos predeterminados especifican los permisos máximos, básicamente reemplazando el umask . Entonces, los archivos recién creados serán rw a menos que la aplicación que creó el archivo haya pedido especialmente que sea ejecutable.

$ mkdir test
$ touch test/oldfile
$ getfacl test/oldfile
# file: test/oldfile
# owner: myuser
# group: myuser
user::rw-
group::r--
other::r--

$ setfacl -m d:g:mygroup:rwx test
$ touch test/newfile
$ getfacl test/newfile
# file: test/newfile
# owner: myuser
# group: myuser
user::rw-
group::r-x                         #effective:r--
group:mygroup:rwx                  #effective:rw-
mask::rw-
other::r--

Tenga en cuenta las permanentes efectivas anteriores. (Solo hay unos pocos programas que solicitarán establecer el bit de ejecución en los archivos que crea, por ejemplo, gcc para ejecutables y cp si el archivo que se está copiando era ejecutable.)

¿O quiso decir que el primer comando setfacl funcionaba como usted quería, pero el segundo no? En otras palabras, ¿está buscando arreglar los permisos en los archivos antiguos, asegurándose de que los directorios sean transitables, sin otorgar permisos de ejecución a otros archivos regulares?

Mi versión de setfacl permite X exactamente como usted quiere, por ejemplo:

setfacl g:mygroup:rwX

$ setfacl --version
setfacl 2.2.49
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ find test -ls
107513    4 drwxr-xr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-r--r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxr-xr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ setfacl -Rm g:somegroup:rwx test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rwxr--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ setfacl -Rm g:somegroup:rwX test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rw-r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir

Si su versión de setfacl no es compatible con eso, ¿por qué no usar find? ?

permisos de sobrescritura, configurándolos en rw para archivos y rwx para directorios

$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)

establecer permisos de ACL de mi grupo en función de los permisos de grupo existentes

$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)

Probablemente querrá verificar que la máscara de grupo proporcione permisos efectivos. Si no, tendrás que ejecutar esto también:

$ find . -type d -exec chmod g+rwX '{}' ';'

Para futuros lectores, usar setfacl en archivos/carpetas existentes sin agregar el bit ejecutable a sus archivos, la solución es esta parte de la respuesta de @Mikel:

Mi versión de setfacl permite X exactamente como usted quiere, por ejemplo:

setfacl g:mygroup:rwX

Extracto relevante del setfacl documentación:

El campo permisos es una combinación de caracteres que indican los permisos:leer (r), escribir (w), ejecutar (x), ejecutar solo si el archivo es un directorio o ya tiene permiso de ejecución para algún usuario (X) .


Según tengo entendido, las ACL de Linux, setfacl -Rdm g:mygroup:rwx share_name hace exactamente lo que quieres. Experimento:

umask 007
mkdir foo
chgrp mygroup foo
chmod 2700 foo
setfacl -d -m group:mygroup:rwx foo
setfacl -m group:mygroup:rwx foo
touch foo/data
echo '#!/bin/ls' >foo/exec
chmod +x foo/exec

Luego, como un usuario diferente en el grupo mygroup :

$ cat foo/*
#!/bin/ls
#!/bin/ls
$ ./foo/data
ash: ./foo/data: Permission denied
$ ./foo/exec
./foo/exec

¿Qué está pasando?

$ getfacl foo/data
# file: foo/data
# owner: myuser
# group: mygroup
user::rw-
group::---
group:mygroup:rwx                 #effective:rw-
mask::rw-
other::---

La ACL efectiva para mygroup es el resultado de and'ing el ACL_GROUP entrada para mygroup (rwx ) con la entrada ACL_MASK (rw- ).

La página de manual de acl(5) explica el cálculo de esto en "Algoritmos de verificación de acceso". No explica cómo ACL_MASK se generan entradas, pero en la práctica parece suceder lo correcto.


Linux
  1. Una manera fácil de ocultar archivos y directorios en Linux

  2. Encuentra archivos y directorios en Linux como un profesional

  3. Cómo archivar archivos y directorios en Linux [Parte 2]

  4. Encuentra los archivos y directorios más grandes en Linux

  5. Linux Eliminar archivos y directorios

Cómo usar el comando cp para copiar archivos y directorios

Cómo sincronizar archivos y directorios usando Zaloha.sh

3 formas de encontrar archivos y directorios en Linux

Comprimir y archivar archivos y directorios

Encuentre archivos y directorios en Linux fácilmente

Archivos y directorios predeterminados en cPanel