La première commande modifiera les autorisations de tous les fichiers / répertoires préexistants. La -d
deuxième commande est essentielle pour définir les autorisations par défaut à l'avenir pour tous les répertoires, ce qui à son tour fournira un ensemble par défaut d'ACL pour tous les fichiers de ces répertoires.
REMARQUE: que dans les deux cas, les commandes s'exécuteront récursivement via le -R
commutateur.
Concernant le -d
switch, depuis la setfacl
page de manuel:
-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).
Cet extrait l'explique aussi assez bien:
Il existe deux types d'ACL: les ACL d'accès et les ACL par défaut. Une liste de contrôle d'accès est la liste de contrôle d'accès pour un fichier ou un répertoire spécifique. Une ACL par défaut ne peut être associée qu'à un répertoire; si un fichier dans le répertoire n'a pas de liste de contrôle d'accès, il utilise les règles de la liste de contrôle d'accès par défaut pour le répertoire. Les listes de contrôle d'accès par défaut sont facultatives.
Source: 8.2. Définition des listes de contrôle d'accès .
Exemple
Disons que j'ai cette structure de répertoires.
$ tree
.
|-- dir1
| |-- dirA
| | `-- file1
| `-- fileA
`-- file1
2 directories, 3 files
Définissons maintenant les autorisations à l'aide de la première setfacl
commande de votre question:
$ setfacl -R -m u:saml:rwx -m u:samtest:rwX .
Ce qui se traduit par ce qui suit:
$ 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--
Sans la -dR
commande exécutée ici, les nouveaux répertoires ne seraient pas couverts par vos ACL:
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
group::rwx
other::r-x
Mais si nous supprimons ce répertoire et exécutons la setfacl -dR ...
commande et répétons cette opération ci-dessus:
$ rmdir dir2
$ setfacl -dR -m u:saml:rwx -m u:samtest:rwX .
Maintenant, les autorisations sont très différentes:
$ 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--
Et maintenant, notre répertoire nouvellement créé récupérera ces autorisations "par défaut":
$ 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
Le fait d'avoir ces autorisations en place le dir2
fera désormais appliquer ces autorisations sur les fichiers 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
qui contient un répertoire appelédev
, la première commande sera appliquée à cela, mais pas la seconde? Et si plus tard un autre répertoire est ajouté (par exempleprod
), la deuxième commande définira les autorisations? Si ce n'est pas le cas, je devrais pouvoir sauter la deuxième commande?-R
s'agit d'une commande récursive, donc les autorisations s'appliquent. Les-d
gardes si quelqu'un devait créer un répertoire ou déplacer un répertoire dans l'arborescence plus tard afin que cette ACL soit également appliquée.