11 KiB
aliases, tags, date, zero-link, parents, linked
| aliases | tags | date | zero-link | parents | linked | |||
|---|---|---|---|---|---|---|---|---|
|
2024-09-06 |
|
|
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
Дополнительные материалы
- Исходный код проекта. Форк, который я поддерживаю в актуальном состоянии.
- Оригинальный репозиторий на GitHub. Не поддерживается и не обновляется.
- Образ проекта в моем Nexus