15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
08.10.2024

Как установить и настроить Samba на Linux: полное техническое руководство

Samba — это реализация протокола SMB/CIFS (Server Message Block / Common Internet File System) с открытым исходным кодом, которая позволяет серверам на базе Linux и Unix совместно использовать файлы, принтеры и другие ресурсы с клиентами Windows — и с другими машинами на Linux. Она выступает мостом между операционными системами, являясь де-факто стандартом для кросс-платформенного сетевого обмена файлами в смешанных средах.

Если коротко: установка Samba на Linux требует установки пакета `samba` через менеджер пакетов вашего дистрибутива, определения блоков общих ресурсов в `/etc/samba/smb.conf`, создания учётных данных пользователей Samba с помощью `smbpasswd` и открытия портов 137–139 и 445 в брандмауэре. В разделах ниже каждый уровень этого процесса рассматривается с точными техническими подробностями.

Что Samba делает под капотом

Samba работает как набор демонов. Понимание того, какой демон за что отвечает, позволяет избежать значительного числа ошибок конфигурации:

  • `smbd` — обрабатывает совместное использование файлов и принтеров, аутентификацию и блокировку ресурсов через TCP-порты 445 и 139.
  • `nmbd` — управляет разрешением имён NetBIOS через UDP-порты 137 и 138. Требуется для просмотра сети Windows (Сетевое окружение / «Сеть» в Проводнике).
  • `winbindd` — интегрирует Samba с Active Directory или доменами NT4, обеспечивая аутентификацию доменных пользователей на хосте Linux. Не требуется для автономного обмена файлами.

Когда клиент Windows открывает `servershare`, он сначала разрешает имя сервера через DNS или NetBIOS (nmbd), затем устанавливает сеанс SMB с smbd через порт 445. Samba согласовывает наивысший взаимно поддерживаемый диалект SMB — SMB 3.1.1 на современных системах — и сопоставляет удалённый ресурс с буквой диска или UNC-путём на клиенте.

Предварительные требования

Перед началом убедитесь в следующем:

  • Сервер Linux под управлением Ubuntu 20.04/22.04/24.04, Debian 11/12, CentOS Stream 8/9, RHEL 8/9 или Fedora 38+.
  • Доступ с правами root или `sudo`.
  • Статический частный IP-адрес, назначенный серверу (критически важно для стабильного монтирования общих ресурсов).
  • Базовые знания работы с терминалом и правами доступа к файлам.
  • Доступ к брандмауэру (UFW, firewalld или iptables) для открытия необходимых портов.

Если вы развёртываете Samba на облачном или виртуальном сервере, среда VPS Хостинга предоставляет полный root-доступ и контроль над сетью, необходимые для управления демонами, правилами брандмауэра и постоянными монтированиями без ограничений общих сред.

Шаг 1: Установка Samba

Используйте менеджер пакетов, подходящий для вашего дистрибутива. Всегда сначала обновляйте индекс пакетов, чтобы избежать установки устаревших версий.

Debian / Ubuntu:

“`bash

sudo apt-get update

sudo apt-get install samba samba-common-bin

“`

CentOS Stream / RHEL:

“`bash

sudo dnf install samba samba-client samba-common

“`

Fedora:

“`bash

sudo dnf install samba samba-client samba-common

“`

Arch Linux:

“`bash

sudo pacman -S samba

“`

После установки проверьте установленную версию:

“`bash

smbd –version

“`

На системах на базе RHEL также установите `samba-client`, чтобы получить диагностическую утилиту `smbclient`, которая понадобится на последующих шагах для тестирования подключения.

Шаг 2: Резервное копирование и редактирование основного файла конфигурации

Вся конфигурация Samba хранится в `/etc/samba/smb.conf`. Этот единственный файл управляет глобальным поведением сервера, моделью безопасности, определениями общих ресурсов и ведением журналов. Перед его изменением создайте резервную копию с временной меткой:

“`bash

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup.$(date +%F)

“`

Откройте файл для редактирования:

“`bash

sudo nano /etc/samba/smb.conf

“`

Файл разделён на секции. Секция `[global]` определяет общесерверные параметры. Отдельные секции общих ресурсов (например, `[sambashare]`) определяют конкретные общие ресурсы.

Критически важные глобальные параметры для проверки

В секции `[global]` обратите внимание на следующие настройки:

“`ini

[global]

workgroup = WORKGROUP

server string = Samba Server %v

netbios name = MYSERVER

security = user

map to guest = bad user

dns proxy = no

log file = /var/log/samba/log.%m

max log size = 1000

logging = file

panic action = /usr/share/samba/panic-action %d

server role = standalone server

obey pam restrictions = yes

unix password sync = yes

passwd program = /usr/bin/passwd %u

passwd chat = *Entersnews*spassword:* %nn *Retypesnews*spassword:* %nn *passwordsupdatedssuccessfully* .

pam password change = yes

min protocol = SMB2

max protocol = SMB3

“`

Ключевое замечание: Директива `min protocol = SMB2` явно отключает SMB1, который устарел с 2014 года и является вектором для эксплойтов, таких как EternalBlue (MS17-010). Никогда не оставляйте SMB1 включённым на производственном сервере. Современные Windows 10/11 и все актуальные клиенты Linux CIFS поддерживают SMB2 и SMB3 нативно.

Шаг 3: Создание и подготовка общего каталога

Создайте каталог, который будет доступен по сети:

“`bash

sudo mkdir -p /srv/sambashare

“`

Установите владельца и права доступа. Правильный подход зависит от того, хотите ли вы гостевой доступ или доступ только для аутентифицированных пользователей.

Для доступа аутентифицированных пользователей (рекомендуется для производственной среды):

“`bash

sudo chown root:sambashare /srv/sambashare

sudo chmod 2770 /srv/sambashare

“`

Права `2770` расшифровываются следующим образом:

  • `2` — бит setgid: новые файлы наследуют группу каталога, предотвращая фрагментацию владельца в многопользовательских общих ресурсах.
  • `7` — владелец (root) имеет права на чтение, запись, выполнение.
  • `7` — группа (sambashare) имеет права на чтение, запись, выполнение.
  • `0` — остальные не имеют доступа.

Для гостевого/публичного доступа (домашняя лаборатория или внутренняя LAN):

“`bash

sudo chown nobody:nogroup /srv/sambashare

sudo chmod 0777 /srv/sambashare

“`

Не используйте `0777` на серверах, доступных из интернета. Гостевые общие ресурсы с правами записи для всех подходят только для изолированных, доверенных сетей.

Шаг 4: Создание системной группы и пользователя

Для аутентифицированных общих ресурсов создайте выделенную группу Linux, соответствующую вашему общему ресурсу Samba:

“`bash

sudo groupadd sambashare

“`

Добавьте пользователя Linux, который будет иметь доступ к общему ресурсу:

“`bash

sudo useradd -M -s /sbin/nologin sambauser

sudo usermod -aG sambashare sambauser

“`

Флаг `-M` пропускает создание домашнего каталога (это служебная учётная запись, а не интерактивный пользователь). Флаг `-s /sbin/nologin` запрещает использование учётной записи для входа через SSH или консоль — критически важный шаг по усилению безопасности, который большинство руководств упускают.

Теперь зарегистрируйте пользователя в собственной базе данных паролей Samba (отдельной от `/etc/shadow`):

“`bash

sudo smbpasswd -a sambauser

sudo smbpasswd -e sambauser

“`

Флаг `-a` добавляет пользователя; флаг `-e` активирует учётную запись. Samba ведёт собственное хранилище учётных данных по адресу `/var/lib/samba/private/passdb.tdb` (или файл `smbpasswd` в зависимости от настройки `passdb backend`). Пользователь может существовать в Linux без регистрации в базе данных Samba, и наоборот — он должен быть зарегистрирован в обеих системах.

Шаг 5: Определение общего ресурса в smb.conf

Добавьте следующий блок в конец `/etc/samba/smb.conf`. Показаны две конфигурации: одна для аутентифицированного доступа, другая для гостевого.

Аутентифицированный общий ресурс (рекомендуется для производственной среды)

“`ini

[sambashare]

path = /srv/sambashare

comment = Authenticated Network Share

browsable = yes

writable = yes

read only = no

guest ok = no

valid users = @sambashare

create mask = 0660

directory mask = 2770

force group = sambashare

“`

Описание параметров:

  • `valid users = @sambashare` — префикс `@` означает «любой член группы Linux с именем sambashare». Это более масштабируемо, чем перечисление отдельных имён пользователей.
  • `create mask = 0660` — новые файлы создаются с правами rw-rw—-, предотвращая создание файлов, доступных для чтения всем.
  • `directory mask = 2770` — новые подкаталоги наследуют бит setgid и права группы.
  • `force group = sambashare` — принудительно использует группу sambashare для всех файловых операций, независимо от основной группы подключающегося пользователя.

Гостевой общий ресурс (домашняя лаборатория / внутренняя LAN)

“`ini

[public]

path = /srv/sambashare

comment = Public Network Share

browsable = yes

writable = yes

read only = no

guest ok = yes

guest account = nobody

create mask = 0664

directory mask = 0775

“`

Шаг 6: Проверка конфигурации

Перед перезапуском любой службы запустите встроенный анализатор конфигурации:

“`bash

testparm

“`

`testparm` читает `smb.conf`, сообщает о синтаксических ошибках и выводит эффективную конфигурацию после применения значений по умолчанию. Обратите внимание на строки `WARNING` — они часто указывают на устаревшие параметры или неправильные настройки безопасности. Чистый вывод заканчивается следующим:

“`

Loaded services file OK.

Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

“`

Если `testparm` сообщает об ошибках, исправьте их перед продолжением. Перезапуск smbd с повреждённым файлом конфигурации приводит к тому, что служба завершается без сообщений об ошибках или возвращается к значениям по умолчанию.

Шаг 7: Перезапуск и включение демонов Samba

Debian / Ubuntu:

“`bash

sudo systemctl restart smbd nmbd

sudo systemctl enable smbd nmbd

“`

CentOS / RHEL / Fedora:

“`bash

sudo systemctl restart smb nmb

sudo systemctl enable smb nmb

“`

Убедитесь, что оба демона запущены:

“`bash

sudo systemctl status smbd nmbd # Debian/Ubuntu

sudo systemctl status smb nmb # RHEL/Fedora

“`

Проверьте, что демоны прослушивают правильные порты:

“`bash

sudo ss -tlnp | grep -E '(smbd|nmbd|445|139)'

“`

Ожидаемый вывод должен показывать `smbd`, привязанный к портам 445 и 139.

Шаг 8: Настройка правил брандмауэра

Samba требует открытия следующих портов:

ПортПротоколСлужбаНазначение
—————-——————
137UDPnmbdСлужба имён NetBIOS
138UDPnmbdСлужба датаграмм NetBIOS
139TCPsmbdСлужба сеансов NetBIOS (SMB через NetBIOS)
445TCPsmbdПрямой SMB (SMB2/SMB3 — основной порт)

UFW (Debian/Ubuntu):

“`bash

sudo ufw allow 'Samba'

sudo ufw status

“`

firewalld (CentOS/RHEL/Fedora):

“`bash

sudo firewall-cmd –permanent –add-service=samba

sudo firewall-cmd –reload

sudo firewall-cmd –list-services

“`

iptables (вручную):

“`bash

sudo iptables -A INPUT -p tcp –dport 445 -j ACCEPT

sudo iptables -A INPUT -p tcp –dport 139 -j ACCEPT

sudo iptables -A INPUT -p udp –dport 137:138 -j ACCEPT

“`

Примечание по безопасности: Если ваш сервер Samba доступен из интернета (не рекомендуется для стандартного обмена файлами), ограничьте эти правила конкретными диапазонами исходных IP-адресов с помощью `-s 192.168.1.0/24` или аналогичного средства. Открытие портов SMB в публичный интернет представляет серьёзную угрозу безопасности.

Шаг 9: Настройка SELinux (RHEL/CentOS/Fedora)

На системах с принудительным применением SELinux Samba требует дополнительных меток контекста для общих каталогов. Без них smbd будет заблокирован при попытке доступа к пути, даже если права Linux настроены правильно.

“`bash

sudo setsebool -P samba_enable_home_dirs on

sudo setsebool -P samba_export_all_rw on

sudo semanage fcontext -a -t samba_share_t "/srv/sambashare(/.*)?"

sudo restorecon -Rv /srv/sambashare

“`

Проверьте, что контекст был применён:

“`bash

ls -lZ /srv/sambashare

“`

В выводе должен отображаться `system_u:object_r:samba_share_t:s0` в качестве контекста SELinux. Пропуск этого шага является наиболее распространённой причиной сбоев общих ресурсов Samba на системах семейства RHEL — служба запускается корректно, но клиенты получают ошибки «Доступ запрещён».

Шаг 10: Доступ к общему ресурсу из Windows

На клиенте Windows:

  1. Откройте Проводник.
  2. В адресной строке введите: `<server-ip>sambashare` и нажмите Enter.
  3. При появлении запроса введите имя пользователя и пароль Samba.
  4. Чтобы сделать подключение постоянным, щёлкните правой кнопкой мыши по общему ресурсу и выберите Подключить сетевой диск.

Для сценариев или корпоративных развёртываний подключите диск из командной строки:

“`cmd

net use Z: 192.168.1.100sambashare /user:sambauser /persistent:yes

“`

Шаг 11: Доступ к общему ресурсу из Linux

Использование smbclient (интерактивный режим, для тестирования):

“`bash

smbclient //192.168.1.100/sambashare -U sambauser

“`

Откроется интерактивная оболочка, похожая на FTP. Используйте `ls`, `get`, `put` и `exit` для навигации и передачи файлов.

Постоянное монтирование общего ресурса через CIFS:

Сначала установите пакет утилит CIFS:

“`bash

sudo apt-get install cifs-utils # Debian/Ubuntu

sudo dnf install cifs-utils # RHEL/Fedora

“`

Создайте точку монтирования и файл учётных данных (никогда не указывайте пароли в `/etc/fstab` в открытом виде):

“`bash

sudo mkdir -p /mnt/sambashare

sudo nano /etc/samba/credentials

“`

Содержимое файла учётных данных:

“`

username=sambauser

password=yourpassword

domain=WORKGROUP

“`

Защитите файл учётных данных:

“`bash

sudo chmod 600 /etc/samba/credentials

sudo chown root:root /etc/samba/credentials

“`

Добавьте монтирование в `/etc/fstab` для сохранения после перезагрузки:

“`

//192.168.1.100/sambashare /mnt/sambashare cifs credentials=/etc/samba/credentials,uid=1000,gid=1000,iocharset=utf8,vers=3.0,_netdev 0 0

“`

Параметр `_netdev` указывает системе ожидать доступности сети перед попыткой монтирования — это необходимо на серверах, монтирующих сетевые ресурсы при загрузке. Параметр `vers=3.0` принудительно использует SMB3, избегая возврата к более старым диалектам.

Проверьте запись fstab без перезагрузки:

“`bash

sudo mount -a

“`

Сравнение версий протокола SMB

Выбор правильного диалекта SMB влияет на производительность, безопасность и совместимость. В следующей таблице приведены ключевые различия:

Версия SMBГодКлючевые возможностиБезопасностьРекомендуемое использование
————-——————–———-—————–
SMB11983Базовый обмен файламиКритически уязвим (EternalBlue)Никогда не использовать — отключить явно
SMB22006Конвейеризация, снижение «болтливости», подписьУлучшенаУстаревшие клиенты Windows Vista/7
SMB2.12010Аренда клиентских блокировок oplockУлучшенаWindows 7/2008 R2
SMB3.02012Многоканальность, шифрование, отказоустойчивостьВысокаяWindows 8/2012 и новее
SMB3.1.12015Целостность до аутентификации, AES-128-GCMНаивысшаяWindows 10/11, современный Linux

Всегда устанавливайте `min protocol = SMB2` в `[global]` и предпочитайте `SMB3` там, где все клиенты его поддерживают. SMB3.1.1 с шифрованием (`smb encrypt = required`) — правильный выбор для любого общего ресурса, содержащего конфиденциальные данные.

Samba против NFS: выбор правильного протокола

Как Samba (SMB/CIFS), так и NFS широко используются для сетевого обмена файлами на базе Linux, но они предназначены для разных сценариев использования:

КритерийSamba (SMB/CIFS)NFS
———-—————–—–
Основной сценарий использованияКросс-платформенный (Linux + Windows)Обмен файлами Linux-Linux
Поддержка клиентов WindowsНативная, без дополнительного ПОТребует установки клиента NFS
Поддержка macOSНативная (SMB)Поддерживается через встроенный клиент NFS
АутентификацияИмя пользователя/пароль, интеграция с ADНа основе хоста (IP/имя хоста)
Производительность (LAN)Несколько большие накладные расходыМеньшие накладные расходы, быстрее в LAN
ШифрованиеSMB3 поддерживает шифрование AESNFSv4.2 поддерживает шифрование krb5
Сложность настройкиУмереннаяНиже для сред только на Linux
Лучше подходит дляСмешанные ОС, интеграция с доменомОднородные кластеры Linux, HPC

Если ваша инфраструктура состоит исключительно из Linux — например, кластер Выделенных серверов, выполняющих контейнеризированные рабочие нагрузки — NFS может обеспечить меньшую задержку. Для любой среды с клиентами Windows или пользователями macOS Samba является правильным выбором.

Распространённые ошибки и устранение неполадок

Общий ресурс виден, но возвращает «Доступ запрещён»

  • На системах с SELinux: Проверьте и примените контекст `samba_share_t`, как описано в шаге 9.
  • Проверьте права Linux: Подключающийся пользователь (или учётная запись `nobody` для гостевых ресурсов) должен иметь права на чтение/запись на уровне файловой системы к указанному пути, независимо от собственных ACL Samba.
  • Проверьте smbpasswd: Пользователь должен быть добавлен с помощью `smbpasswd -a` и активирован с помощью `smbpasswd -e`.

Общий ресурс не виден при просмотре сети

  • Убедитесь, что `nmbd` запущен: `sudo systemctl status nmbd`.
  • Убедитесь, что в определении общего ресурса установлено `browsable = yes`.
  • В Windows 10/11 отключена служба «Обозреватель компьютеров», зависящая от SMB1. Используйте прямые UNC-пути (`ipshare`) вместо обнаружения сети.

Низкая скорость передачи

  • Принудительно используйте SMB3 с `vers=3.0` или `vers=3.1.1` в параметрах монтирования.
  • Включите большой MTU: добавьте `socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072` в `[global]`.
  • Проверьте доступность многоканального SMB: `smbstatus –verbose`.

Журналы и диагностика

“`bash

sudo tail -f /var/log/samba/log.smbd

sudo smbstatus

sudo pdbedit -L -v # List all Samba users

“`

Samba в производственной среде: архитектурные соображения

Для производственных развёртываний, выходящих за рамки простого обмена файлами, рассмотрите следующее:

Интеграция с Active Directory: Samba 4 может функционировать как полноценный контроллер домена Active Directory, поддерживая LDAP, Kerberos, DNS и групповые политики. Это значительный архитектурный шаг за пределы автономного обмена файлами и требует подготовки `samba-ad-dc`.

Общие ресурсы домашних каталогов: Мета-служба `[homes]` в `smb.conf` автоматически создаёт персональный общий ресурс для каждого аутентифицированного пользователя, сопоставленный с его домашним каталогом Linux. Это устраняет необходимость определять отдельные блоки общих ресурсов для каждого пользователя.

Совместное использование принтеров: Samba интегрируется с CUPS для совместного использования принтеров по сети. Определения общих ресурсов `[printers]` и `[print$]` обеспечивают это, хотя совместное использование принтеров стало менее распространённым с развитием облачных служб печати.

Квоты: Samba соблюдает квоты файловой системы Linux. Реализуйте квоты на уровне файловой системы с помощью инструментов `quota`, и Samba будет применять их прозрачно.

Для команд, запускающих веб-приложения вместе с общими файловыми ресурсами, сочетание Samba с VPS с cPanel предоставляет управляемую панель управления для веб-хостинга при сохранении полного SSH-доступа для администрирования Samba. Для сред, требующих нескольких хостинговых служб под одной крышей, ознакомление с доступными Панелями управления VPS поможет определить правильный уровень управления для вашего стека.

Если ваш сервер Samba также размещает веб-контент или данные приложений, защита его с помощью SSL-сертификата для любых связанных веб-служб обеспечивает соответствие всего стека современным стандартам безопасности.

Контрольный список ключевых технических выводов

Используйте этот контрольный список перед тем, как считать развёртывание Samba готовым к производственной эксплуатации:

  • [ ] SMB1 явно отключён через `min protocol = SMB2` в `[global]`
  • [ ] Пользователи Samba созданы с помощью `smbpasswd -a` и активированы с помощью `smbpasswd -e`
  • [ ] Служебные учётные записи используют `-s /sbin/nologin` для блокировки доступа к оболочке
  • [ ] Каталоги общих ресурсов используют бит setgid (`chmod 2770`) для согласованного владения группой
  • [ ] `testparm` выполняется без предупреждений и ошибок
  • [ ] Оба демона `smbd` и `nmbd` включены и запущены
  • [ ] Правила брандмауэра ограничивают порты SMB (445, 139, 137-138) только доверенными исходными IP-адресами
  • [ ] Контекст SELinux (`samba_share_t`) применён на системах RHEL/CentOS/Fedora
  • [ ] Файл учётных данных для монтирования CIFS имеет права `chmod 600` и принадлежит root
  • [ ] Записи `/etc/fstab` используют параметр `_netdev` для монтирований, зависящих от сети
  • [ ] Журналы Samba проверены по адресу `/var/log/samba/` после первоначального развёртывания
  • [ ] `smbstatus` подтверждает активные сеансы и заблокированные файлы после развёртывания

Часто задаваемые вопросы

Какие порты использует Samba и нужно ли открывать все из них?

Samba использует TCP 445 (прямой SMB, обязателен), TCP 139 (SMB через NetBIOS, необходим для устаревших клиентов) и UDP 137-138 (разрешение имён NetBIOS, необходимо для просмотра сети). В современных средах с клиентами Windows 10/11 или Linux, использующими прямые UNC-пути, строго необходим только TCP 445. UDP 137-138 и TCP 139 можно заблокировать, если разрешение имён NetBIOS не требуется.

Почему мой общий ресурс Samba работает из Linux, но возвращает «Доступ запрещён» из Windows?

Это почти всегда проблема кэширования учётных данных на стороне Windows. Windows кэширует учётные данные SMB для каждого сеанса. Откройте Диспетчер учётных данных (Панель управления > Диспетчер учётных данных > Учётные данные Windows), удалите все кэшированные записи для IP-адреса сервера, затем подключитесь повторно. Если проблема не устранена, убедитесь, что пользователь активирован в базе данных Samba с помощью `sudo pdbedit -L -v`.

В чём разница между `security = user` и `security = share` в smb.conf?

`security = share` (безопасность на уровне общего ресурса) устарел и удалён в Samba 4. `security = user` (безопасность на уровне пользователя) — единственный поддерживаемый режим в современной Samba: каждое подключение аутентифицируется по конкретному имени пользователя и паролю. Гостевой доступ обрабатывается отдельно через директивы `guest ok` и `map to guest`, а не через параметр `security`.

Может ли Samba сосуществовать с NFS на одном сервере?

Да. Samba и NFS работают на совершенно разных портах и протоколах и не конфликтуют на сетевом уровне. Однако одновременный доступ к одному каталогу через оба протокола может вызвать конфликты блокировки файлов, особенно при операциях записи. Если необходимо предоставить доступ к одним и тем же данным через оба протокола, используйте менеджер распределённых блокировок (DLM) или ограничьте один из протоколов доступом только для чтения.

Как добавить нескольких пользователей к одному общему ресурсу Samba?

Используйте группу Linux. Создайте группу (`groupadd teamshare`), добавьте в неё пользователей (`usermod -aG teamshare user1`), установите групповое владение каталогом общего ресурса (`chown root:teamshare /srv/share`) и укажите группу в `smb.conf` с помощью `valid users = @teamshare`. Этот подход хорошо масштабируется — добавление пользователя к общему ресурсу требует только команды `usermod` и регистрации `smbpasswd -a`, без изменений в `smb.conf`.

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать