1

Я недавно обновился до Rtools-3.5 (вспомогательный к этому вопросу), который включает в себя rsync-3.1.3. На другом ноутбуке, использующем Rtools-3.4 (rsync-3.1.1), простая команда rsync -aHAX remote:/path/to/dir/* . работает просто отлично, но с 3.1.3 это не так. Для устранения неполадок я скопировал исполняемый файл rsync-3.1.1 (с сопровождающим cyg*.dll) из Rtools-3.4, поэтому теперь у меня есть два набора исполняемых файлов: 3.1.1 (старый, рабочий) и 3.1.3 (новый, не за работой). Версия 3.1.1 работает.

Конфигурация ssh идентична, ssh-agent работает нормально (через KeePass/KeeAgent) и ssh -ing (из Git для Windows, версия OpenSSH_7.7p1, OpenSSL 1.0.2o 27 Mar 2018 если это имеет значение) работает на удаленном сервере без проблем.

Я думал, что другой вопрос « https://unix.stackexchange.com/questions/389908 » будет достаточно похожим, но в этом вопросе все версии rsync одинаковы.

Старая версия:

$ ~/rs/rsync --version
rsync  version 3.0.9  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    no socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes

Более новая версия:

$ /c/Rtools/bin/rsync --version
rsync  version 3.1.3  protocol version 31
Copyright (C) 1996-2018 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, no xattrs, iconv, symtimes, prealloc

Я пытаюсь rsync -e 'ssh -vv' ... и ничего не кажется смешным: журнал не сообщает о проблемах, ключи принимаются, и это заканчивается:

debug2: input_userauth_pk_ok: fp SHA256:g2VNSDTf5fNp46rZUo4GmAVi84gSNA9nNbT9KKfGXP0
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (publickey).
Authenticated to my.remote.host ([11.22.33.44]:22).
dup() in/out/err failed
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.3]

Та же команда с 3.1.1 работает отлично. Эта ошибка часто указывает на то, что удаленный каталог / файл не существует, но это явно не так (поскольку работает 3.1.1).

Похоже, что Rtools изменил свои параметры компиляции, потому что сравнение возможностей обоих показывает некоторые различия:

## Versions:       3.1.1                          3.1.3
$ diff -uw <( ~/rs/rsync --help) <( /c/Rtools/bin/rsync --help) | head -n 20
--- /dev/fd/63  2018-08-12 17:48:25.000000000 -0700
+++ /dev/fd/62  2018-08-12 17:48:25.000000000 -0700
@@ -1,10 +1,10 @@
-rsync  version 3.0.9  protocol version 30
-Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
+rsync  version 3.1.3  protocol version 31
+Copyright (C) 1996-2018 by Andrew Tridgell, Wayne Davison, and others.
 Web site: http://rsync.samba.org/
 Capabilities:
     64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
-    no socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
-    append, ACLs, xattrs, iconv, symtimes
+    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
+    append, ACLs, no xattrs, iconv, symtimes, prealloc

Поэтому они добавили socketpairs и удалили xattrs . Другие страницы, которые я прочитал, наводят меня на мысль , что это связано с xattrs , но я не совсем в этом убежден и не знаю, как на самом деле это проверить.

Удаленный конец:

$ rsync --help | head -n 20
rsync  version 3.1.1  protocol version 31
Copyright (C) 1996-2014 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes, prealloc

Далее предполагается, что ключом могут быть xattrs .

Глядя на Rsync Security Advisories, они предлагают три вещи, которые, возможно, связаны между собой:

Если вы используете версию rsync старше 3.1.3 в качестве клиента и получаете xattrs с сервера rsync, которому вы не можете полностью доверять, злонамеренный (модифицированный) сервер может отправить ненулевое имя xattr для переполнения xattr читать буфер.

Если вы используете доступный для записи демон rsync старше 3.1.3, вам следует добавить правило «отменить опции = protect-args», если вы не полностью доверяете пользователям, отправляющим вам файлы.

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

Я попытался несколько комбинаций переменных (например, -X), чтобы исправить это, но не могу найти ничего, чтобы заставить работать версию 3.1.3. Тем временем я могу использовать 3.1.1, чтобы делать то, что мне нужно, но что еще я могу проверить и / или изменить в командной строке, чтобы все заработало?

(win10_64, GfW-2.18.0, удаленный Ubuntu-16.04 с rsync-3.1.1)

0