Files
samba/README_RU.md
Struchkov Mark 82f7a761c5
All checks were successful
continuous-integration/drone/push Build is passing
docs: update documentation with new features
- Add -E flag and SECURE env variable to README.md and README_RU.md
- Document enhanced security mode (signing + encryption)
- Add usage examples for secure mode

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 22:28:35 +03:00

14 KiB
Raw Blame History

logo

Samba

Docker-контейнер для файлового сервера Samba.

О форке

Этот репозиторий является форком проекта dperson/samba, который давно не обновлялся. Данная версия содержит актуальную версию Samba для текущей версии Alpine Linux.

Версии Samba

Теги образа соответствуют версии Samba в контейнере. Используйте нужный тег для получения требуемой версии. Последняя стабильная версия всегда имеет тег latest, а версия в разработке — тег develop.

Версия Samba соответствует той, что доступна для установки в Alpine. Если новая версия Samba ещё не доступна в образе, это означает, что она ещё не обновлена в Alpine.

Что такое Samba?

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

Возможности образа

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

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

Запуск с настройками по умолчанию

docker run -it -p 139:139 -p 445:445 -d upagge/samba -p

Запуск с локальным хранилищем

docker run -it --name samba -p 139:139 -p 445:445 \
    -v /path/to/directory:/mount \
    -d upagge/samba -p

Запуск с docker-compose

services:
  samba:
    image: upagge/samba
    restart: unless-stopped
    ports:
      - "139:139/tcp"
      - "445:445/tcp"
    volumes:
      - /mnt/data:/share
    command: '-s "Data;/share;yes;no;no" -u "user;password" -p'

Конфигурация

Справка по параметрам

docker run -it --rm upagge/samba -h

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

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

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

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

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

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

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

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

Примеры

Установка часового пояса

docker run -it -e TZ=Europe/Moscow -p 139:139 -p 445:445 -d upagge/samba -p

Создание пользователей и шар

docker run -it -p 139:139 -p 445:445 -d upagge/samba -p \
    -u "user1;password1" \
    -u "user2;password2" \
    -s "public;/share;yes;no;yes" \
    -s "users;/srv;no;no;no;user1,user2" \
    -s "user1_private;/user1;no;no;no;user1" \
    -s "user2_private;/user2;no;no;no;user2"

Включение Time Machine

docker run -it -p 139:139 -p 445:445 -d upagge/samba -p -t \
    -u "macuser;password" \
    -s "TimeMachine;/backup;no;no;no;macuser"

Использование переменных окружения

docker run -it -p 139:139 -p 445:445 \
    -e SHARE="Data;/data;yes;no;no" \
    -e SHARE2="Backup;/backup;yes;yes;no" \
    -e USER="admin;secretpass" \
    -e PERMISSIONS="true" \
    -e TZ="Europe/Moscow" \
    -v /mnt/data:/data \
    -v /mnt/backup:/backup \
    -d upagge/samba

Полный docker-compose.yml

services:
  samba:
    image: upagge/samba
    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
    deploy:
      resources:
        limits:
          memory: 512M
    healthcheck:
      test: ["CMD", "smbclient", "-L", "\\\\localhost", "-U", "%", "-m", "SMB3"]
      interval: 60s
      timeout: 15s
      start_period: 10s
      retries: 3

Порты

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

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

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

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

Если параметры -G для отдельных шар не переопределяют глобальные настройки force user и force group, убедитесь, что вы используете актуальную версию образа.

Проблема была исправлена: при использовании переменных окружения GENERIC обрабатывался до SHARE, поэтому секции шар ещё не существовали. Теперь порядок обработки исправлен.

Пример корректного использования:

docker run -it -p 139:139 -p 445:445 -d upagge/samba \
    -s "public;/cloud/share;yes;no;yes" \
    -G "public;force user = nobody" \
    -G "public;force group = nogroup" \
    -G "public;guest ok = yes" \
    -G "public;read only = no"

Или с переменными окружения:

docker run -it -p 139:139 -p 445:445 \
    -e SHARE="public;/cloud/share;yes;no;yes" \
    -e GENERIC="public;force user = nobody" \
    -e GENERIC2="public;force group = nogroup" \
    -d upagge/samba

Ошибка "Access is denied"

Если вы получаете ошибку Access is denied или видите в логах change_to_user_internal: chdir_current_service() failed!:

docker run -it --name samba -p 139:139 -p 445:445 \
    -v /path/to/directory:/mount \
    -d upagge/samba -p

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

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

docker run -it --name samba -p 139:139 -p 445:445 \
    -e USERID=1000 \
    -e GROUPID=1000 \
    -v /path/to/directory:/mount \
    -d upagge/samba

Высокое потребление памяти

Ограничьте память контейнера:

docker run -it --name samba -m 512m -p 139:139 -p 445:445 \
    -v /path/to/directory:/mount \
    -d upagge/samba -p

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

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

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

NetBIOS не работает

При использовании -n или NMBD может потребоваться сетевой режим хоста:

docker run -it --network host \
    -e NMBD=true \
    -d upagge/samba -n -p \
    -s "share;/data"

Безопасность

  • По умолчанию используется только SMB2/SMB3 (SMB1 отключён)
  • Рекомендуется использовать сложные пароли
  • Храните пароли в .env файле или секретах Docker
  • Ограничивайте доступ к шарам конкретным пользователям

Режим усиленной безопасности

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

docker run -it -p 445:445 -d upagge/samba -E -p \
    -u "user;password" \
    -s "secure_share;/data;yes;no;no;user"

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

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

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

Обратная связь

При возникновении проблем или вопросов создайте issue на GitHub.