Comment utiliser chmod sur un Mac pour que les nouveaux fichiers héritent des autorisations du répertoire parent?

23

Je suis sur Mac. Je veux que tous les nouveaux fichiers / dossiers créés dans un dossier spécifique aient les mêmes autorisations (pas de groupe, c'est déjà pris en charge) que celles du répertoire parent. Sous Linux, j'utiliserais normalement setfacl, mais il semble que chmod sur Mac puisse faire ce que je recherche. J'ai lu la page de manuel de chmod mais je n'arrive toujours pas à comprendre comment formater correctement la commande pour obtenir ce que je veux.

Jeremy Hicks
la source
Je veux que les nouveaux fichiers / dossiers soient lisibles et inscriptibles en groupe.

Réponses:

33

Tout d'abord, un peu de contexte pour expliquer ce qui se passe: les fichiers sous OS X peuvent avoir deux types de paramètres d'autorisation très différents: POSIX et ACL.

Les fichiers ont toujours (enfin, presque toujours) des autorisations POSIX appliquées, comprenant un propriétaire, un groupe et d'autres (avec une combinaison de lecture, d'écriture et d'exécution pour chacun d'entre eux). Il n'y a aucun moyen de contrôler l'héritage des autorisations POSIX: les nouveaux éléments appartiennent toujours à l'utilisateur qui les a créés, l'affectation de groupe est héritée du dossier dans lequel ils se trouvent et l'accès est déterminé par l'umask (qui est à peu près toujours: propriétaire obtient un accès complet, groupe et autres en lecture seule + exécution pour les dossiers). Les autorisations POSIX ne fonctionneront donc pas pour ce que vous essayez de faire.

Les fichiers peuvent également avoir une liste de contrôle d'accès (ACL) appliquée. Il s'agit d'une liste d'entrées de contrôle d'accès (ACE), dont chacune s'applique à un utilisateur ou à un groupe, spécifie les types d'accès (en détail), s'ils sont autorisés ou refusés, et si l'ACE doit également être copié dans les éléments créés dans le dossier. Ce dernier morceau est la partie qui rend cela utile pour vous; vous devez créer un ACE sur le dossier qui spécifie le groupe souhaité, les types d'accès souhaités et l'héritage complet.

chmod sur OS X peut manipuler les ACE avec les options d'autorisations + a, -a, etc. Si je comprends ce que vous voulez, vous utiliseriez ceci (avec le nom de votre groupe et le chemin de dossier substitué) pour créer l'ACE:

chmod +a "group:examplegroup allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" /path/to/folder

Notez que l'héritage n'est pas "actif", c'est-à-dire qu'il ne s'applique pas aux éléments créés avant que vous n'assigniez l'ACE, et qu'il ne s'applique pas aux éléments créés ailleurs et ensuite déplacés dans le dossier. Vous pouvez l'appliquer au contenu existant en utilisant -R ( chmod -R +a ...). Je ne connais aucun moyen (sauf les outils d'administration du serveur d'Apple) de forcer l'héritage aux éléments déplacés dans le dossier.

Gordon Davisson
la source
Merci pour l'excellente explication. Je l'ai juste essayé cependant et il vient de créer un nouveau fichier avec des autorisations de lecture / écriture utilisateur, tout le monde en lecture. Le dossier parent (extérieur) est défini sur 775 autorisations avec mon utilisateur (jhicks) en tant que propriétaire et _www en tant que groupe. Je me suis ajouté au groupe _www. drwxrwxr-x + 13 jhicks _www 442B 16 nov 09:47 en extérieur J'ai exécuté votre commande comme suit: chmod + a "group: _www allow list, add_file, search, add_subdirectory, delete_child, readattr, writeattr, readextattr, writeextattr, readsecurity, file_inherit directory_inherit "outdoors
Jeremy Hicks
ls -laffiche uniquement les autorisations POSIX (bien que le "+" après les autorisations indique la présence d'une ACL). Utilisez également ls -lepour afficher les ACL.
Gordon Davisson,
Si le nom de groupe contient un espace, vous pouvez utiliser: comme délimiteur. Par exemple, "groupe: mon groupe avec un espace: permettre"
Doug Richardson
chmod +a ...J'ai suivi la commande, puis j'ai créé un abc.txt dans le dossier. Basculé vers un autre utilisateur et édité avec TextEdit, le fichier est indiqué comme verrouillé et n'est pas modifiable.
ohho
J'ai joué avec ça, je pense que vous forcez l'héritage avec + ai
Robin
4

Essayez d'ajouter -Rà la commande de @ gordon, comme ceci:

chmod -R +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" outdoors

L' -Roption (comme indiqué ici ):

Recurse: modifiez le mode des hiérarchies de fichiers enracinées dans les fichiers au lieu des seuls fichiers eux-mêmes.

La modification des hiérarchies de fichiers semble être ce que vous recherchez (pour les nouveaux fichiers, répertoires, etc.).

Vous pouvez également consulter cet article Apple.SE , qui couvre une situation quelque peu similaire à la vôtre (sauf en ce qui concerne un répertoire partagé), qui nécessitait un sudoclou sur le devant.

JW8
la source
4

Ce (-R) n'est pas ce que la plupart des gens cherchent à faire; la plupart du temps, ils préféreraient changer l'ACL sur le répertoire le plus haut et faire quelque chose de magique pour forcer tous les objets contenus à hériter des drapeaux selon l'ACL qu'ils ont spécifié à la racine de cette sous-arborescence. Ceci est beaucoup plus élégant car les ACL sur les objets trieront ces ACE hérités selon la stratégie.

Et oui, j'ai dû écrire un script python pour ce faire, je n'ai rien trouvé non plus.

nez
la source
2
Aimez-vous partager (par exemple sur une idée ? Si cela ne vous dérange pas, je pense que c'était un beau geste.
myhd
1

chmod + ai, i = hérite des règles acl

zaonline
la source
0

Sur un Mac, essayez d'utiliser PathFinder , il est facile de définir ACL et POSIX. Si vous hébergez WordPress sur un serveur Mac, vous devrez également définir define('FS_METHOD', 'direct');le fichier wp-config.php afin que l'installation des plugins et la mise à niveau ne vous demandent pas de détails FTP.

Donc, fondamentalement, vous conservez les autorisations POSIX par défaut et ajoutez l'utilisateur _www (pas le groupe) à ACL, puis cliquez sur Propager l'autorisation dans la fenêtre ACL.

Max
la source