Re: Héritage des permissions et du propriétaire/groupe d'un …

Top Page

Reply to this message
Author: Marc TERRIER
Date:  
To: guilde
Subject: Re: Héritage des permissions et du propriétaire/groupe d'un fichier copié
Le 14/06/2012 22:48, Olivier Allard-Jacquin a écrit :
>     Bonsoir Marc,

>
> Le 14/06/2012 13:07, marc.terrier@??? a écrit :
>> Bonjour à tous,
>>
>> Y a-t-il un moyen, par une option de la commande "cp" ou par une propriété particulière du répertoire de destination, de
>> faire en sorte qu'un fichier copié dans un répertoire hérite automatiquement du propriétaire et des permissions associées
>> à ce répertoire cible ?
>>
>> De façon plus détaillée :
>>
>> Alice fait un "sudo su - bob", le temps de copier dans son répertoire personnel /home/Alice un fichier qui se
>> trouve chez Bob, qui appartient à Bob, et sur lequel elle n'a aucun droit, même pas en lecture :
>>
>>    Alice@machine:/home/Alice $ sudo su - bob
>>    Mot de passe de Alice :

>>
>>    bob@machine:/home/bob $ ls -l
>>    -rw-r----- 1 bob bobgroup 10503 dec 13  2011 tititoto

>>
>> Pour pouvoir copier le fichier tititoto dans /home/Alice, à un moment où elle a l'identité de Bob, Alice a donné
>> temporairement les droits d'écriture à tout le monde sur son propre répertoire home, avec un chmod 777 /home/Alice.
>>
>>    bob@machine:/home/bob $ ls -l
>>    -rw-r----- 1 bob bobgroup 10503 dec 13  2011 tititoto

>>
>>    bob@machine:/home/bob $ cp tititoto /home/Alice

>>
>>    bob@machine:/home/bob $ ls -l /home/Alice
>>    -rw-r----- 1 bob bobgroup 10503 jun 14 12:36 tititoto

>>
>> Inconvénient : après copie, le fichier appartient toujours à Bob, Alice ne fait toujours pas partie du group "bobgroup",
>> et ne peut donc pas consulter le contenu du fichier tititoto, alors même qu'elle vient de le copier chez elle. Elle peut
>> juste voir qu'il a bien été copié. Elle ne peut même pas faire un "chmod" dessus pour s'accorder les droits qui vont bien.
>> Il faut que ce soit Bob qui le fasse, et encore, ça ne marchera que tant qu'Alice aura laissé son répertoire /home/Alice
>> accessible en écriture à Bob. De plus, ça ne s'appliquera qu'à ce fichier-là. Si, à l'avenir, Alice veut refaire la même
>> copie avec un autre fichier tatatutu, le même problème se posera à nouveau.
>>
>> Merci d'avance de vos lumières.
>
>     1ère chose, ce n'est pas forcément une très bonne idée que de changer
> les droits d'accès en o+w pour /home/alice .

>
>     En fait, Bob n'a besoin que d'un o-r,o+x /home/alice, et d'un o+rwx
> /home/alice/share , afin de poser ses fichiers dans /home/alice/share

>
>     Exemple avec Bob=root et Alice=olivier

>     
> # mkdir /tmp/root/share
> # find /tmp/root/ -ls
>   76943    0 drwxr-xr-x   3 root     root    /tmp/root/
>   76962    0 drwxr-xr-x   2 root     root        /tmp/root/share
> # chmod o-r,o+x /tmp/root/
> # chmod a+w /tmp/root/share
> # find /tmp/root/ -ls
> find /tmp/root/ -ls
>   76943    0 drwxr-x--x   3 root     root        /tmp/root/
>   76962    0 drwxrwxrwx   2 root     root        /tmp/root/share

>
>     Enfin, tu peux utiliser un soft appelé "inotify", lancé par Bob, qui va
> se changer de changer les droits d'accès dans /home/alice/share, lorsque
> Bob écrit des fichiers.

>
>     Dans un "screen" lancé une fois pour toute par Bob, lance :

>
> inotifywait -mr --timefmt '%Y/%m/%d %H:%M:%S' --format '%T %w %f' -e
> close_write,moved_to /home/alice/share | while read Date Time Dir File;
> do chown alice:alice "$Dir/$File" ; echo "- $Date $Time ; done
>
>     Exemple avec ma machine :
> # touch /tmp/root/share/test-03
> # find /tmp/root/ -ls
>   76943    0 drwxr-x--x   3 root     root      /tmp/root/
>   76962    0 drwxrwxrwx   2 root     root      /tmp/root/share
>   83256    0 -rw-r--r--   1 olivier  olivier   /tmp/root/share/test-03
>   80268    0 -rw-r--r--   1 olivier  olivier   /tmp/root/share/test-02
>   71383    0 -rw-r--r--   1 olivier  olivier   /tmp/root/share/test-01

>
>     Bien que ce soit root qui ait écrit les fichiers, ils appartiennent à
> Olivier

>
>     Et le "screen" affiche en bonus un petit message de log :

>
> - 2012/06/14 22:44:04 : test-03
> - 2012/06/14 22:46:09 : test-01
> - 2012/06/14 22:46:11 : test-02
>
>     Cordialement,

>
>                             Olivier


Bonsoir Olivier,

Je croyais avoir clos ce fil de discussion en indiquant que
malheureusement, nous sommes très limités sur la machine en question
(pas root, notamment, et même pas d'accès direct : on est obligés de
demander par écrit à quelqu'un "tape telle commande, et dis-moi le
résultat"). Du coup, je n'avais pas vu que tu m'avais répondu.

Merci de cette réponse très détaillée, et très intéressante. Presque
parfaite : dans ton exemple, Bob=root, et tout marche bien. Par contre,
si j'essaye avec deux utilisateurs lambda, le chown lancé par
inotifywait, donc par Bob, sur un fichier qui vient d'être copié chez
Alice, échoue avec un "Opération non permise".

Sur la machine du boulot, où le besoin s'est fait sentir en premier, les
inotify-tools ne sont pas installés, et l'utilisateur qui m'avait posé
la question a laissé tomber, depuis.

Mais ta réponse me plaît quand même beaucoup, parce que ça me donne un
moyen élégant de surveiller les apparitions/modifications/suppressions
de fichiers dans une arborescence donnée, et de déclencher des actions
en conséquence. C'est un besoin que j'ai par ailleurs, sur une machine
où je n'ai pas de problèmes d'accès, et jusqu'ici, je faisais des ls -l
à intervalles réguliers, redirigés en alternance dans deux fichiers
texte, et je faisais des diff dessus pour voir ce qui avait changé. Ta
solution à toi, avec inotifywait, est quand même nettement mieux !

--
Marc TERRIER