Windows上的rsync文件权限


32

我有一个rsync服务,该服务将文件从远程计算机同步到将其拖放到网络驱动器上的计算机。

我需要复制的文件以具有目标文件夹的本机权限。

同步过程运行良好,但是完成后,我无法访问某些文件夹-权限被拒绝。

我以域管理员身份登录;也不允许我修改该文件夹的任何权限。是什么赋予了?

运行命令:

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

您当前使用什么命令进行同步?
约翰T

Answers:


24

(来自http://www.samba.org/ftp/rsync/rsync.html

总结:要给目标文件(旧的和新的)源权限,请使用--perms

要为新文件提供目标默认权限(在不更改现有文件的情况下),请确保--perms关闭并使用该选项--chmod=ugo=rwX(以确保启用所有未屏蔽的位)。

如果您想使后一种行为更易于键入,则可以为其定义一个popt别名,例如将该行放入〜/ .popt文件中(以下内容定义了-Z选项,并包括--no- g以使用目标目录的默认组):

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

多谢。我不记得要使用正确的标志了……
Vokuhila-Oliba 2010年

2
这与Linux上的rsync有关,但在rsync到Windows驱动器时并不能始终解决问题,这就是原始帖子的要求。
西蒙·伊斯特

18

Cygwin的“ posix”安全性给我带来了Windows NTFS文件权限的许多问题-甚至--no-perms与rsync一起使用。

我发现新创建的文件/文件夹不能正确继承默认权限,但是每个文件/文件夹最终<not inherited>在Windows文件/文件夹“高级”安全性选项卡中都有很多条目。(而且这个问题不仅与rsync有关)。

我发现这篇相关文章以及此链接对于使用noaclcygwin /etc/fstab文件中的选项解决这些问题都非常有帮助。该解决方案的缺点是cygwin失去了设置文件/文件夹权限的能力,但是在许多情况下这并不重要。

(在本主题上进行搜索,您可能会找到设置CYGWIN = NONTSEC环境变量的参考,但这仅适用于cygwin v1.5,不适用于cygwin v1.7及更高版本。)


编辑/ etc / fstab文件为我修复了它。我必须在cygwin中使用rsync而不是诸如DeltaCopy之类的其他部署来执行此操作。
马特·康诺利

如果仅使用cwrsync软件包(而不是cygwin),则将fstab文件放在哪里?
西蒙·伊斯特

我不使用cygwin。我使用安装在OS X上的常规NTFS驱动器,并对其进行rsync文件。然后,Windows中的这些文件已完全弄乱了权限。寻找解决方案。
史蒂文·卢

看起来我一直在使用“风险”方法通过内置驱动程序在MacOS上安装NTFS,该方法应该比paragon / tuxera和FUSE驱动程序稳定得多。因此,如果您在同一条船上,请记住这一点
Steven Lu

8

在带有DeltaCopy的 Windows上,我可以使其与:

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

它甚至与 --recursive


这通常可以正常工作,但是,我必须更改--chmod选项以包括a = rwx,以便批处理文件等可以正确执行。
泰勒·格林

1
这是对我有用的唯一选择。尝试了上面建议的--no-perms和fstab均无济于事。此权限仅给我一些<not notInherited>权限,这是我想要的权限,对执行用户不包含Deny权限。谢谢!
AronVanAmmers 2012年

DeltaCopy还包含一个chmod可执行文件,该文件随后可以修复权限,例如chmod -R 777 / cygdrive / g
jnnnnn 2012年

1
--perms是我所缺少的,以解决副本为只读问题。
泰勒·洛珀

1

rsync,至少在Cygwin上具有以下开关:

-A,-acls保留ACL(表示--perms)

我的Cygwin版本是:

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

希望这可以帮助!


1
欢迎来到超级用户!虽然从理论上讲这可以回答问题,但是为了改进起见,最好包括如何回答问题的详细信息(引用支持您主张的消息源是一个加分)。
G-Man说'Resstate Monica''Apr

1

评分最高的答案仅适用于在Windows上通过ssh使用rsync的情况。如果您使用的是cygwin rsync守护程序,则仅在/ etc / fstab中使用noacl无效,无论出于什么原因,即使您摆脱了用户并尝试使用noacl,override等,它也不尊重继承。这似乎发生了如果要同步到顶级驱动器,并在/etc/rsyncd.conf中使用path = / cygdrive / whatever。相反,您需要在/ etc / fstab中创建一个单独的挂载点,并在rsyncd.conf中使用该挂载点:

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

在/etc/rsyncd.conf中,您将具有以下内容:

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

然后,我不得不重新启动Windows系统,仅重新启动rsync服务似乎无济于事,它不断抛出chroot和chdir错误(即使已安装/ d_drive并使用chroot = false,我也可以写它)。然后,当您rsync进入Windows系统时,请使用:

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

1

过去,我后来takeown在提升的命令提示符下使用以下命令将Windows中的权限重新分配给当前用户:

takeown /f <NameOfFolder> /r /d Y

当然,如果首先使用正确的rsync标志,则没有必要,但是如果您不想为rsync已复制的文件重新运行,则建议这样做。


1
欢迎来到超级用户!请仔细阅读问题。您的答案没有回答原始问题。
DavidPostill

假设问题是“什么给了?” 我会说它的答案甚至不是解决方案,而是一种解释,因此此处的大多数答案都无法回答问题。这仍然是该问题的有用且因地制宜的补充,但如果合适的话,我可以将其移至评论中。
CodingLumis

哦,等等,我无法添加评论,因为我的声誉不超过50岁,因此必须留在这里。
CodingLumis

correct rsync flags>那会是什么?
oldmud0

@ oldmud0有关在复制期间设置权限的标记的适当组合,请参见我的答案。我的解决方案非常适合那些已经复制了文件但又不想删除它们以再次复制它们以确保权限正确的人。
CodingLumis

0

我在rsnapshot使用rsync进行备份时遇到了这个问题。我已将其--relative从中移除覆盖rsync_long_args。在该文件夹之后,c不会创建具有奇怪权限的磁盘本身。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.