J'ai un service rsync qui synchronise les fichiers d'une machine distante vers une machine qui les dépose sur un lecteur réseau.
J'ai besoin des fichiers copiés pour prendre en charge 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 - Permission refusée.
Je suis connecté en tant qu'administrateur de domaine; cela ne me permettra pas non plus de modifier les permissions sur ces dossiers. Ce qui donne?
commande d'exécution:
rsync.exe -v -rlt -z --delete "src_path" "dst_path"
(from http://www.samba.org/ftp/rsync/rsync.html )
En résumé: pour attribuer les autorisations source aux fichiers de destination (anciens et nouveaux), utilisez --perms
.
Pour attribuer aux autorisations sur les nouveaux fichiers les autorisations par défaut de la destination (tout en laissant les fichiers existants inchangés), assurez-vous que l'option --perms
est désactivée et utilisez --chmod=ugo=rwX
(pour vous assurer que tous les bits non masqués sont activés).
Si vous souhaitez faciliter la saisie de ce dernier comportement, vous pouvez définir un alias popt, tel que l'insertion de 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
La sécurité "posix" de Cygwin m'a causé beaucoup de problèmes avec les autorisations de fichiers Windows NTFS - même en utilisant --no-perms
avec 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 termine avec de nombreuses entrées <not inherited>
dans l'onglet Sécurité avancée des fichiers/dossiers de Windows. (Et ce problème n'est pas uniquement lié à rsync).
J'ai trouvé cet article lié et ce lien à la fois très utile pour savoir comment résolvez ces problèmes en utilisant l'option noacl
dans le fichier /etc/fstab
de cygwin. L'inconvénient de cette solution est que cygwin perd la possibilité de définir des autorisations de fichiers/dossiers, mais dans de nombreux cas, cela n'a pas d'importance.
(Dans Google, vous trouverez probablement des références à la définition de la variable d'environnement CYGWIN = NONTSEC, mais cela s'applique à cygwin v1.5 et ne fonctionne pas à partir de cygwin v1.7.)
Sous Windows avec DeltaCopy , je pouvais le faire fonctionner avec:
rsync --perms --chmod=a=rw,Da+x ...
Cela a fonctionné même avec --recursive
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, l'utilisation de noacl dans/etc/fstab n'aide pas, pour une raison quelconque, elle n'honore pas l'héritage, même si vous supprimez l'utilisateur et essayez noacl, le remplacement, etc. Cela semble arriver si vous rsynchronisez un lecteur de niveau supérieur et utilisez path =/cygdrive/que ce soit dans /etc/rsyncd.conf. Au lieu de cela, vous devez créer un point de montage séparé dans/etc/fstab et l’utiliser dans votre fichier rsyncd.conf:
D:\ /d_drive ntfs binary,posix=0,noacl,user,override 0 0
dans /etc/rsyncd.conf, vous obtiendrez 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, je devais redémarrer le système Windows. Le simple redémarrage du service rsync ne semblait pas suffire à résoudre le problème. Il continuait de générer des erreurs chroot et chdir (même si/d_drive était monté et utilisait chroot = false pour que je puisse 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/
rsync, au moins sur Cygwin a le commutateur suivant:
-A, --acls préserve les ACL (implique --permes)
Ma version de 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!
Dans le passé, je venais de réaffecter les autorisations sous Windows à mon utilisateur actuel après utilisation de takeown
à une commande élevée, avec l'invite suivante:
takeown /f <NameOfFolder> /r /d Y
Bien sûr, si vous avez utilisé les indicateurs rsync
corrects en premier lieu, cela est inutile, mais si vous ne voulez pas réexécuter rsync
pour les fichiers que vous avez déjà copiés, je le recommanderais.
J'ai eu ce problème avec rsnapshot
, qui utilise rsync pour la sauvegarde. Je l'ai remplacé en supprimant --relative
de rsync_long_args
. Après ce dossier, c
pour le disque lui-même avec des autorisations étranges ne crée pas.