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

319 lines
12 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 отключён по умолчанию)
- Поддержка Time Machine для macOS
- Встроенная корзина (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 |
### Формат параметра шары (-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` | Путь к дополнительному конфиг-файлу |
## Примеры
### Установка часового пояса
```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
```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
- Ограничивайте доступ к шарам конкретным пользователям
## Обратная связь
При возникновении проблем или вопросов создайте [issue на GitHub](https://github.com/upagge/samba/issues).