Files
samba/README_RU.md
Struchkov Mark b8103cc60a Fix -G parameters not overriding global settings for shares
Problem: When using environment variables, GENERIC was processed before
SHARE, so share sections didn't exist when -G options tried to modify them.
Also, \s regex was not POSIX-compatible for Alpine/busybox.

Changes:
- Reorder env var processing: GLOBAL -> SHARE -> GENERIC
- Replace \s with [[:space:]] in regex patterns
- Add ^ anchor to sed append command
- Add CHANGELOG.md documenting the fix
- Update README.md (sync with Russian version)
- Update README_RU.md with troubleshooting section

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

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

12 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

Формат параметра шары (-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 Разрешить широкие символические ссылки
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
  • Ограничивайте доступ к шарам конкретным пользователям

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

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