El primer comando cambiará los permisos de cualquier archivo / directorio preexistente. El -d
segundo comando es crítico para establecer los permisos predeterminados en adelante para cualquier directorio, que a su vez proporcionará un conjunto predeterminado de ACL para cualquier archivo dentro de estos directorios.
NOTA: Que en ambos casos los comandos se ejecutarán recursivamente a través del -R
conmutador.
Con respecto al -d
cambio, desde la setfacl
página del manual:
-d, --default
All operations apply to the Default ACL. Regular ACL entries in the
input set are promoted to Default ACL entries. Default ACL entries
in the input set are discarded. (A warning is issued if that happens).
Este extracto también lo explica bastante bien:
Hay dos tipos de ACL: las ACL de acceso y las ACL predeterminadas. Una ACL de acceso es la lista de control de acceso para un archivo o directorio específico. Una ACL predeterminada solo puede asociarse con un directorio; Si un archivo dentro del directorio no tiene una ACL de acceso, utiliza las reglas de la ACL predeterminada para el directorio. Las ACL predeterminadas son opcionales.
Fuente: 8.2. Configuración de ACL de acceso .
Ejemplo
Digamos que tengo esta estructura de directorio.
$ tree
.
|-- dir1
| |-- dirA
| | `-- file1
| `-- fileA
`-- file1
2 directories, 3 files
Ahora configuremos los permisos usando el primer setfacl
comando en su pregunta:
$ setfacl -R -m u:saml:rwx -m u:samtest:rwX .
Lo que resulta en lo siguiente:
$ getfacl dir1/ file1
# file: dir1
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
Sin el -dR
comando que se ejecuta aquí, los directorios nuevos no estarían cubiertos por sus ACL:
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
group::rwx
other::r-x
Pero si eliminamos este directorio y ejecutamos el setfacl -dR ...
comando y repetimos esta operación anterior:
$ rmdir dir2
$ setfacl -dR -m u:saml:rwx -m u:samtest:rwX .
Ahora los permisos se ven bastante diferentes:
$ getfacl dir1/ file1
# file: dir1/
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
Y ahora nuestro directorio recién creado recogerá estos permisos "predeterminados":
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
Tener estos permisos en su lugar dir2
ahora también aplicará estos permisos en los archivos dir2
:
$ touch dir2/fileA
$ getfacl dir2/fileA
# file: dir2/fileA
# owner: saml
# group: saml
user::rw-
user:saml:rwx #effective:rw-
user:samtest:rwx #effective:rw-
group::rwx #effective:rw-
mask::rw-
other::r--
app/cache
que contiene un directorio llamadodev
, el primer comando se aplicará a eso, pero no el segundo? ¿Y si luego se agrega otro directorio (por ejemploprod
), el segundo comando establecerá los permisos? Si este no es el caso, ¿debería poder omitir el segundo comando?-R
es un comando recursivo, por lo que se aplican los permisos. Los-d
guardias si alguien creara un directorio o moviera algún directorio al árbol más adelante para que también se aplicara esta ACL.