# Appliquer droits du dossier parents à chaque nouveau dossier



## Catskan (14 Avril 2016)

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


----------



## bompi (14 Avril 2016)

[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 ?


----------



## bompi (14 Avril 2016)

[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* :

```
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ù :

```
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 :

```
mkdir tmp5/brol1
```
Et il avait bien l'ACE espérée.

```
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 :

```
mkdir tmp5/brol1/brol11
mkdir tmp5/brol2/brol21
```
Et le résultat en terme d'ACE :

```
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.


----------



## Catskan (15 Avril 2016)

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 .


----------



## bompi (15 Avril 2016)

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é.


----------



## Catskan (18 Avril 2016)

Le -R ne fonctionne pas.

Quand je fais "chmod +a -R ...", j'ai comme retour : Unable to translate -R to a UID/GID ...


----------



## bompi (18 Avril 2016)

Parce qu'il faut indiquer *-R* avant la définition des droits, comme ceci, par exemple :

```
chmod -R a+rw brol
```


----------

