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 мрежата (Network Neighborhood / „Мрежа” в File Explorer).
  • `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 изисква следните портове да бъдат отворени:

ПортПротоколУслугаПредназначение
—————-——————
137UDPnmbdNetBIOS услуга за имена
138UDPnmbdNetBIOS услуга за дейтаграми
139TCPsmbdNetBIOS сесийна услуга (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. Отворете File Explorer.
  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/hostname)
Производителност (LAN)Малко по-висок overheadПо-нисък overhead, по-бързо на LAN
КриптиранеSMB3 поддържа AES криптиранеNFSv4.2 поддържа krb5 криптиране
Сложност на конфигурациятаУмеренаПо-ниска за среди само с Linux
Най-подходящо заСмесени OS среди, интеграция с домейнХомогенни Linux клъстери, HPC

Ако вашата инфраструктура е изключително Linux — например клъстер от Dedicated сървъри, изпълняващи контейнеризирани натоварвания — 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 деактивира услугата „Computer Browser”, зависима от 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 идентификационни данни за сесия. Отворете Credential Manager (Контролен панел > Credential Manager > Windows Credentials), премахнете всички кеширани записи за 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
За начало