Rsync файловые разрешения на окнах

32

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

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

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

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

Команда Run:

rsync.exe  -v -rlt -z --delete "src_path" "dst_path"
avguchenko
источник
какую команду вы сейчас используете для синхронизации?
Джон Т

Ответы:

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
avguchenko
источник
большое спасибо. Я не мог вспомнить правильные флаги для использования ...
Vokuhila-Oliba
2
Это относится к rsync в Linux, но не всегда решает проблему при rsync'е на диск Windows, о чем и просил оригинальный пост.
Саймон Ист,
18

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

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

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

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

микрофонов
источник
Редактирование файла / etc / fstab исправило это для меня. Для этого мне пришлось использовать rsync в Cygwin вместо другого развертывания, такого как DeltaCopy.
Мэтт Коннолли
Если вы просто используете пакет cwrsync (а не cygwin), куда вы помещаете файл fstab?
Саймон Ист,
Я не использую Cygwin. Я беру обычный диск NTFS, смонтированный на OS X, и rsync файлы к нему. Затем эти файлы в Windows полностью испортили права доступа. Ищем решение.
Стивен Лу
Похоже, я использовал «рискованный» метод монтирования NTFS на macOS с использованием встроенного драйвера, который должен быть гораздо менее стабильным, чем драйверы paragon / tuxera и FUSE. Так что имейте это в виду, если вы в одной лодке
Стивен Лу
8

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

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

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

Wernight
источник
В основном это работало, однако мне пришлось изменить опцию --chmod, чтобы включить = rwx, чтобы пакетные файлы и т. Д. Выполнялись правильно.
Тейлор Джерринг
1
Это единственный вариант, который работал для меня. Попробовал предложенные выше --no-perms и fstab безрезультатно. Это дало мне только некоторые <не унаследованные> разрешения, которые были своего рода разрешениями, которые я хотел, и не включали никаких прав «Запретить» для исполняющего пользователя. Благодарность!
AronVanAmmers
DeltaCopy также содержит исполняемый файл chmod, который впоследствии может исправить права доступа, например, chmod -R 777 / cygdrive / g
jnnnnn
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

Надеюсь это поможет!

Vipul
источник
1
Добро пожаловать в Супер пользователя! Хотя это теоретически может дать ответ на вопрос, для улучшения было бы предпочтительно включить детали того, как это отвечает на вопрос (цитирование источника в поддержку вашего утверждения является плюсом).
G-Man говорит: «Восстановите Монику»
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/
sabujp
источник
1

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

takeown /f <NameOfFolder> /r /d Y

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

CodingLumis
источник
1
Добро пожаловать в Супер пользователя! Пожалуйста, внимательно прочитайте вопрос. Ваш ответ не отвечает на оригинальный вопрос.
ДэвидПостилл
Учитывая, что вопрос "что дает?" Я бы сказал, что его ответ - даже не решение, а объяснение, поэтому большинство ответов здесь не отвечают на вопрос. Это все еще полезное и контекстуально соответствующее дополнение к проблеме, но я могу переместить его в комментарий, если это более уместно.
CodingLumis
Ой, подождите, я не могу добавлять комментарии, потому что у меня нет репутации 50+, поэтому мне придется остаться здесь.
CodingLumis
correct rsync flags> а что бы это были?
oldmud0
@ oldmud0 смотрите ответы, которые предшествовали моим, для соответствующих комбинаций флагов, которые устанавливают права доступа во время копирования. Мое решение идеально подходит для тех, кто уже скопировал файлы и не хочет удалять их, скопируйте их снова, чтобы убедиться в правильности разрешений.
CodingLumis
0

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

user3132194
источник