autorisations de fichier rsync sur windows

32

J'ai un service rsync qui synchronise les fichiers d'une machine distante à une machine qui les dépose sur un lecteur réseau.

J'ai besoin des fichiers copiés pour prendre les autorisations natives du dossier de destination.

Le processus de synchronisation fonctionne correctement, mais une fois terminé, je ne peux pas accéder à certains dossiers - Autorisation refusée.

Je suis connecté en tant qu'administrateur de domaine; cela ne me permettra pas non plus de modifier les autorisations sur lesdits dossiers. Ce qui donne?

exécuter la commande:

rsync.exe  -v -rlt -z --delete "src_path" "dst_path"
avguchenko
la source
quelle commande utilisez-vous actuellement pour synchroniser?
John T

Réponses:

24

(depuis http://www.samba.org/ftp/rsync/rsync.html )

En résumé: pour donner aux fichiers de destination (anciens et nouveaux) les autorisations source, utilisez --perms.

Pour donner aux nouveaux fichiers les autorisations de destination par défaut (tout en laissant les fichiers existants inchangés), assurez-vous que l' --permsoption est désactivée et utilisez --chmod=ugo=rwX(ce qui garantit que tous les bits non masqués sont activés).

Si vous souhaitez faciliter la saisie de ce dernier comportement, vous pouvez lui définir un alias popt, par exemple en mettant cette ligne dans le fichier ~ / .popt (ce qui suit définit l'option -Z et inclut --no- g pour utiliser le groupe par défaut du répertoire de destination):

    rsync alias -Z --no-p --no-g --chmod=ugo=rwX
avguchenko
la source
Merci beaucoup. Je ne me souvenais pas des bons drapeaux à utiliser ...
Vokuhila-Oliba
2
Ceci est pertinent pour rsync sous Linux, mais ne résout pas toujours le problème lors de la rsync sur un lecteur Windows, ce que demande le message d'origine.
Simon East
18

La sécurité "posix" de Cygwin m'a causé beaucoup de problèmes avec les autorisations de fichiers Windows NTFS - même --no-permsavec rsync.

J'ai constaté que les fichiers / dossiers nouvellement créés n'héritent pas correctement des autorisations par défaut, mais chaque fichier / dossier se retrouve avec de nombreuses <not inherited>entrées dans l'onglet de sécurité avancée des fichiers / dossiers Windows. (Et ce problème n'est pas uniquement lié à rsync).

J'ai trouvé ce post et ce lien très utiles pour résoudre ces problèmes en utilisant l' noacloption dans le /etc/fstabfichier de cygwin . L'inconvénient de cette solution est que cygwin perd la possibilité de définir des autorisations de fichier / dossier, mais dans de nombreux cas, ce n'est pas important.

(Sur cette rubrique, vous trouverez probablement des références à la définition de la variable d'environnement CYGWIN = NONTSEC, mais cela concerne cygwin v1.5 et ne fonctionne pas dans cygwin v1.7.)

miking
la source
La modification du fichier / etc / fstab l'a corrigé pour moi. Pour ce faire, j'ai dû utiliser rsync dans cygwin au lieu d'un autre déploiement tel que DeltaCopy.
Matt Connolly
Si vous utilisez simplement le package cwrsync (et non cygwin) où placez-vous le fichier fstab?
Simon East
Je n'utilise pas cygwin. Je prends un lecteur NTFS ordinaire, monté sur OS X, et y rsync. Ensuite, ces fichiers dans Windows ont complètement vissé les autorisations. Vous cherchez une solution.
Steven Lu
il semble que j'utilise la méthode «risquée» de montage de NTFS sur macOS à l'aide du pilote intégré, qui est censé être beaucoup moins stable que les pilotes paragon / tuxera et FUSE. Alors gardez cela à l'esprit si vous êtes dans le même bateau
Steven Lu
8

Sur Windows avec DeltaCopy, je pourrais le faire fonctionner avec:

rsync --perms --chmod=a=rw,Da+x ...

Cela a fonctionné même avec --recursive

Wernight
la source
Cela a surtout fonctionné, cependant, j'ai dû changer l'option --chmod pour inclure a = rwx afin que les fichiers batch, etc. s'exécutent correctement.
Taylor Gerring
1
C'est la seule option qui a fonctionné pour moi. J'ai essayé le --no-perms suggéré ci-dessus et le fstab en vain. Celui-ci ne m'a donné que quelques autorisations <non héritées>, qui étaient en quelque sorte les autorisations que je voulais et n'incluaient aucune autorisation Refuser pour l'utilisateur exécutant. Merci!
AronVanAmmers
DeltaCopy contient également un exécutable chmod qui peut fixer les autorisations par la suite, par exemple chmod -R 777 / cygdrive / g
jnnnnn
1
--perms est ce qui me manquait, pour résoudre la copie en tant que problème en lecture seule.
Tyler S. Loeper
1

rsync, au moins sur Cygwin a le commutateur suivant:

-A, --acls préserve les ACL (implique --perms)

Ma version Cygwin est:

CYGWIN_NT-6.3 1.7.29 (0.272 / 5/3) 2014-04-07 13:46 x86_64 Cygwin

J'espère que cela t'aides!

Vipul
la source
1
Bienvenue sur Super User! Bien que cela puisse théoriquement répondre à la question, dans un souci d'amélioration, il serait préférable d'inclure des détails sur la façon dont cela répond à la question (citant une source pour sauvegarder votre réclamation est un plus).
G-Man dit `` Réinstalle Monica '' le
1

La réponse la mieux notée ne fonctionne que si vous utilisez rsync sur ssh dans Windows. Si vous utilisez le démon cygwin rsync, simplement utiliser noacl dans / etc / fstab n'aide pas, pour une raison quelconque, il n'honore pas l'héritage même si vous vous débarrassez de user et essayez noacl, surchargez, etc. Cela semble se produire si vous effectuez une rsynchronisation sur un lecteur de niveau supérieur et utilisez path = / cygdrive / any dans /etc/rsyncd.conf. Au lieu de cela, vous devez créer un point de montage séparé dans / etc / fstab et l'utiliser à la place dans votre rsyncd.conf:

D:\     /d_drive  ntfs    binary,posix=0,noacl,user,override      0 0

dans /etc/rsyncd.conf, vous auriez quelque chose comme ceci:

use chroot = yes

[d_drive]
path = /d_drive
comment = d_drive
auth users = someUser
secrets file = /etc/rsyncd.secrets
read only = false
write only = false
list = false
uid = someUser

Ensuite, j'ai dû redémarrer le système Windows, le simple fait de redémarrer le service rsync ne semblait pas aider, il continuait de lancer des erreurs chroot et chdir (même si / d_drive était monté et utilisait chroot = false et je pouvais y écrire). Ensuite, lorsque vous rsync dans le système Windows, utilisez:

cd /local/path/to/copy
rsync -rltD --no-p --no-g --no-o  ./ rsync://someUser@localhost:remotePort/d_drive/
sabujp
la source
1

Dans le passé, je viens de réattribuer les autorisations dans Windows à mon utilisateur actuel par la suite en utilisant takeownune invite de commande élevée comme:

takeown /f <NameOfFolder> /r /d Y

Bien sûr, si vous avez utilisé les bons rsyncindicateurs en premier lieu, cela n'est pas nécessaire, mais si vous ne vouliez pas réexécuter rsyncpour les fichiers que vous avez déjà copiés, je le recommanderais.

CodingLumis
la source
1
Bienvenue sur Super User! Veuillez relire attentivement la question. Votre réponse ne répond pas à la question d'origine.
DavidPostill
Étant donné que la question est "qu'est-ce qui donne?" Je dirais que sa réponse n'est même pas une solution mais une explication, donc la plupart des réponses ici ne répondent pas à la question. C'est encore un ajout utile et contextuellement approprié au problème, mais je peux le déplacer vers un commentaire si cela est plus approprié.
CodingLumis
Oh, attendez, je ne peux pas ajouter de commentaires car je n'ai pas une réputation de 50+ donc cela devra rester ici.
CodingLumis
correct rsync flags> et quels seraient-ils?
oldmud0
@ oldmud0 voir les réponses qui ont précédé la mienne pour les combinaisons appropriées d'indicateurs qui définissent les autorisations lors de la copie. Ma solution est idéale pour ceux qui ont déjà copié les fichiers et ne veulent pas les supprimer et les copier à nouveau pour s'assurer que les autorisations sont correctes.
CodingLumis
0

J'ai eu ce problème avec rsnapshot, qui utilise rsync pour la sauvegarde. J'ai annulé la suppression --relativede rsync_long_args. Après ce dossier cpour le disque lui-même avec des autorisations étranges ne crée pas.

utilisateur3132194
la source