Files
digital-garden/dev/snippet/Файловый сервер на Samba.md
Struchkov Mark fd2e2e8ab7
All checks were successful
continuous-integration/drone/push Build is passing
Файловый сервер на Samba.md
2026-01-08 01:32:24 +03:00

11 KiB
Raw Blame History

aliases, tags, date, zero-link, parents, linked
aliases tags date zero-link parents linked
maturity/🌱
2024-09-06
../../meta/zero/00 Snippets
../devops/docker/Полезные Docker образы

Samba — свободное программное обеспечение для организации файлового сервера на базе протокола SMB/CIFS. С 1992 года обеспечивает безопасный и стабильный обмен файлами между всеми клиентами, использующими SMB/CIFS: Windows, macOS, Linux и другими.

Особенности образа

  • Базовый образ Alpine Linux (минимальный размер)
  • Поддержка SMB2/SMB3 (SMB1 отключен по умолчанию)
  • Поддержка Time Machine для macOS
  • Встроенная корзина для удаленных файлов
  • Оптимизированные настройки производительности
  • Healthcheck для мониторинга состояния

Быстрый старт

Docker Compose

services:
  samba:
    image: docker.struchkov.dev/samba:latest
    restart: unless-stopped
    container_name: samba
    hostname: samba
    ports:
      - "139:139/tcp"
      - "445:445/tcp"
    volumes:
      - ./data:/cloud
    command: '-p -u "user1;pass1" -s "share;/cloud;yes;no;no;user1"'

Docker Compose с NetBIOS

Если требуется обнаружение в сети через NetBIOS, добавьте флаг -n и порты 137-138/udp:

services:
  samba:
    image: docker.struchkov.dev/samba:latest
    restart: unless-stopped
    ports:
      - "139:139/tcp"
      - "445:445/tcp"
      - "137:137/udp"
      - "138:138/udp"
    volumes:
      - ./data:/cloud
    command: '-n -p -u "user1;pass1" -s "share;/cloud;yes;no;no;user1"'

Параметры командной строки

Флаг Описание
-h Показать справку
-c "<from:to>" Настроить маппинг символов для имен файлов/директорий
-g "<параметр>" Добавить глобальную опцию в smb.conf
-G "<секция;параметр>" Добавить опцию в конкретную секцию smb.conf
-i "<путь>" Импортировать файл smbpasswd
-n Запустить демон nmbd для объявления шар в сети
-p Установить владельца и права на расшаренные директории
-r Отключить корзину для шар
-S Отключить минимальную версию SMB2 (разрешить SMB1)
-t Включить поддержку Time Machine для macOS
-s Настроить шару (см. формат ниже)
-u Добавить пользователя (см. формат ниже)
-w "<workgroup>" Настроить рабочую группу (домен)
-W Разрешить широкие символические ссылки
-I "<путь>" Добавить include в конец smb.conf
-E Включить усиленную безопасность (подпись + шифрование)

Формат параметра шары (-s)

-s "<name;/path>[;browse;readonly;guest;users;admins;writelist;comment]"
Поле По умолчанию Описание
name обязательно Имя шары для клиентов
/path обязательно Путь к директории
browse yes Видна при обзоре сети (yes/no)
readonly yes Только чтение (yes/no)
guest yes Разрешить гостевой доступ (yes/no)
users all Список разрешенных пользователей (через запятую)
admins none Список администраторов шары (через запятую)
writelist Пользователи с правом записи на RO-шаре
comment Описание шары

Формат параметра пользователя (-u)

-u "<name;password>[;ID;group;GID]"
Поле Описание
name Имя пользователя (обязательно)
password Пароль (обязательно)
ID UID пользователя (опционально)
group Группа пользователя (опционально)
GID GID группы (опционально)

Переменные окружения

Альтернатива параметрам командной строки. Для множественных значений используйте нумерацию: SHARE, SHARE2, SHARE3...

Переменная Описание
SHARE Конфигурация шары (поддерживает SHARE2, SHARE3...)
USER Конфигурация пользователя (поддерживает USER2, USER3...)
GLOBAL Глобальная опция (поддерживает GLOBAL2, GLOBAL3...)
GENERIC Опция для секции (поддерживает GENERIC2, GENERIC3...)
CHARMAP Маппинг символов
IMPORT Путь к файлу smbpasswd для импорта
NMBD Включить демон nmbd
PERMISSIONS Установить права на шары
RECYCLE Отключить корзину
SMB Отключить минимальную версию SMB2
TIMEMACHINE Включить поддержку Time Machine
SECURE Включить усиленную безопасность
WORKGROUP Рабочая группа
WIDELINKS Разрешить широкие символические ссылки
USERID UID для пользователя smbuser
GROUPID GID для группы smb
INCLUDE Путь к дополнительному конфиг-файлу
TZ Часовой пояс (например, Europe/Moscow)

Пример с переменными окружения

services:
  samba:
    image: docker.struchkov.dev/samba:latest
    restart: unless-stopped
    environment:
      TZ: 'Europe/Moscow'
      SHARE: "Documents;/documents;yes;no;no;user1,user2"
      SHARE2: "Media;/media;yes;yes;yes"
      USER: "user1;${SAMBA_USER1_PASSWORD}"
      USER2: "user2;${SAMBA_USER2_PASSWORD}"
      PERMISSIONS: "true"
    ports:
      - "139:139/tcp"
      - "445:445/tcp"
    volumes:
      - /mnt/documents:/documents
      - /mnt/media:/media

Порты

Порт Протокол Описание
137 UDP NetBIOS Name Service (только с -n)
138 UDP NetBIOS Datagram Service (только с -n)
139 TCP SMB over NetBIOS
445 TCP SMB direct

Порты 137 и 138 нужны только при использовании флага -n или переменной NMBD.

Time Machine для macOS

Для резервного копирования macOS через Time Machine:

docker run -d -p 139:139 -p 445:445 \
    -v /mnt/backup:/backup \
    docker.struchkov.dev/samba:latest -p -t \
    -u "macuser;password" \
    -s "TimeMachine;/backup;no;no;no;macuser"

Усиленная безопасность

Для сред, требующих дополнительной защиты, используйте флаг -E или переменную SECURE=true:

docker run -d -p 445:445 docker.struchkov.dev/samba:latest -E -p \
    -u "user;password" \
    -s "secure_share;/data;yes;no;no;user"

Это включает:

  • Server signing (mandatory) — предотвращает подмену пакетов
  • Client signing (mandatory) — гарантирует подлинность клиента
  • SMB encryption (desired) — шифрует трафик, если клиент поддерживает

Примечание: некоторые старые клиенты могут не поддерживать эти функции.

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

Ошибка "Access is denied"

Если в логах change_to_user_internal: chdir_current_service() failed!:

docker run -d -p 139:139 -p 445:445 \
    -v /path/to/directory:/mount \
    docker.struchkov.dev/samba:latest -p

Добавьте флаг -p или переменную PERMISSIONS=true.

Если изменение прав невозможно, используйте USERID и GROUPID:

docker run -d -p 139:139 -p 445:445 \
    -e USERID=1000 \
    -e GROUPID=1000 \
    -v /path/to/directory:/mount \
    docker.struchkov.dev/samba:latest

Подключение через smbclient

По умолчанию smbclient пытается использовать SMB1. Используйте флаг -m SMB3:

smbclient -L \\\\localhost -U % -m SMB3
smbclient //localhost/share -U user -m SMB3

Параметры -G не переопределяют глобальные настройки

Убедитесь, что используете актуальную версию образа. В старых версиях GENERIC обрабатывался до SHARE, поэтому секции шар ещё не существовали.

Корректный пример:

docker run -d -p 139:139 -p 445:445 docker.struchkov.dev/samba:latest \
    -s "public;/cloud/share;yes;no;yes" \
    -G "public;force user = nobody" \
    -G "public;force group = nogroup"

Мета информация

Область:: ../../meta/zero/00 Snippets Родитель:: ../devops/docker/Полезные Docker образы Источник:: Автор:: Создана:: 2024-09-06

Дополнительные материалы

Дочерние заметки