izin file rsync di windows

32

Saya memiliki layanan rsync yang menyinkronkan file dari mesin jarak jauh ke mesin yang menjatuhkannya pada drive jaringan.

Saya perlu file yang disalin untuk mengambil izin asli dari folder tujuan.

Proses sinkronisasi berjalan dengan baik, tetapi setelah selesai, saya tidak dapat mengakses beberapa folder - Izin Ditolak.

Saya masuk sebagai admin domain; itu tidak akan memungkinkan saya untuk memodifikasi izin pada folder tersebut, baik. Apa yang menyebabkannya?

jalankan perintah:

rsync.exe  -v -rlt -z --delete "src_path" "dst_path"
avguchenko
sumber
perintah apa yang saat ini Anda gunakan untuk menyinkronkan?
John T

Jawaban:

24

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

Singkatnya: untuk memberikan file tujuan (lama dan baru) izin sumber, gunakan --perms.

Untuk memberi file baru izin tujuan-default (sambil membiarkan file yang ada tidak berubah), pastikan bahwa --permsopsi tidak aktif dan gunakan --chmod=ugo=rwX(yang memastikan bahwa semua bit yang tidak bertopeng diaktifkan).

Jika Anda ingin membuat perilaku yang terakhir ini lebih mudah diketik, Anda bisa mendefinisikan alias popt untuknya, seperti meletakkan baris ini di file ~ / .popt (berikut ini mendefinisikan opsi -Z, dan termasuk --no- g untuk menggunakan grup default dari dir tujuan):

    rsync alias -Z --no-p --no-g --chmod=ugo=rwX
avguchenko
sumber
Terima kasih banyak. Saya tidak dapat mengingat bendera yang tepat untuk digunakan ...
Vokuhila-Oliba
2
Ini relevan dengan rsync di Linux, tetapi tidak selalu menyelesaikan masalah ketika rsync'ing ke drive Windows, yang merupakan apa yang diminta oleh posting asli.
Simon East
18

Keamanan "posix" Cygwin telah menyebabkan saya banyak masalah dengan izin file Windows NTFS - bahkan digunakan --no-permsdengan rsync.

Saya menemukan bahwa file / folder yang baru dibuat tidak mewarisi dengan benar izin default, tetapi setiap file / folder berakhir dengan banyak <not inherited>entri di file / folder Windows Keamanan canggih. (Dan masalah ini bukan hanya terkait rsync).

Saya menemukan posting terkait ini dan tautan ini sangat membantu dalam cara mengatasi masalah ini menggunakan noaclopsi dalam /etc/fstabfile cygwin . Kelemahan dari solusi ini adalah bahwa cygwin kehilangan kemampuan untuk mengatur izin file / folder, tetapi dalam banyak kasus ini tidak penting.

(Googling topik ini Anda mungkin akan menemukan referensi untuk menetapkan variabel lingkungan CYGWIN = NONTSEC, tapi ini untuk cygwin v1.5 dan tidak berfungsi di cygwin v1.7 dan seterusnya.)

miking
sumber
Mengedit file / etc / fstab memperbaikinya untuk saya. Saya harus menggunakan rsync di dalam cygwin alih-alih penyebaran lain seperti DeltaCopy untuk melakukan ini.
Matt Connolly
Jika Anda hanya menggunakan paket cwrsync (dan bukan cygwin) di mana Anda meletakkan file fstab?
Simon East
Saya tidak menggunakan cygwin. Saya mengambil drive NTFS biasa, yang dipasang pada OS X, dan file rsync untuk itu. Kemudian, file-file ini dalam Windows telah benar-benar mengacaukan izin. Mencari solusi.
Steven Lu
Sepertinya saya telah menggunakan metode "berisiko" untuk memasang NTFS pada macOS menggunakan driver bawaan, yang seharusnya jauh lebih tidak stabil daripada driver paragon / tuxera dan FUSE. Jadi ingatlah itu jika Anda berada di kapal yang sama
Steven Lu
8

Pada Windows dengan DeltaCopy saya dapat membuatnya bekerja dengan:

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

Itu bekerja bahkan dengan --recursive

Wernight
sumber
Ini sebagian besar berhasil, namun, saya harus mengubah opsi --chmod untuk memasukkan a = rwx sehingga file batch, dll akan dieksekusi dengan benar.
Taylor Gerring
1
Ini adalah satu-satunya opsi yang berfungsi untuk saya. Mencoba --tidak ada perms yang disarankan di atas dan fstab tidak berhasil. Yang ini memberi saya hanya beberapa izin <tidak diwariskan>, yang merupakan jenis izin yang saya inginkan dan tidak termasuk izin Tolak untuk pengguna yang mengeksekusi. Terima kasih!
AronVanAmmers
DeltaCopy juga berisi chmod yang dapat dieksekusi yang dapat memperbaiki izin setelahnya, misalnya chmod -R 777 / cygdrive / g
jnnnnn
1
--perms adalah apa yang hilang bagi saya, untuk menyelesaikan salinan sebagai masalah yang hanya bisa dibaca.
Tyler S. Loeper
1

rsync, setidaknya di Cygwin memiliki sakelar berikut:

-A, --acls melestarikan ACL (menyiratkan --perms)

Versi Cygwin saya adalah:

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

Semoga ini membantu!

Vipul
sumber
1
Selamat Datang di Pengguna Super! Sementara ini secara teoritis dapat menjawab pertanyaan, demi perbaikan akan lebih baik untuk memasukkan rincian bagaimana ini menjawab pertanyaan (mengutip sumber untuk mendukung klaim Anda merupakan nilai tambah).
G-Man Mengatakan 'Reinstate Monica'
1

Jawaban berperingkat teratas hanya berfungsi jika Anda menggunakan rsync over ssh ke windows. Jika Anda menggunakan daemon cygwin rsync hanya menggunakan noacl di / etc / fstab tidak membantu, untuk alasan apa pun itu tidak menghormati warisan bahkan jika Anda menyingkirkan pengguna dan mencoba noacl, menimpa, dll. Hal ini tampaknya terjadi jika Anda rsyncing ke drive tingkat atas dan gunakan path = / cygdrive / apa pun di /etc/rsyncd.conf. Sebagai gantinya, Anda perlu membuat titik mount terpisah di / etc / fstab dan menggunakannya di rsyncd.conf Anda sebagai gantinya:

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

di /etc/rsyncd.conf, Anda akan memiliki sesuatu seperti ini:

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

Kemudian saya harus me-reboot sistem windows, hanya me-restart layanan rsync saja sepertinya tidak membantu, ia terus melempar chroot dan chdir error (walaupun / d_drive sudah di-mount dan menggunakan chroot = false dan saya bisa menulis ke sana). Kemudian ketika Anda masuk ke sistem windows gunakan:

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

Di masa lalu saya baru saja menetapkan ulang izin di Windows untuk pengguna saya saat ini kemudian menggunakan takeownpada prompt perintah yang ditinggikan sebagai:

takeown /f <NameOfFolder> /r /d Y

Tentu saja, jika Anda menggunakan rsyncflag yang benar di tempat pertama maka ini tidak perlu tetapi jika Anda tidak ingin menjalankan kembali rsyncuntuk file yang sudah Anda salin maka saya akan merekomendasikan ini.

CodingLumis
sumber
1
Selamat Datang di Pengguna Super! Silakan baca pertanyaan itu lagi dengan seksama. Jawaban Anda tidak menjawab pertanyaan awal.
DavidPostill
Mengingat bahwa pertanyaannya adalah "apa yang memberi?" Saya akan mengatakan jawabannya bahkan bukan solusi tetapi penjelasan sehingga sebagian besar jawaban di sini tidak menjawab pertanyaan. Ini masih merupakan tambahan yang bermanfaat dan sesuai secara kontekstual untuk masalah ini, tetapi saya dapat memindahkannya ke komentar jika lebih tepat.
CodingLumis
Oh, tunggu, saya tidak dapat menambahkan komentar karena saya tidak memiliki reputasi lebih dari 50 jadi ini harus tetap di sini.
CodingLumis
correct rsync flags> dan apa yang akan terjadi?
oldmud0
@ oldmud0 lihat jawaban yang mendahului milik saya untuk kombinasi bendera yang sesuai yang mengatur izin selama salinan. Solusi saya sangat cocok untuk mereka yang telah menyalin file dan tidak ingin menghapusnya, menyalinnya lagi untuk memastikan izinnya benar.
CodingLumis
0

Saya punya masalah dengan ini rsnapshot, yang menggunakan rsync untuk cadangan. Saya menimpanya menghapus --relativedari rsync_long_args. Setelah itu folder cuntuk disk itu sendiri dengan izin aneh tidak dibuat.

pengguna3132194
sumber