31

У меня есть служба rsync, которая синхронизирует файлы с удаленного компьютера на компьютер, который сбрасывает их на сетевой диск.

Мне нужно, чтобы скопированные файлы имели собственные разрешения для папки назначения.

Процесс синхронизации работает нормально, но после его завершения я не могу получить доступ к некоторым папкам - «Отказано в доступе».

Я вошел как администратор домена; это также не позволит мне изменять какие-либо разрешения для указанных папок. Что дает?

Команда запуска:

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

7 ответов7

24

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

В итоге: чтобы дать файлам назначения (как старым, так и новым) исходные разрешения, используйте --perms .

Чтобы дать новым файлам права по умолчанию для назначения (оставляя существующие файлы без изменений), убедитесь, что опция --perms отключена, и используйте --chmod=ugo=rwX (что обеспечивает включение всех немаскированных битов).

Если вы хотите упростить ввод этого последнего поведения, вы можете определить для него псевдоним popt, например, поместить эту строку в файл ~/.popt (ниже определяется параметр -Z, и он включает в себя --no- g использовать группу по умолчанию для каталога dir):

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

Безопасность "posix" Cygwin вызвала у меня много проблем с правами доступа к файлам Windows NTFS - даже при использовании --no-perms с rsync.

Я обнаружил, что вновь созданные файлы / папки не наследуют должным образом разрешения по умолчанию, но каждый файл / папка заканчивается множеством <not inherited> записей на вкладке расширенной безопасности файла / папки Windows. (И эта проблема не только связана с rsync).

Я нашел этот связанный пост и эту ссылку очень полезными в том, как решить эти проблемы, используя опцию noacl в /etc/fstab cygwin. Недостатком этого решения является то, что cygwin теряет возможность устанавливать разрешения для файлов / папок, но во многих случаях это не важно.

(В этой теме вы, вероятно, найдете ссылки на установку переменной среды CYGWIN = NONTSEC, но это для cygwin v1.5 и не работает в cygwin v1.7 и далее.)

8

На Windows с DeltaCopy я мог заставить его работать с:

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

Это работало даже с --recursive

1

Ответ с самым высоким рейтингом работает только в том случае, если вы используете rsync через ssh в Windows. Если вы используете демон cygwin rsync, просто использование noacl в /etc /fstab не помогает, по какой-то причине он не учитывает наследование, даже если вы избавляетесь от пользователя и пробуете noacl, override и т.д. Это, кажется, происходит если вы выполняете rsyncing на диске верхнего уровня и используете path = /cygdrive / что угодно в /etc/rsyncd.conf. Вместо этого вам нужно создать отдельную точку монтирования в /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

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

В прошлом я просто переназначал разрешения в Windows для моего текущего пользователя, а затем использовал takeown в командной строке с повышенными правами :

takeown /f <NameOfFolder> /r /d Y

Конечно, если вы сначала использовали правильные флаги rsync то в этом нет необходимости, но если вы не хотите перезапускать rsync для файлов, которые вы уже скопировали, я бы порекомендовал это.

0

У меня была эта проблема с rsnapshot , который использует rsync для резервного копирования. Я переопределил его, удалив --relative из rsync_long_args . После этого папка c для самого диска со странными разрешениями не создается.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .