- Вопрос или проблема
- Ответ или решение
- 1. Причины неправильных разрешений файлов
- a. Условия на сервере назначения (Server B)
- b. Опции монтирования CIFS
- 2. Почему rsync добавляет права на выполнение
- 3. Как правильно настроить rsync и Samba
- a. Используйте --chmod
- b. Проверьте конфигурацию Samba
- c. Проверить конфигурацию CIFS
- Заключение
Вопрос или проблема
Я пытаюсь скопировать файл с сервера 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
для достижения нужных результатов. Эти решения обеспечат корректную передачу файлов с сохранением желаемых разрешений. Если у вас появятся дополнительные вопросы или будут требоваться уточнения, не стесняйтесь обращаться за помощью.