web-dev-qa-db-fra.com

Rsync sous Windows: autorisations incorrectes pour les répertoires créés

J'essaie de pousser les modifications sur mon serveur via ssh sur windows (cygwin) en utilisant rsync. La commande que j'utilise est:

rsync -rvz -e ssh/cygdrive/c/myfolder/[email protected]:/srv/www/prj112/myfolder /

/srv/www/prj112/myfolder/ appartient à rsyncuser. Mon problème est que même si rsync les sous-répertoires sont créés lors de leur publication, chaque répertoire se voit attribuer l'autorisation par défaut de d--------- donc rsync ne parvient pas à copier les fichiers qu'il contient.

Comment puis-je réparer ça?

46
user391986

L'option d'ignorer les autorisations NTFS a changé dans Cygwin version 1.7. C'est peut-être ce qui cause le problème.

Essayez d'ajouter le drapeau 'noacl' à vos montages Cygwin dans C:\cygwin\etc\fstab, par exemple:

none /cygdrive cygdrive user,noacl,posix=0 0 0

Vous pouvez transmettre des autorisations personnalisées via rsync en utilisant l'option 'chmod':

rsync -rvz --chmod=ugo=rwX -e ssh source destination
66
Lars Wiegman

si vous déployez un site à partir de Windows (par exemple, Octopress utilise rsync), il est possible de définir l'autorisation 775 en ajoutant plusieurs commandes chmod:

   rsync -avz --chmod=ug=rwx --chmod=o=rx -e ssh
7
Evilripper

Votre problème vient du fait que les autorisations Unix sur ce répertoire sont vraiment 0. Toutes les informations d'accès sont stockées dans des ACL distinctes, que rsync ne copie pas. Ainsi, il définit les autorisations sur la copie distante à 0 et, évidemment, ne peut plus écrire dans ce répertoire par la suite. Tu peux courir

chmod -R 775

sur ce répertoire, ce qui devrait résoudre votre problème rsync.

Après avoir regardé la page de manuel, je peux dire que le paramètre chmod est disponible dans rsync depuis la version ~ 2.6.8. Mais vous devez utiliser --chmod=ugo=rwX en combinaison avec rsync -av

Vous devriez également essayer cette commande:

rsync -av <SOURCE_DIR> [email protected]:/srv/www/prj112/myfolder

Cela fonctionnerait au moins sur Linux. Et notez que rsync n'a pas besoin de mentionner ssh - au moins sous Linux.

Mais si tout échoue et juste pour donner une option, vous pouvez jeter un œil à cet outil prêt à l'emploi cwRsync

7
sra

Pour rsync de Windows vers Unix/Linux, vous devez fournir une commande comme

SET BACKUP_SERVER=my.backup.server
SET SSH_USER=theUnixUserName
SET STORAGEPATH=/home/%SSH_USER%/Backup/
SET STORAGEURI=%BACKUP_SERVER%:%STORAGEPATH%    
SET SSH_ID=/cygdrive/c/Users/theWindowsUserName/Documents/keyfiles/id_dsa
SET EXCLUDEFILE=backup_excludes.txt
SET BACKUPLOGFILE=/cygdrive/c/Users/theWindowsUserName/Backuplogs/backup-%DATE%-%TIME::=-%.log

La commande ssh est alors

SET BACKUP=rsync -azvu --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --rsh="ssh -l %SSH_USER% -i '%SSH_ID%'" --exclude-from=%EXCLUDEFILE% --delete --delete-excluded --log-file="%BACKUPLOGFILE%"

avec backup_excludes.txt contenant des lignes d'éléments ignorés comme

.git
.svn
.o
\Debug
\Release

Ensuite, vous utiliseriez cela dans un script avec

%BACKUP% /cygdrive/c/mySensibleData %STORAGEURI%
%BACKUP% /cygdrive/c/myOtherSensibleData %STORAGEURI%
%BACKUP% /cygdrive/c/myOtherSensibleData2 %STORAGEURI%

etc. Cela sauvegardera vos répertoires mySensibleData, myOtherSensibleData et myOtherSensibleData2 avec les autorisations 755 pour les répertoires et 644 pour les fichiers. Vous obtenez également des journaux de sauvegarde dans votre % BACKUPLOGFILE% pour chaque sauvegarde.

2
codingdave

Cygwin rsync signalera l'autorisation refusée lorsqu'un processus a ouvert le fichier cible. Téléchargez et exécutez Process Explorer et découvrez si quelque chose d'autre verrouille le fichier ou essayez simplement de renommer le fichier et voyez si vous obtenez l'erreur Windows sur un autre processus ayant le fichier ouvert.

1
Mark

Vous pouvez également essayer de créer une variable d'environnement (globale) CYGWIN et définir sa valeur sur nontsec

0
Kerb