Почему rsync не устанавливает права доступа к файлам корректно при передаче с локального на удалённый?

Вопрос или проблема

Я пытаюсь скопировать файл с сервера A (Raspberry Pi) на сервер B (NAS). На сервере A файл имеет -rw-rw-r--. Я хочу, чтобы файл имел права -rw-r--r-- после передачи.

umask равен 0022 на каждом сервере. Если я создаю файл на сервере B… touch test file, он получает такие права:

-rw-r--r--    1 root     root             0 Oct 20 16:21 testfile

Когда я выполняю эту команду rsync с сервера B (удаленно на локальный):

rsync -itrvv --info=progress2 --include="*mymovie*" --exclude="*" "/media/ubuntu/movie/mymovie.mp4" /media/hdd/movies

После передачи права файла: -rwxr-xr-x

Я уже не понимаю, почему все биты выполнения установлены?

Вместо этого, если я запускаю это с сервера B (удаленно на локальный):

rsync -itrvvp --info=progress2 --include="*mymovie*" --exclude="*" --chmod=F644 "/media/ubuntu/movie/mymovie.mp4" /media/hdd/movies

Теперь после передачи права файла: -rw-r--r-- как и ожидалось. Но я не понимаю, почему мне пришлось специально установить права, чтобы получить стандартные права файла -rw-r--r-- для этого сервера?

Но если я запускаю эти команды с сервера A, права файла никогда не бывают -rw-r--r-- после передачи.

Когда я выполняю эти команды с сервера A (локально на удаленный):

rsync -itrvv --info=progress2 --include="*mymovie*" --exclude="*" "/media/ubuntu/movie/mymovie.mp4" /media/hdd/movies
sudo rsync -itrvvp --info=progress2 --include="*mymovie*" --exclude="*" --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r "/media/ubuntu/movie/mymovie.mp4" /media/hdd/movies
sudo rsync -itrvvp --info=progress2 --include="*mymovie*" --exclude="*" --chmod=F644 "/media/ubuntu/movie/mymovie.mp4" /media/hdd/movies

В каждом случае после передачи на сервер B (NAS) права файла всегда: -rwxr--r--.

Мой вопрос: Как мне дать файлу mymovie.mp4 права -rw-r--r-- после использования rsync для передачи с сервера A на сервер B когда я запускаю команду rsync с сервера A? (т.е.: локально на удаленный). Почему добавляются биты выполнения?

Некоторая дополнительная информация: Исходные и конечные папки (на серверах A и B) открыты как Samba ресурсы. На сервере B (NAS) так определен ресурс:

[Harddisk]
        comment = Жесткий диск
        path = /media/hdd
        guest ok = Да
        read only = Нет
        valid users = root kids
        admin users = root
        force create mode = 0600
        force directory mode = 0700
        wide links = да
        follow symlinks = да

А затем я монтирую это с сервера A (Pi), используя -cifs в systemd вот так:

[Unit]
Description=Монтировать внутренний HDD на сервере B (NAS) на сервер A (Raspberry Pi):

[Mount]
What=//192.168.1.104/Harddisk
Where=/media/hdd/movies
Type=cifs
Options=x-mount.mkdir,noperm,_netdev,nofail,uid=1000,gid=1000,dir_mode=0755,file_mode=0644,credentials=/etc/login.cred

TimeoutSec=30

[Install]
WantedBy=multi-user.target

Обновление: Относительно моего первого теста выше: Запуск команды rsync с сервера B (удаленно на локальный). Почему все биты выполнения устанавливаются после передачи файла?

Я внес изменения в параметры -cifs, которые автоматически монтировали samba ресурс, с которого копировался файл (сервер A) c другим file_mode 0644 и dir_mode 0755, и теперь биты выполнения не устанавливаются. Но я всё ещё не полностью это понимаю.

Что касается остальной части моего запроса: Запуск команды rsync с сервера A (локально на удаленный). Я также обновил параметры -cifs, чтобы уточнить использование file_mode и dir_mode, как указано выше. Я также поэкспериментировал с определениями ресурса Samba на сервере B (smb.conf) и, комбинируя force create mode с create mask, я смог заставить файлы иметь определенные права, когда rsync копирует их в этот Samba ресурс. Однако я все еще не могу заставить rsync давать файлам любые права, которые он хочет, после их передачи на удалённый Samba ресурс. Я установил unix extensions = Yes, но они, похоже, не соблюдаются.

Ответ или решение

Почему rsync не устанавливает правильные разрешения файлов при передаче с локального на удаленный сервер

Передача файлов между серверами — часто встречающаяся задача в области IT, и использование инструмента, такого как rsync, может показаться идеальным решением. Однако, как показывает ваш опыт, возникают проблемы с разрешениями файлов. В этой статье мы разберем, почему rsync может не устанавливать разрешения файлов так, как вы ожидаете, при передаче файлов от серверов A (Raspberry Pi) к серверу B (NAS), и предложим рекомендации для решения этой проблемы.

Основная проблема

Ваша задача заключается в том, чтобы передать файл mymovie.mp4 с разрешением -rw-r--r-- с сервера A на сервер B. Однако после передачи вы получаете -rwxr--r--, что указывает на то, что бит выполнения добавляется к файлу. Это поведение можно объяснить несколькими причинами.

1. Настройки Samba

Ваши настройки Samba на сервере B содержат параметры force create mode и force directory mode, которые могут влиять на разрешения создаваемых файлов. Но это лишь часть решения. Вы также указали file_mode и dir_mode в параметрах монтирования CIFS на сервере A, что влияет на разрешения файлов, создаваемых на смонтированном ресурсе.

Рекомендация: Убедитесь, что ваши параметры Samba (включая create mask) и настройки монтирования CIFS согласованы. Это может включать и использование опции create mask в вашем файле конфигурации Samba:

create mask = 0644

2. Установка разрешений при передачи через rsync

Когда вы выполняете передачу с помощью rsync от сервера A к серверу B, исходные разрешения файлов в основном определяются конфигурацией на стороне удаленного сервера (в вашем случае — сервер B). Чтобы установить конкретные разрешения, вы можете использовать опцию --chmod.

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

rsync -itrvvp --info=progress2 --include="*mymovie*" --exclude="*" --chmod=F644 "/media/ubuntu/movie/mymovie.mp4" /media/hdd/movies

3. Поведение rsync при удаленной передаче

При передаче файлов с сервера B на сервер A, вы заметили, что выполнение rsync с определением управления разрешениями не дает результата. Это связано не только с тем, как rsync обрабатывает файлы, но и как система (в данном случае Samba) управляет разрешениями.

Система Samba может обрабатывать установленные разрешения в соответствии с либо force create mode, либо create mask, что может привести к неправильному отображению разрешений файлов, перенаправленных из одной системы в другую.

4. Установка битов исполнения

Проблема, из-за которой установка битов исполнения проявляется (например, -rwxr-xr-x), может быть связана с тем, как передача файлов происходит через CIFS. Когда Samba обрабатывает монтирование, она может установить биты исполнения в соответствии с текущими настройками монтирования и разрешениями, установленными для файлов. У вас уже есть некоторые коррективы, но если биты установки все еще появляются, это может указывать на несоответствие между настройками CIFS и Samba.

Заключительные рекомендации

  1. Проверьте настройки Samba: Убедитесь, что конфигурация Samba позволяет установить ожидаемые разрешения. Используйте create mask, чтобы установить маски разрешений, которые применяется к создаваемым файлам.

  2. Используйте параметры chmod rsync: Если вам нужно обеспечить корректные разрешения, обязательно используйте флаг --chmod в вашей команде rsync для контроля разрешений файлов.

  3. Консистентность монтирования: Убедитесь, что параметры dir_mode и file_mode в файле монтирования CIFS соответствуют вашим ожиданиям относительно разрешений файлов и папок.

  4. Тестирование и отладка: Протестируйте различные конфигурации на небольших наборах данных, чтобы понять, какие изменения в конфигурации дают желаемые результаты.

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

Оцените материал
Добавить комментарий

Капча загружается...