web-dev-qa-db-fra.com

Question sur les autorisations rsync - les perms de destination ne s'appliquent pas correctement

C'est ce que j'essaye de faire:

rsync -rvl --chmod=ug=rwX,o=rX test /var/www

et après l'avoir fait, voici les résultats que j'obtiens:

drwxr-xr-x

(En fait, c'est drwxr-sr-x, mais ce n'est probablement pas important ... n'est-ce pas?)

Ce n'est évidemment pas ce que je veux. Je veux que le groupe ait des autorisations d'écriture, mais pour une raison quelconque, la commande rsync ne les définit pas.

Quelqu'un a des idées pourquoi pas? Y a-t-il une erreur dans ma syntaxe? Si cela est utile, je transfère d'OSX vers Linux (Debian).

pdate: Aussi, si cela est utile, quand j'entre umask, j'obtiens 0002. Ce n'est donc pas le problème.

21
Philip Walton

--chmod remplace les autorisations latérales envoi, mais si vous ne spécifiez pas -p ou --perms ainsi, les valeurs par défaut de destination sont utilisées indépendamment (c'est-à-dire --chmod est ignoré).

De man 1 rsync :

- chmod

Cette option indique à rsync d'appliquer une ou plusieurs chaînes "chmod" séparées par des virgules à l'autorisation des fichiers dans le transfert. La valeur résultante est traitée comme s'il s'agissait des autorisations fournies par le côté expéditeur pour le fichier, ce qui signifie que cette option peut sembler n'avoir aucun effet sur les fichiers existants si --perms n'est pas activé .

33
SimonJ

Vous devez utiliser --chmod avec -p options, comme ceci:

$ rsync -avz --chmod=o-rwx -p tata/ tata2/

Et voici un test complet:

Créer un fichier dans un dossier

$ mkdir tata
$ mkdir tata2
$ cd tata
$ touch tyoto
$ touch tiuti

Les perms par défaut sont: u=rw, g=r, o=r

$ ls -l 
total 0
-rw-r--r-- 1 romain users 0 fév 16 11:48 tiuti
-rw-r--r-- 1 romain users 0 fév 16 11:48 tyoto

Essayez une rsync sans paramètres

$ cd ..
$ rsync -avz tata/ tata2/

Les perms de destination sont les mêmes que les fichiers source

$ ls -l tata2
total 0
-rw-r--r-- 1 romain users 0 fév 16 11:48 tiuti
-rw-r--r-- 1 romain users 0 fév 16 11:48 tyoto

Spécifiez les options rsync --chmod=o-rwx -p

$ rsync -avz --chmod=o-rwx -p tata/ tata2/
$ ls -l tata2
total 0
-rw-r----- 1 romain users 0 fév 16 11:48 tiuti
-rw-r----- 1 romain users 0 fév 16 11:48 tyoto

Et maintenant vos permanentes sont ok.

18
Romain

Je pense que vous devez ajouter --perms (alias -p). Citant la page de manuel:

Lorsque cette option est désactivée, les autorisations sont définies comme suit:

...

Les nouveaux fichiers obtiennent leurs bits d'autorisation "normaux" définis sur les autorisations du fichier source masquées par les autorisations par défaut du répertoire de réception (soit l'umask du processus de réception, soit les autorisations spécifiées via l'ACL par défaut du répertoire de destination), et leurs bits d'autorisation spéciaux désactivés sauf dans le cas où un nouveau répertoire hérite d'un bit setgid de son répertoire parent.

Je soupçonne que votre système de destination a un umask typique comme 022 qui empêche le bit d'écriture de groupe d'être défini par rsync. Malheureusement --chmod ne mentionne pas comment l'umask s'applique ou ne s'applique pas.

5
Ben Jackson