Appliquer droits du dossier parents à chaque nouveau dossier

Catskan

Membre confirmé
18 Juin 2011
19
0
32
Bonjour,

Je fais appel à vous car je suis un peu perdu.

Un de mes appareils de streaming doit enregistrer, le flux sur un de mes serveurs XServe.

Il créait donc un nouveau dossier "Stream jj/mm/aaaa" à l'emplacement "smb://xxx.xxx.xxx.xxx/Cours/Salle1" (Serveur 1)
Jusque là, tout fonctionne.

Je dois accéder à ce serveur (Serveur 1) via ftp. L'accès se fait bien, mais par contre, quand je veux entrer dans un dossier crée par le streaming, j'ai "Permission Denied".
Je propage donc les droits du dossier parents à chaque fois qu'un nouveau dossier se créait, et ça fonctionne.

Je voudrai donc savoir, si il n'y aurait pas un moyen d'automatiser cela ?

J'ai essayé de faire avec des exemples d'ACL mais ça marche pas.

En gros, je voudrai que chaque nouveau dossier/fichier prenne automatiquement les droits du dossier parent.

Je vous remercie par avance pour votre aide :)
 
[petite remarque : je mettrais plutôt la date à l'anglo-saxonne : YYYYMMDD, pour que l'ordre d'affichage alphabétique soit aussi l'ordre chronologique]

Je ne sais pas quelle est la taille de ton arborescence, mais tu peux, pour faire vraiment au plus simple, créer un script qui change les droits comme tu le souhaites et faire tourner ce script toutes les n minutes systématiquement, à l'aide de la commande cron. C'est un peu rustique et brutal mais ça fera le boulot régulièrement et assurément.

De mémoire : les ACL implémentées par Apple ne connaissent pas l'héritage (je vérifierai ce soir). Donc on peut mettre de côté cette solution.

Il devrait être possible de faire quelque chose avec le lanceur "universel", launchd. Ça demande un peu d'investigation (ce soir, toujours... :)).

Enfin, pour revenir au coeur du problème : les dossiers sont créés par un utilisateur défini dans la configuration de Samba. Il faudrait donc s'attacher à voir comment, en modifiant soit la configuration de Samba (piste à poursuivre) soit celle de l'utilisateur (mais là, je pense que c'est une impasse), on fait en sorte de créer des dossiers en drwxrwx--- ou drwxrwxrwx etc. Faut creuser ce point-là.

Question sécurité, c'est un peu moyen, mais bon...

PS : J'oubliais : quel est le système concerné ? Et la version de Samba ?
 
[Rappel liminaire : une ACL (Access Control List) est une liste ; elle contient une ou plusieurs ACE (Access Control Entry).]

J'ai bien fait de laisser passer un petit moment et de rechercher et tester : les ACL de OS X permettent bien l'héritage. Mais pas un héritage dynamique et rétroactif (d'où ma confusion).
C'est-à-dire : si je mets des ACE au dossier tmp5, les éléments qu'il contient ne seront pas modifiés. De même, tout dossier créé ailleurs puis déplacé dans ce dossier ne se verra pas attribuer ces ACE.

Ces ACE ne sont héritées que lorsque la création a lieu dans le dossier et après avoir défini l'ACE.

Dans ton cas, tu devrais pouvoir t'en tirer en créant un groupe dans lequel sont inclus les utilisateurs se connectant en FTP. Puis définir une ACE sur le dossier racine de tes téléchargements autorisant les droits qui t'intéressent. Tu trouveras ici une manière de procéder.

J'ai essayé cette méthode et l'héritage marche bien. J'ai créé pour l'occasion un groupe TestACL. Puis j'ai créé une ACE pour le dossier tmp5 :
Bloc de code:
chmod +a "group:TestACL allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" tmp5
D'où :
Bloc de code:
ls -lde tmp5
drwxrwxrwx+ 4 myuser  staff  136 Apr 14 21:43 tmp5
0: group:TestACL allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit
puis j'ai créé un sous-dossier :
Bloc de code:
mkdir tmp5/brol1
Et il avait bien l'ACE espérée.
Bloc de code:
ls -le tmp5
total 0
drwxr-xr-x  2 myuser  staff  68 Apr 14 21:39 brol1
drwxr-xr-x+ 2 myuser  staff  68 Apr 14 21:43 brol2
0: group:TestACL inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit
On voit bien que brol1, créé auparavant, n'a pas pris d'ACE.

J'ai ensuite poussé un peu plus loin en créant des sous-dossiers aux sous-dossiers :
Bloc de code:
mkdir tmp5/brol1/brol11
mkdir tmp5/brol2/brol21
Et le résultat en terme d'ACE :
Bloc de code:
ls -lde tmp5/*/*
drwxr-xr-x  2 myuser  staff  68 Apr 14 22:00 tmp5/brol1/brol11
drwxr-xr-x+ 2 myuser  staff  68 Apr 14 22:00 tmp5/brol2/brol21
0: group:TestACL inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit
On voit bien que, côté brol1, on continue sans ACE. Et que côté brol2, c'est bon : l'ACE est héritée à chaque niveau.
Cela devrait t'aider.

Bien entendu, il faut mettre exactement les droits qui t'intéressent ; je me suis contenté de vérifier le principe d'héritage sans me poser trop de question ;) Ici, il y a sans doute un peu trop de droits.
 
Merci pour tes recherches !

En fait j'ai crée un groupe "multicam" avec l'utilisateur du ftp (ftpmulticam) et l'utilisateur samba (smbmulticam).

Dans le module Server, le groupe "multicam" a bien la lecture/ecriture, mais bon, j'ai l'impression que c'est bancale les droits ne sont pas hérités.

J'ai connecté un lecteur réseau (smb) sur le système de streaming (sous win).
Le lecteur réseau pointe vers le dossier "Cours" du serveur et s'authentifie avec l'utilisateur "smbmulticam". (là ça fonctionne).

Mais c'est depuis l'utilisateur ftpmulticam que je n'ai pas accès aux nouveaux dossiers dans le dossier "Cours".

Ca a l'air de fonctionner avec ta méthode ! Je te remercie infiniement ! Par contre, les fichiers actuels ne prennent pas les ACE. Je peux entrer dans les nouveaux dossier (crées après avoir appliqués les ACE, mais les dossier déjà présent "permission denied". M'enfin, c'est pas grave, c'était que des tests :).
 
Pour ceux qui préexistaient au passage de la commande, il te suffit de leur appliquer la même commande.
Pour éviter de se répéter, tu peux même ajouter l'option "-R" à la commande et l'ACE sera créée récursivement dans tous les sous-dossiers du dossier indiqué.
 
Le -R ne fonctionne pas.

Quand je fais "chmod +a -R ...", j'ai comme retour : Unable to translate -R to a UID/GID ...
 
Parce qu'il faut indiquer -R avant la définition des droits, comme ceci, par exemple :
Bloc de code:
chmod -R a+rw brol