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

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

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

umask равно 0022 на каждом сервере.
Если я создаю файл на сервере B… touch test file
Он получает эти разрешения файла…
-rw-r--r-- 1 root root 0 Окт 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 = Yes
        read only = No
        valid users = root kids
        admin users = root
        force create mode = 0600
        force directory mode = 0700
        wide links = yes
        follow symlinks = yes

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

[Unit]
Description=Монтировать внутренний HDD на сервере B (NAS) на сервер A (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 и настройками разрешений, которые применяются в процессе передачи. Давайте подробнее рассмотрим причины возникновения этой проблемы и способы ее решения.

1. Причины неправильных разрешений файлов

a. Условия на сервере назначения (Server B)

На вашем сервере B (NAS) вы используете Samba для экспонирования директории как сетевой ресурс. В конфигурации Samba указаны следующие параметры:

force create mode = 0600
force directory mode = 0700

Эти параметры указывают, что, если нет дополнительных модификаций, все создаваемые файлы будут иметь права 0600 (только для чтения и записи для владельца) и все директории 0700 (полные права для владельца). Однако, при передаче файлов может действовать file_mode из параметров монтирования вывода CIFS.

b. Опции монтирования CIFS

Когда вы монтируете содержимое NAS на сервере A с помощью CIFS, вы указали:

file_mode=0644

Это означает, что все создаваемые файлы будут иметь права 0644 (чтение и запись для владельца, чтение для группы и других). Однако, если при операторе rsync с источника на место назначения передаются неверные разрешения, Samba может игнорировать эти параметры.

2. Почему rsync добавляет права на выполнение

Когда вы используете rsync, он копирует файл с правами, установленными на источнике (Server A), и применяет разрешения к файлам в соответствии с настройками Samba. В вашем случае, поскольку файл mymovie.mp4 изначально имеет права 0664, это приводит к конфликту с настройками Samba, и в результате вы получаете -rwxr-xr-x.

3. Как правильно настроить rsync и Samba

Чтобы добиться желаемых прав -rw-r--r-- для файла mymovie.mp4 после передачи, вы можете следовать этим рекомендациям:

a. Используйте --chmod

Как вы уже заметили, использование опции --chmod в rsync позволяет вам явно задать разрешения. Команда:

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

устанавливает правильные разрешения, потому что эта опция позволяет явно указать, каким образом вы хотите, чтобы rsync обрабатывал разрешения.

b. Проверьте конфигурацию Samba

Убедитесь, что параметры Samba соответствуют вашему сценарию. Возможно, стоит удалить force create mode, если вы хотите, чтобы rsync назначал права, заданные с помощью --chmod. Также можно рассмотреть возможность использования параметра create mask, который будет задавать маску для создаваемых файлов.

c. Проверить конфигурацию CIFS

Проверьте, как вы подключаетесь к Samba. Актуально ли использовать только параметры file_mode и dir_mode, или их нужно изменить, чтобы соответствовать необходимым разрешениям.

Заключение

Комбинируйте настройки Samba, параметры монтирования CIFS и опции rsync для достижения нужных результатов. Эти решения обеспечат корректную передачу файлов с сохранением желаемых разрешений. Если у вас появятся дополнительные вопросы или будут требоваться уточнения, не стесняйтесь обращаться за помощью.

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

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