autorizzazioni per i file rsync su Windows


32

Ho un servizio rsync che sincronizza i file dalla macchina remota a una macchina che li rilascia su un'unità di rete.

Ho bisogno che i file copiati assumano le autorizzazioni native della cartella di destinazione.

Il processo di sincronizzazione funziona correttamente, ma al termine non riesco ad accedere ad alcune cartelle - Autorizzazione negata.

Ho effettuato l'accesso come amministratore di dominio; non mi permetterà nemmeno di modificare alcuna autorizzazione su tali cartelle. Cosa dà?

esegui comando:

rsync.exe  -v -rlt -z --delete "src_path" "dst_path"

quale comando stai attualmente utilizzando per la sincronizzazione?
John T,

Risposte:


24

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

In sintesi: per assegnare ai file di destinazione (sia vecchi che nuovi) le autorizzazioni di origine, utilizzare --perms.

Per assegnare ai nuovi file le autorizzazioni predefinite di destinazione (lasciando invariati i file esistenti), assicurarsi che l' --permsopzione sia disattivata e utilizzare --chmod=ugo=rwX(il che garantisce che tutti i bit non mascherati siano abilitati).

Se ti piacerebbe rendere quest'ultimo comportamento più facile da digitare, potresti definire un alias popt per questo, come mettere questa riga nel file ~ / .popt (quanto segue definisce l'opzione -Z e include --no- g per utilizzare il gruppo predefinito della directory di destinazione):

    rsync alias -Z --no-p --no-g --chmod=ugo=rwX

grazie mille. Non riuscivo a ricordare le bandiere giuste da usare ...
Vokuhila-Oliba,

2
Questo è rilevante per rsync su Linux, ma non sempre risolve il problema quando si esegue la rincronizzazione su un'unità Windows, che è ciò che viene richiesto dal post originale.
Simon East,

18

La sicurezza "posix" di Cygwin mi ha causato molti problemi con le autorizzazioni dei file di Windows NTFS, anche usando --no-permscon rsync.

Ho scoperto che i file / le cartelle appena creati non ereditano correttamente le autorizzazioni predefinite, ma ogni file / cartella finisce con molti <not inherited> voci nella scheda Protezione avanzata di file / cartelle di Windows. (E questo problema non è solo relativo a rsync).

Ho trovato questo post correlato e questo link entrambi molto utili su come risolvere questi problemi utilizzando l' noaclopzione di Cygwin/etc/fstab file . L'aspetto negativo di questa soluzione è che cygwin perde la possibilità di impostare autorizzazioni per file / cartelle, ma in molti casi questo non è importante.

(Cercando su questo argomento troverai probabilmente riferimenti all'impostazione della variabile d'ambiente CYGWIN = NONTSEC, ma questo vale per cygwin v1.5 e non funziona in cygwin v1.7 in poi.)


La modifica del file / etc / fstab l'ha risolto per me. Per fare questo ho dovuto usare rsync all'interno di Cygwin invece di un'altra distribuzione come DeltaCopy.
Matt Connolly,

Se stai solo usando il pacchetto cwrsync (e non cygwin) dove metti il ​​file fstab?
Simon East,

Non uso Cygwin. Prendo un normale disco NTFS, montato su OS X, e rsync i file ad esso. Quindi, questi file all'interno di Windows hanno autorizzazioni completamente rovinate. Alla ricerca di una soluzione.
Steven Lu,

sembra che io stia usando il metodo "rischioso" di montare NTFS su macOS usando il driver integrato, che dovrebbe essere molto meno stabile dei driver paragon / tuxera e FUSE. Quindi tienilo a mente se ti trovi nella stessa barca
Steven Lu

8

Su Windows con DeltaCopy ho potuto farlo funzionare con:

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

Ha funzionato anche con --recursive


Questo per lo più ha funzionato, tuttavia, ho dovuto modificare l'opzione --chmod per includere a = rwx in modo che i file batch, ecc. Vengano eseguiti correttamente.
Taylor Gerring,

1
Questa è l'unica opzione che ha funzionato per me. Ho provato il --no-perms suggerito sopra e il fstab senza risultati. Questo mi ha dato solo alcune autorizzazioni <non ereditate>, che erano un tipo di autorizzazioni che volevo e non includevano nessuna autorizzazione Nega per l'utente in esecuzione. Grazie!
AronVanAmmers,

DeltaCopy contiene anche un eseguibile chmod che può correggere le autorizzazioni in seguito, ad es. Chmod -R 777 / cygdrive / g
jnnnnn

1
--perms è ciò che mi mancava, per risolvere la copia come problema di sola lettura.
Tyler S. Loeper,

1

rsync, almeno su Cygwin ha il seguente interruttore:

-A, --acls preserva gli ACL (implica --perms)

La mia versione di Cygwin è:

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

Spero che sia di aiuto!


1
Benvenuto in Super User! Sebbene ciò possa teoricamente rispondere alla domanda, per motivi di miglioramento sarebbe preferibile includere dettagli su come questo risponda alla domanda (citare una fonte per sostenere il tuo reclamo è un vantaggio).
G-Man dice "Ripristina Monica" il

1

La risposta più votata funziona solo se stai usando rsync su ssh in Windows. Se stai usando il demone rsync di cygwin, usare semplicemente noacl in / etc / fstab non aiuta, per qualsiasi motivo non onori l'eredità anche se ti sbarazzi dell'utente e provi noacl, override, ecc. Questo sembra accadere se stai eseguendo la risincronizzazione in un'unità di livello superiore e usi path = / cygdrive / qualunque sia in /etc/rsyncd.conf. Invece, devi creare un mount point separato in / etc / fstab e usarlo invece nel tuo rsyncd.conf:

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

in /etc/rsyncd.conf, avresti qualcosa del genere:

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

Quindi ho dovuto riavviare il sistema Windows, il solo riavvio del servizio rsync da solo non sembrava aiutare, continuava a generare errori chroot e chdir (anche se / d_drive era montato e utilizzava chroot = false e potevo scriverlo). Quindi, quando esegui la risincronizzazione nel sistema Windows, utilizza:

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

1

In passato ho appena riassegnato le autorizzazioni in Windows al mio attuale utente in seguito usando takeownun prompt dei comandi elevato come:

takeown /f <NameOfFolder> /r /d Y

Naturalmente, se hai usato i rsyncflag corretti in primo luogo, questo non è necessario, ma se non volessi rieseguire i rsyncfile che hai già copiato, lo consiglierei.


1
Benvenuto in Super User! Si prega di leggere di nuovo attentamente la domanda. La tua risposta non risponde alla domanda originale.
DavidPostill

Dato che la domanda è "cosa dà?" Direi che la sua risposta non è nemmeno una soluzione ma una spiegazione, quindi la maggior parte della risposta qui non risponde alla domanda. Questa è ancora un'aggiunta utile e contestualmente appropriata al problema, ma posso spostarla in un commento se più appropriato.
CodingLumis

Oh aspetta, non posso aggiungere commenti perché non ho una reputazione di 50+ quindi dovrò rimanere qui.
CodingLumis

correct rsync flags> e quali sarebbero quelli?
oldmud0,

@ oldmud0 vedi le risposte che hanno preceduto il mio per combinazioni appropriate di flag che impostano le autorizzazioni durante la copia. La mia soluzione è ideale per coloro che hanno già copiato i file e non volevano cancellarli e copiarli di nuovo per assicurarsi che le autorizzazioni siano corrette.
CodingLumis

0

Ho avuto questo problema con rsnapshot, che utilizza rsync per il backup. L'ho ignorato rimuovendo --relativeda rsync_long_args. Dopo quella cartella cper il disco stesso con strane autorizzazioni non si crea.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.