29 votes

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

Sous MacOS. Je veux faire en sorte que tous les nouveaux fichiers/dossiers créés dans un dossier spécifique aient les mêmes autorisations (pas groupe, car cela est déjà pris en charge) que le répertoire parent.

Sous Linux, j'utiliserais normalement setfacl, mais il semble que chmod sur MacOS pourrait être capable de faire ce que je recherche. J'ai lu le manuel de chmod mais je n'arrive toujours pas à trouver comment formater correctement la commande pour obtenir ce que je veux.

41voto

Gordon Davisson Points 30215

Tout d'abord, un peu d'arrière-plan pour expliquer ce qui se passe: Les fichiers dans OS X peuvent avoir deux types de paramètres de permission assez différents appliqués à eux: POSIX et ACL.

Les fichiers ont toujours (enfin, presque toujours) des permissions POSIX appliquées, composées d'un propriétaire, d'un groupe et d'autres utilisateurs (avec une combinaison de lecture, d'écriture et d'exécution pour chacun). Il n'y a aucun moyen de contrôler l'héritage des autorisations POSIX: les nouveaux éléments sont toujours possédés par l'utilisateur qui les a créés, l'attribution au groupe est héritée du dossier dans lequel ils se trouvent, et l'accès est déterminé par l'umask (qui est pratiquement toujours: le propriétaire obtient un accès complet, le groupe et les autres ont seulement la lecture + l'exécution pour les dossiers). Ainsi, les autorisations POSIX ne fonctionneront 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), chacune appliquée à un utilisateur ou groupe, spécifiant les types d'accès (en détail), s'ils sont autorisés ou refusés, et si l'ACE doit également être copié aux éléments créés à l'intérieur du dossier. C'est cette dernière partie qui rend cela utile pour vous; vous devez créer un ACE sur le dossier qui spécifie le groupe que vous souhaitez, les types d'accès que vous souhaitez et un héritage complet.

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

chmod +a "groupe:examplegroup autoriser liste,ajouter_fichier,rechercher,ajouter_sous-dossier,supprimerenfant,lireattr,écrireattr,lireextattr,écrireextattr,lire sécurité,fichier_hériter,répertoire_hériter" /chemin/vers/dossier

Remarque: l'héritage n'est pas "en direct", c'est-à-dire:

  • il ne s'applique pas aux éléments créés avant que vous ayez attribué l'ACE
  • il ne s'applique pas aux éléments créés ailleurs puis déplacés dans le dossier.

Vous pouvez l'appliquer aux contenus existants en utilisant -R (c'est-à-dire: chmod -R +a ...). Je ne connais pas de moyen (sauf les outils d'administration de serveur d'Apple) pour forcer l'héritage aux éléments déplacés dans le dossier.

0 votes

Merci pour l'excellente explication. Je viens de l'essayer mais cela a toujours créé un nouveau fichier avec des autorisations de lecture/écriture pour l'utilisateur, et de lecture pour tout le monde. Le dossier parent (outdoors) est défini avec des autorisations 775 avec mon utilisateur (jhicks) comme propriétaire et _www comme groupe. Je me suis ajouté au groupe _www. drwxrwxr-x+ 13 jhicks _www 442B 16 nov. 09:47 outdoors J'ai exécuté votre commande comme suit : chmod +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,‌​writeattr,readextatt‌​r,writeextattr,reads‌​ecurity,file_inherit‌​,directory_inherit" outdoors

2 votes

ls -l ne montre que les autorisations POSIX (bien que le "+" après les autorisations indique qu'il y a un ACL présent). Utilisez ls -le pour afficher également les ACL.

0 votes

Si le nom du groupe contient un espace, vous pouvez utiliser : comme délimiteur. Par exemple, "groupe:mon groupe avec un espace:autoriser"

7voto

Jason Points 8799

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" extérieur

L'option -R va (comme indiqué ici) :

Répéter : Modifier le mode des hiérarchies de fichiers enracinées dans les fichiers au lieu de seulement les fichiers eux-mêmes.

Modifier les hiérarchies de fichiers semble être ce que vous cherchez (pour de nouveaux fichiers, répertoires, etc.).

Vous pouvez également consulter ce post Apple.SE, qui couvre une situation quelque peu similaire à la vôtre (sauf concernant un répertoire partagé), qui nécessitait un sudo ajouté au début.

6voto

matja Points 131

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

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

2 votes

Souhaitez-vous partager (par exemple sur un gist) ? Si vous ne voyez pas d'inconvénient, je pense que c'était un geste bienveillant.

1voto

Max Points 142

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

En gros, vous gardez les autorisations POSIX par défaut, et ajoutez l'utilisateur _www (pas le groupe) aux ACL, puis cliquez sur Propager les autorisations dans la fenêtre ACL.

1voto

zaonline Points 111

Chmod +ai, i = hériter des règles de contrôle d'accès (ACL)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X