Яблочный SMB. Или как подружить Samba с iOS

в 14:18, , рубрики: fruit, iOS, linux, MacOS, NAS, samba, smb, vfs
создано при помощи ИИ

создано при помощи ИИ

Samba — мощный и гибкий инструмент для организации совместного доступа к файлам и принтерам в сетях на базе Windows и Linux (еще и Unix). Будучи открытым решением, оно позволяет строить как домашние серверы, так и корпоративные инфраструктуры.

Как инженер в сфере телеком/IT, я работаю с различными системами и решениями для организации эффективной IT-инфраструктуры. В этом гайде я разберу настройку Samba, и поделюсь опытом реализации pet-проекта NAS/медиа - сервера.

Сегодня расскажу о проблемах с протоколом SMB при работе с macOS и iOS-устройствами и опишу процесс настройки NAS.

Настройка Samba на Ubuntu

Установил на старый ПК Ubuntu Server 24.04.1 LTS.

Установка и настройка Samba

Установил на сервер Samba

sudo apt install samba -y

Создал директорию, которую буду расшаривать, и наделил её "правами всевластия":

sudo mkdir -p /mnt/nas/shared
sudo chmod -R 777 /mnt/nas/shared # знаю, что так не делается, но это pet-проект и доступ только из локалки;
sudo chown -R nobody:nogroup /mnt/nas/shared

После этого перезапустил SMB:

sudo systemctl restart smbd

Далее открыл файл конфигурации:

sudo nano /etc/samba/smb.conf

Добавил новый раздел [shared] и прописал путь и разрешения:

[shared]
  path = /mnt/nas/shared
  public = yes
  guest ok = yes
  browseable = yes
  read only = no
  writable = yes
  force user = nobody
  force group = nogroup
  create mask = 0777
  directory mask = 0777

После этого снова перезапустил SMB и радостно подключился к созданному диску по ip:

sudo systemctl restart smbd

Проблемы с доступом на iOS

Но самое интересное началось позже. При подключении к удалённому серверу с iOS через стоковое приложение "Файлы" я столкнулся с ограничением прав — доступ был только на чтение. При этом на macOS такой проблемы не было. Немного погуглив, я заподозрил, что проблема может быть в несовместимости версий протокола SMB. Хоть и звучит неубедительно (обратную совместимость никто не отменял) — решил проверить.

Я вернулся в конфигурацию smb.conf и добавил в раздел [global] следующие настройки:

[global]
  security = user
  server min protocol = SMB2
  server max protocol = SMB3
  smb encrypt = auto
  ntlm auth = yes

Как и ожидалось, это не помогло

Я ещё несколько дней гуглил, тестировал, менял конфиг — и снова по кругу.

Решение проблемы

Решение оказалось неожиданно простым. Стоковый SMB не очень хорошо дружит с Apple File System (APFS) так как изначально SMB создавался Windows, а у Apple был свой сетевой файловый протокол AFP (на данный момент устаревший).

Для исправления проблем с совместимостью с устройствами Apple необходимо использовать VFS модуль Fruit за который скажем спасибо Ralph Böhme из SerNet. VFS Fruit определяет как хранить метаданные, ресурсные форки и обеспечивает корректную кодировку текста. Ссылку на документацию Samba и VFS Fruit приложил в конце статьи.

Я добавил в [global] следующие параметры и проблемы с совместимостью были решены.

# Исправление проблем совместимости с macOS/iOS
  vfs objects = catia fruit streams_xattr
  fruit:metadata = stream
  fruit:model = MacSamba
  fruit:veto_appledouble = no
  fruit:posix_rename = yes
  fruit:zero_file_id = yes
  fruit:wipe_intentionally_left_blank_rfork = yes
  fruit:delete_empty_adfiles = yes
  fruit:time machine = yes

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

Ссылки

Автор: AndrewDram

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js