Files
samba/README_RU.md
Struchkov Mark 74d952edb4
Some checks reported errors
continuous-integration/drone/push Build encountered an error
macos
2026-01-23 20:18:53 +03:00

342 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[![logo](https://raw.githubusercontent.com/upagge/samba/master/logo.jpg)](https://www.samba.org)
# Samba
Docker-контейнер для файлового сервера Samba.
## О форке
Этот репозиторий является форком проекта [dperson/samba](https://github.com/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 отключён по умолчанию)
- Встроенная совместимость с macOS (расширенные атрибуты, метаданные)
- Опциональная поддержка Time Machine
- Встроенная корзина (recycle bin)
- Оптимизированные настройки производительности
- Healthcheck для мониторинга состояния
## Быстрый старт
### Запуск с настройками по умолчанию
```bash
docker run -it -p 139:139 -p 445:445 -d upagge/samba -p
```
### Запуск с локальным хранилищем
```bash
docker run -it --name samba -p 139:139 -p 445:445 \
-v /path/to/directory:/mount \
-d upagge/samba -p
```
### Запуск с docker-compose
```yaml
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'
```
## Конфигурация
### Справка по параметрам
```bash
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 (базовая совместимость с macOS уже включена) |
| `TZ` | Часовой пояс (например, `Europe/Moscow`) |
| `USER` | Настройка пользователя (поддерживает USER2, USER3...) |
| `WIDELINKS` | Разрешить широкие символические ссылки |
| `SECURE` | Включить усиленную безопасность (подпись + шифрование) |
| `WORKGROUP` | Рабочая группа |
| `USERID` | UID для пользователя smbuser |
| `GROUPID` | GID для группы smb |
| `INCLUDE` | Путь к дополнительному конфиг-файлу |
## Примеры
### Установка часового пояса
```bash
docker run -it -e TZ=Europe/Moscow -p 139:139 -p 445:445 -d upagge/samba -p
```
### Создание пользователей и шар
```bash
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
> **Примечание:** Базовая совместимость с macOS (расширенные атрибуты, обработка метаданных) **уже включена** по умолчанию.
> Флаг `-t` добавляет специфичные для Time Machine настройки для обнаружения бэкапов.
```bash
docker run -it -p 139:139 -p 445:445 -d upagge/samba -p -t \
-u "macuser;password" \
-s "TimeMachine;/backup;no;no;no;macuser"
```
### Использование переменных окружения
```bash
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
```yaml
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`, поэтому секции шар ещё не существовали. Теперь порядок обработки исправлен.
Пример корректного использования:
```bash
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"
```
Или с переменными окружения:
```bash
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!`:
```bash
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`:
```bash
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
```
### Высокое потребление памяти
Ограничьте память контейнера:
```bash
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`:
```bash
smbclient -L \\localhost -U % -m SMB3
smbclient //localhost/share -U user -m SMB3
```
### NetBIOS не работает
При использовании `-n` или `NMBD` может потребоваться сетевой режим хоста:
```bash
docker run -it --network host \
-e NMBD=true \
-d upagge/samba -n -p \
-s "share;/data"
```
## Безопасность
- По умолчанию используется только SMB2/SMB3 (SMB1 отключён)
- Рекомендуется использовать сложные пароли
- Храните пароли в `.env` файле или секретах Docker
- Ограничивайте доступ к шарам конкретным пользователям
### Режим усиленной безопасности
Для сред, требующих дополнительной защиты, используйте флаг `-E` или переменную окружения `SECURE=true`:
```bash
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](https://github.com/upagge/samba/issues).