Назад | Перейти на главную страницу

rsync игнорирует --chown / - usermap

Я использую анзибл с synchronize модуль, который запускает rsync. Моя проблема не связана с ansible, так как я взял команду rsync из результатов отладки и запустил ее вручную - все та же проблема.

Я выполнил следующую команду:

/usr/bin/rsync --delay-updates -F --rsync-path="sudo rsync" --compress --delete-after --archive "/local/path" "ansible@1.2.3.4:/remote/path" --chown=myuser:myuser

Что бы я ни пытался - я получаю каталог, принадлежащий root:root.

Поэтому теперь rsync успешно работает от имени пользователя root, поэтому у него должны быть все необходимые разрешения. Я также пробовал использовать --usermap=*:myuser --groupmap=*:myuser - ничего.

я добавил --chmod=750 - не применяется.

В выводе отладки (-vvvv), Я снова вижу свои параметры, но это все.

Ни предупреждений, ни ошибок, но и никакого последующего упоминания чего-либо, содержащего "user", "group", "chown" и т. Д. Rsync - это 3.1.1 в Debian 8.

Любая помощь будет оценена ...

В chown системный вызов (и, соответственно, chown и rsync --chown команды) могут использоваться только root. Вы подключаетесь к удаленной системе как ansible user, поэтому удаленная система не разрешит операцию. В rsync команда распознает, что она не работает как root в удаленной системе, поэтому он молча игнорирует --chown вариант и другие подобные (например, --mapuser).

В rsync руководство не совсем ясно об этом поведении, но если вы укажете --super вариант, это вызовет rsync в удаленной системе, чтобы предположить, что она работает как root, даже если это не так. Это позволит ему попытаться chown операции, и для выдачи ошибки в случае сбоя.

РЕДАКТИРОВАТЬ:

Если вам удастся выполнить rsync в удаленной системе как root (например, используя --rsync-path="sudo rsync") вам все равно нужно будет добавить пару опций для --chown быть пригодным для использования. В руководстве говорится:

--chown=USER:GROUP
    This option forces all files to be owned by USER with group GROUP.
    This is a simpler interface than using --usermap and --groupmap
    directly, but it is implemented using those options internally, so
    you cannot mix them.

И вот что написано в руководстве для --usermap и --groupmap:

--usermap=STRING, --groupmap=STRING
    ...
    For the --usermap option to have any effect, the -o (--owner)
    option must be used (or implied), and the receiver will need to
    be running as a super-user (see also the --fake-super option).
    For the --groupmap option to have any effect, the -g (--groups)
    option must be used (or implied), and the receiver will need to
    have permissions to set that group. 

Помимо использования --rsync-path запустить это под sudoпопробуйте добавить -o и -g варианты тоже.

sudo не преступник ... частично это был я, и, возможно, это также ошибка / функция, работающая не так, как ожидалось.

Моя доступная задача добавила имя исходной папки к пути назначения, в результате чего был создан этот путь, а затем исходная папка была создана внутри этой папки, эффективно удвоив структуру папок до /destination/path/source/source/...

--chmod применяется ко второму source папка, но не созданная как часть целевой структуры. Поэтому наверху source принадлежит root, но второй source принадлежит пользователю, он тоже должен принадлежать.

Исправлена ​​моя недоступная задача, чтобы использовать правильный путь, а, следовательно, и эту проблему.

Интересно, стоит ли ожидать rsync также chown/chmod папки, которые он создает как часть пути назначения?