web-dev-qa-db-fra.com

Définition des différents acls sur les répertoires et les fichiers

Je souhaite configurer des autorisations par défaut pour un partage de fichier afin que tout le monde puisse rwx tous les répertoires et que tous les fichiers nouvellement créés sont rw.

Toute personne qui accède à cette action est dans le même groupe, ce n'est donc pas une préoccupation.

J'ai cherché à faire cela via ACLS sans changer tous les masks des utilisateurs et tels. Voici mes invocations actuelles:

setfacl -Rdm g:mygroup:rwx share_name
setfacl -Rm g:mygroup:rwx share_name

Mon problème est que pendant que je veux que tous les nouveaux créés sous-répertoires soit rwx, je souhaite seulement que nouvellement créé fichiers soit rw.

Quelqu'un a-t-il une meilleure méthode pour atteindre mon résultat final souhaité? Existe-t-il un moyen de définir des ACL sur des répertoires séparément des fichiers, dans une veine similaire à chmod +x vs. chmod +X?

Merci

15
durandal

Pour les futurs lecteurs, utiliser setfacl sur fichiers/dossiers existants sans ajouter le bit exécutable à vos fichiers, la solution est cette partie de @ Réponse de Mikel :

Ma version de SetFacl permet X exactement comme vous le souhaitez, par exemple:

setfacl g:mygroup:rwX

Extraits pertinents de la setfacl documentation :

Le champ Perms est une combinaison de caractères indiquant les autorisations: lecture (R), écrire (w), exécuter (x), n'exécute que si le fichier est un répertoire ou a déjà exécuté la permission pour certains utilisateurs (x) .

5
Erik Koopmans

Aussi loin que je comprenne Linux ACLS, setfacl -Rdm g:mygroup:rwx share_name fait exactement ce que vous voulez. Expérience:

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

Ensuite, comme un utilisateur différent du groupe mygroup:

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

Que se passe-t-il?

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

L'ACL effectif pour mygroup est le résultat de l'ACL_GROUP Entrée pour mygroup (rwx) avec l'entrée ACL_MASK (rw-).

La page ACL (5) Man explique le calcul de cela sous "algorithmes de contrôle d'accès". Cela n'explique pas comment ACL_MASK Les entrées sont générées, mais dans la pratique, la bonne chose semble se produire.