J'ai des ACL définies sur un répertoire comme suit:
# owner: root
# group: root
user::rwx
group::r--
mask::r-x
other::r--
default:user::r--
default:group::r--
default:mask::r-x
default:other::r--
J'aimerais que tous les nouveaux fichiers créés dans ce dossier soient u: apache: r-- et tous les nouveaux répertoires soient u: apache: rx. Comment spécifier cette intention à l'aide des ACL?
J'ai essayé le -dm u:apache:rX
et ça ne semble pas faire autre chose que justerx
overt htdocs # getfacl .
# file: .
# owner: root
# group: root
user::rwx
user:apache:r--
group::r--
mask::r-x
other::r--
default:user::r--
default:user:apache:r--
default:group::r--
default:mask::r--
default:other::r--
overt htdocs # setfacl -dm u:apache:rx .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x #effective:r--
group::r--
mask::r--
other::r--
overt htdocs # rm blah.txt
overt htdocs # setfacl -dm u:apache:rX .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x #effective:r--
group::r--
mask::r--
other::r--
L'autorisation X majuscule ne semble utile que pour définir les autorisations actuelles, pas pour définir les autorisations par défaut:
overt htdocs # setfacl -x u:apache blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
group::r--
mask::r--
other::r--
overt htdocs # setfacl -m u:apache:rX blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r--
group::r--
mask::r--
other::r--
la source
#effective
texte! Merci pour l'explication de la façon dont les masques affectent les autorisations effectives.Malheureusement, il n'y a tout simplement aucun moyen de le faire avec les ACL Linux. Il est vrai que le masque semblera faire exactement ce que vous voulez, en ce qui concerne les autorisations effectives. Mais la prochaine fois que vous effectuerez une opération qui recalcule le masque de droits, bam , tous vos fichiers seront rendus exécutables.
Vous pourriez tout aussi bien vous résigner à vous attendre à ce que tous les fichiers d'une ACL soient exécutables. C'est vraiment juste une commodité plutôt qu'une fonctionnalité de sécurité, et tant que vous ne placez pas ces dossiers dans votre $ PATH, cela ne devrait pas être un problème. Si cela vous dérange toujours, le seul choix est de placer vos dossiers contrôlés par ACL sur un système de fichiers monté sans option d'exécution.
la source
-d (ou --default) est utilisé pour définir les valeurs par défaut sur le répertoire afin que les choses qui y sont créées héritent des perms (comme vous semblez le faire).
Voici un rapide aperçu. http://www.vanemery.com/Linux/ACL/linux-acl.html#default
Il n'est pas possible d'avoir des fichiers avec une valeur par défaut et les répertoires avec une valeur par défaut différente.
Vous pouvez exécuter un script à partir de cron qui fait un setfacl sur tous les répertoires chaque minute - bien que ce soit moins qu'idéal d'une solution.
trouver / chemin / vers / top / dir -type d -exec setfacl -dm u: apache: rx {} \;
ou
trouver / chemin / vers / haut / dir -type d | xargs setfacl -dm u: apache: rx
la source
Ce post sur les ACL et les masques m'a vraiment aidé à comprendre comment faire ce que je voulais et pourquoi.
La partie manquante de ma compréhension était que lors de la création d'un fichier, le noyau utilise un jeu d'autorisations par défaut 0666 et pour les nouveaux répertoires 0777. Par conséquent, les répertoires par défaut auront le bit d'exécution (traversée) défini.
Le masque ACL est essentiellement un moyen de définir un
umask
au niveau répertoire / fichier / utilisateur.la source