setfacl: Ces deux commandes sont-elles les mêmes?

10

J'ai un script de déploiement (basé sur capifony) qui définit les autorisations sur des serveurs spécifiques pour une installation Symfony2. Il contient les deux commandes suivantes pour ce faire pour plusieurs répertoires:

setfacl -R -m u:www-data:rwx -m u:`whoami`:rwX app/cache
setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwX app/cache

Ces deux commandes sont sur le site Symfony2 comme un moyen de corriger les autorisations, cependant, elles me semblaient étonnamment similaires. J'ai donc jeté un œil aux pages de manuel setfaclet, d'après ce que j'ai pu comprendre, la deuxième commande fait exactement ce que la première fait avec une option supplémentaire (que je ne comprends pas très bien). Ma question est, mon hypothèse est-elle correcte? Si oui, cela aurait-il le même effet si je supprimais la première commande?

Hosh Sadiq
la source

Réponses:

15

La première commande modifiera les autorisations de tous les fichiers / répertoires préexistants. La -ddeuxiè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 -Rcommutateur.

Concernant le -dswitch, depuis la setfaclpage 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 setfaclcommande 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 -dRcommande 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 dir2fera 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--
slm
la source
Ah, juste pour confirmer, vous voulez dire que si nous avons le répertoire app/cachequi 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 exemple prod), la deuxième commande définira les autorisations? Si ce n'est pas le cas, je devrais pouvoir sauter la deuxième commande?
Hosh Sadiq
1
@HoshSadiq - non, il -Rs'agit d'une commande récursive, donc les autorisations s'appliquent. Les -dgardes 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.
slm
C'est génial! Rend les choses beaucoup plus claires :) Merci!
Hosh Sadiq