Это статья для начинающих пользователей или чайников, коим я так же являюсь. У Вас появилась домашняя сеть и целый зоопарк устройств: телевизоры, TV - приставки, ноутбуки, стационарные компьютеры и конечно смартфоны. Как скачивать с одного устройства на другое файлы, где хранить общие файлы, как посмотреть закаченный фильм? Конечно это можно делать через облако, но... И тут много но, а мы хотим независимости, пора создавать свой сервер, устанавливать на него программное обеспечение, расшаривать ресурсы и радоваться жизни. У нас на болотах дожди, серость и грязь (статья готовилась три, ТРИ(!) месяца и уже солнышко, весна, апрель, птички поют и вездесущая пыль с конъюнктивитами, а так хочется праздника, солнца, ярких красок и самое время окунутся в жаркий бразильский карнавал, Samba de janeiro - жаркая январская самба нас ждет, поехали!
Что такое Samba?
Самба (Samba) это бразильский танец, помните песню "Samba de janeiro" - там про жаркую январскую вьюгу Самбу, ну потому, что Бразилия по другую сторону экватора и у них там все наоборот. Но Самба это не только танец, а еще...
Samba — это свободное программное обеспечение которое обеспечивает передачу файлов по протокол SMB/CIFS.
Кстати это не официальный логотип, официального я так и не нашел его просто по видимому нет. История Samba-ы стартует в 1992 году, а последняя версия на 28.01.2025 это 4.21.3. Официальный сайт: samba.org.
Что такое SMB, CIFS
SMB (Server Message Block, Массив Сообщений Сервера). Разработан в 1983 году сотрудником IBM, затем разрабатывается Microsoft, последняя версия SMB 3.1.1. В 1996 году Microsoft стала использовать новое название для дополненной версии протокола - CIFS (Common Internet File System, Общая Файловая Система Интернета). Microsoft пыталась превратить CIFS в международный стандарт, но после 2000 года прекратила работы по стандартизации. Поскольку Microsoft поначалу не опубликовала документацию к SMB (в 2008 году под давлением Еврокомиссии протоколы были опубликованы) путем реверс-инжиниринга в 1992 году появилась Samba — свободная реализация протокола SMB. Итак, для бытового использования SMB/CIFS, близнецы, братья где начинается SMB и заканчивается CIFS уже и не разобрать. Сейчас практически используется только SMB, последняя его версия 3.1.1, которые по сути являются обновленной версией CIFS. Старая версия 1.0 имеет значительные уязвимости, поэтому лучше перейти на 3.0. Как при необходимости подключить SMB версии 1.0 в этой статье на моем канале: "Какую и как установить операционную систему, или коротко о Windows 10." (в конце статьи). Однако отключение SMBv1 может вызвать проблемы с доступом к общий файлам и папкам на новых версиях Windows 10, а так же с видимостью компьютеров в сетевом окружении (будет ниже). Сама Windows 10 также поддерживает последний протокол SMB 3.1.1.
Как узнать версию протокола SMB на Linux?
С помощью утилиты nmap, возможно вам придется её установить.
nmap -p445 --script smb-protocols IP_адресс
например:
nmap -p445 --script smb-protocols 192.168.1.224
Это сама Samba на Ubunte
Поддержка всех протоколов, кроме кстати 1.0
или:
nmap -p445 --script smb-protocols 192.168.1.2
Это старый сетевой жесткий диск WD My Book Live (пост на канале про него)
Тут древний протокол версии SMB v1.0
А тут компьютер на Windows 10 и в настройках включен протокол SMB v1 для совместимости с вышеназванным диском
Поддерживаются всевозможные протоколы включая 3.1.1
В статье: "Протокол SMB: определить, включить или отключить определенную версию SMB в Windows" есть такая табличка
И она довольно странная как видим из скриншотов выше Samba версии 4.20.4 (скриншот и как определить версию будет ниже) поддерживает все версии протокола включая 3.1.1
Вводные данные.
Итак, я делаю свой супер-пупер сервер со всем плюшками и перделками на базе китайской платы Envinda X99D4M4.
Мой сервер:
- Открытый корпус: Cryptone-Y
- Материнская плата: китай Envinda X99D4M4 (8-фазная система питания, серверный чипсетом C612)
- Процессор: Intel Xeon E5 2680 V4, 14 ядер (потоков 28)
- Память: Обычная (не серверная) DDR4 2x32Гб
- Видеокарта: GeForce 210 (это странно для сервера указывать видеокарту так как это не имеет никого значения, но оказалось имеет - Proxmox просто не установился и все из-за карты)
- SSD диски NVMe, SATA (Nvme системный - и это то же будет проблемой при добавлении второго диска Nvme Proxmox просто изменил внутреннее названия (внимание!) сетевой карты.
- HDD диск WD
Видеокарта
Именно с ней не захотел загружается Proxmox, вот она на материнской плате
Впрочем это тема отдельной статьи (ссылка будет тут)
Иголка в яйце, курица в утке...
На системный NVMe диск установлен Proxmox 8.3, в Proxmox в виде контейнера Ubuntu 24.10
На Ubuntu 24.10
Мы будем устанавливать Самбу версии 4.20.4
Установка на Ubuntu
Ничего сложного нет, все до банальности просто, зато сложности начинаются потом, нужно все правильной настроить!
Обновляемся
apt update
apt upgrade
Установка Samba
sudo apt install samba
Версия Samb-ы
Если вы не знаете какая версия Самбы у вас установлена, это можно узнать вот так, просто.
smbd --version
Далее начинается самое сложное, настройка, настройка не только самой самбы, но и пользователей Linux.
Монтирование жесткого диска в системе Promax.
Этот раздел не относится к Sambe! Но так как я работаю под Promax, то сначала помимо всего прочего нужно примонитровать жёсткий диск к самой системе Ubuntu если конечно Ваш жесткий диск не является системным.
Создаем каталог для пользователей.
Для того что бы понять принцип работы создадим несколько папок, одна общая, другая приватная; несколько на одном диске и еще на другом диске.
Две папки общую (public) и частную (private) создаем на HDD диске WD blue 2 ТБ
Общая (public):
mkdir /mnt/satawd/samba/public
И еще один каталог, частный - private:
mkdir /mnt/satawd/samba/private
А это на другом диске общая папка Nvme Digma Mega S3 (DGSM3001TS33T)
mkdir /mnt/Nvme_Digma/bumf
И еще на SATA Netac SA500, 960 ГБ (NT01SA500-960-S3X)
mkdir /mnt/Netac/superdoc
И вот, что мы получаем три диска там есть еще подпапки обозначенные выше:
- satawd >>> samba >>>public
- satawd >>> samba >>> private
- Nvme_Digma >>> bumf
- Netac >>> superdoc
Создаем нового пользователя и группу пользователей.
Теперь нужно создать пользователей и группу. Если вы читаете эту статью в качестве быстрого руководства по настройке Самбы у Вас возникнет соблазн перескочить этот пункт и перейти сразу к конфигурационному файлу не делайте так! Иначе ничего не будет работать, начнутся проблемы с правами.
Cоздаем группу пользователей (groupadd)
groupadd группа
groupadd home
Для примера создаем группу "home"
Добавляем пользователей Samba (useradd)
На самом деле не только и не сколько мы добавляем пользователей в Samba, а создаем пользователей в OS Linux штатными для системы средствами.
useradd пользователь
useradd papa
Для примера создан пользователь "papa"
Проверка (su)
su username, где username - имя пользователя.
su papa
whoami - проверка под каким пользователем находимся
whoami
вернет papa
Выйти в root
Если нужно обратно выйти в суперпользвателя, набираем
exit
Созданных пользователей добавляем в группу (usermod -aG)
Исходные данные:
- Группа: home
- Пользователь: papa
usermod -aG группа пользователь
usermod -aG home papa
Добавили пользователя "papa" в группу "home"
Проверка (id -Gn)
id -Gn - проверка под каким пользователем и в какой группе находимся.
id -Gn
вернет home
Изменим группу, которой принадлежит приватная директория:
chgrp home /mnt/satawd/samba/private
Про пароли в Samba (smbpasswd)
Samba использует те же имена пользователей которые есть в системе, а значит пользователей вы создаете штатными средствами самой Linux с помощью useradd, см. выше. А вот пароли Samba хранит в своей базе данных они могут быть отличными или совпадать с паролем пользователя самой системы. Иными словами, для каждого пользователя Samba обязательно должен существовать Linux пользователь. Таким образом с помощью инструментов Samba - smbpasswd мы можем создать пароль и внести имя пользователя с сопоставленным паролем в базу данных Samba:
smbpasswd это утилита для изменения SMB паролей пользователей.
Выводит помощь по команде smbpasswd.
smbpasswd -h
smbpasswd -a papa
Устанавливаем пароль для пользователя "papa"
Если вы хотите, чтобы у пользователя не было пароля, то укажите опцию -n (лучше не пользоваться этой опцией, или нужно будет явно указать это в конфигурационном файле)
smbpasswd -n papa
Удалит пользователя "papa"
smbpasswd -x papa
Задаём права на папку.
Назначаем пользователя и группу владельцев папки (chown)
chown -R [новый пользователь]:[новая группа] [файл или папка]
-R - параметр рекурсивно изменит владельца всех вложенных директорий и файлов.
для папки "public"
chown -R nobody:nogroup /mnt/satawd/samba/public
где:
- nobody - никто (в данном случае имеем в виду никто, а значит доступна всем)
- nogroup - никакая группа (тот же принцип, что выше, никакая значит любая)
и для папки "private"
chown -R nobody:home /mnt/satawd/samba/private
где:
nobody - владелец любой, но только из группы "home"
Права на чтение, редактирование, выполнение (chmod)
chmod - change mode - изменить режим.
chmod владелец группа остальные
Обозначение
- r – чтение (Read)
- w – запись (Write)
- x – исполнение (Execute)
Биты прав доступа
- 0 - отсутствие прав (---)
- 1 - разрешено только исполнение (--x)
- 2 - разрешена только запись (-w-)
- 3 - разрешены запись и исполнение (-wx).
- 4 - разрешено только чтение (r--)
- 5 - разрешены чтение исполнение (r-x)
- 6 - разрешены чтение и запись (rw-)
- 7 - полные права (rwx)
-R (--recursive) - параметр рекурсивно изменит права для всех вложенных директорий и файлов.
Диаграмма всего изложенного выглядит вот так.
Полный доступ имеют все:
к папке "public"
chmod -R 777 /mnt/satawd/samba/public
к папке "bumf"
chmod -R 777 /mnt/Nvme_Digma/bumf
к папке "Netac"
chmod -R 777 /mnt/Netac
Доступ к папке "private" имеют только пользователи из группы home, все остальные не имеют доступ (место 0 можете поставить к примеру 4, тогда все могут только читать)
chmod -R 770 /mnt/satawd/samba/private
Как посмотреть права на файл или папку
Права можно посмотреть командой:
ls -l
Например вот так:
ls -l /mnt/Netac
Для папки superdoc вот такой результат:
Или что бы узнать разрешение для вышеназванной папки команду ls запускаем с значением d (директория):
ls -ld /mnt/Netac/superdoc
Префикс d в начале строки указывает на то, что это директория, а затем идет:
rwx - rwx - rwx
Что значит всем, всё разрешено. Но так не очень удобно мы писали в числовом формате, в нем нам и хочется получить ответ, для этого можно воспользоваться:
stat --format '%a'
Например
stat --format '%a' /mnt/Netac/superdoc
И вот что получим для папки "superdoc"
Иногда при записи в числовой нотации chmod применяется не три знака, а четыре, например вот так:
chmod 1777
К известным цифрам добавилась цифра 1 это t-бит, при его наличии у каталога удалять и переименовывать файлы в нем может только владелец этих файлов.
Редактируем файл "smb.conf".
И вот теперь только мы добрались до редакции файла конфигурации самой Самбы.
Открываем файл конфигурации в nano:
nano /etc/samba/smb.conf
Рабочий файл конфигурации (smb.conf) Samba 4.0 для домашнего использования. Полностью удаляем содержимое файла и вставляем следующее.
---
# Configuration file for typical home use
[global]
workgroup = SETINET
server string = %h server (Samba, Ubuntu)
log file = /var/log/samba/log.%m
log level = 1
max log size = 100
server role = standalone server
usershare allow guests = yes
security = user
map to guest = bad user
wins support = no
dns proxy = no
[public]
path = /mnt/satawd/samba/public
comment = Shared Resources (All)
read only = no
guest ok = yes
force user = nobody
force group = nogroup
browsable = yes
writable = yes
force create mode = 0777
force directory mode = 0777
[private]
path = /mnt/satawd/samba/private
comment = Private Resources (group home)
valid users = @home
guest ok = no
read only = no
browsable = yes
writable = yes
---
Ссылка на полный текстовый файл (pastebin)
Пояснение.
[global] – данная секция отвечает за общие настройки Samba-сервера
workgroup – ваша рабочая группа
server role - роль сервера (standalone server - автономный сервер)
server string - описание сервера
log file - лог файл.
log level - уровень вывода отладочной информации. Где: 0 - нет вывода, 10-обеспечивает вывод полной отладочной информации. Оптимальным, обычным является уровень не выше 3.
max log size - максимальный размер лог файлов в KiB.
security – уровень безопасности сервера, user означает авторизацию по паре логин/пароль;
usershare allow guests - при yes позволяет любому пользователю без пароля получить доступ к общедоступным ресурсом, аналогичен параметру guest ok = yes в настройках общего ресурса.
map to guest – параметр определяет способ обработки запросов. Значение bad user означает, что запросы с неправильным паролем будут отклонены, даже если такое имя пользователя существует;
wins support – включить или выключить поддержку WINS (Microsoft не рекомендует устанавливать его, вместо WINS ставить DNS);
dns proxy – возможность проксирования запросов к DNS.
[настройка папок] - Имя директории общего доступа, отображаемое пользователям, равно имени секции в которой оно описано.
comment - строка комментарий
path – полный путь до директории на жестком диске;
guest ok – возможность доступа к каталогу без пароля;
browsable – показывать ли каталог (“шару”) на сервере среди прочих. Если параметр установлен как “no”, то доступ будет возможен по полному пути, например ip-addresshidden_directory;
force user – пользователь от которого ведется работа с каталогом. Для повышения безопасности сервера, обычно используют nobody. Главное, не использовать пользователя root – это небезопасно.
force group - группа от которого ведется работа с каталогом.
writable – установка значения как “yes” позволяет пользователю выполнять действия над файлами внутри каталога – переименование, добавление, удаление, перемещение в подкаталог и копирование;
obey pam restrictions - по умолчанию в "no" (obey pam restrictions = no) сообщает о том следует ли Самбе подчиняться директивам учетных записей PAM, подключаемые модули аутентификации) — набор программ которые позволяют интегрировать различные методы аутентификации, является одной из частей стандартного механизма обеспечения безопасности UNIX-систем.
valid users – список пользователей у которых есть доступ к каталогу. Если пользователей несколько, их имена указываются через запятую. Если необходим доступ группе, устанавливается символ @ .
read only - (только для чтения) если установлен в yes, то пользователь не сможет создавать или изменять файлы в этой директории.
force create mode - этот параметр определяет набор разрешений, которые будут всегда устанавливаться на файле, созданном Samba.
force directory mode - этот параметр определяет набор разрешений, которые будут всегда устанавливаться на директории, созданном Samba.
Еще параметры: интернет ресурс с хорошим описанием настроек: "Все о Samba (smb-conf.ru/)"
Проверить корректность конфигурационного файла:
testparm
Перезапустить службу samba, чтобы изменения вступили в силу:
sudo systemctl restart smbd
В сетевом окружении windows 10 не видно машину.
При прямом подключении по IP адресу, формата \\IPадресс, например вот так:
\\192.168.1.224
Всё подключается и работает, но сама машина не отображается в сетевом окружении при обзоре сети. Все дело в том, что Microsoft отказалось от использования протокола SMB1 и поддержки NetBIOS, которые и обеспечивали эту функциональность. Современные Windows системы используют для обнаружения устройств WSD (Web Services for Devices, Веб-сервисы для устройств), а не NetBIOS, следовательно нужно добавить поддержку этого WSD в Samba. Сама Самба не имеет средств для поддержки WSD придется пользоваться сторонними средствами например WSDD, он уже есть в репозитарии Ubuntu, но в последнем обновлении, 24.10 разделен на два пакета wsdd и wsdd-server. Сразу установим wsdd-server и установится и сам wsdd-server и wsdd. Итак, устанавливаем wsdd-server:
apt update
apt upgrade
apt install wsdd-server
Инсталлируются два пакета wsdd и wsdd-server. Запустится он автоматом. Проверяем работоспособность:
ss -tlnp | grep 5357
Должен выдать не пустую строку, типа такой
Или вот так, выдаст версию
wsdd --version
Проверить как все работает можно остановкой службы:
sudo systemctl stop wsdd-server.service
И обратно запустить
sudo systemctl start wsdd-server.service
По документации (доступна тут) можно вводит с параметрами, но у меня это не проходит (самой программой занят порт). Программа стартует и работает и так, в сети становится видимым компьютер, а значит эффект достигнут.
Если что, все можно это можно удалить.
Удаление пакетов в Ubuntu
- apt remove [имя-пакета] - Удаляет указанные пакеты, но оставляет их конфигурационные файлы. Может быть полезной, если вы планируете переустановку пакета.
apt remove wsdd-server
- apt purge [имя-пакета] - Удаляет пакеты и их конфигурационные файлы. Иными словами, эта команда проводит полное удаление пакета из системы, включая любые его настройки.
apt purge wsdd-server
- apt autoremove - Удаляет пакеты, которые были автоматически установлены для поддержки других пакетов и больше не требуются. Это хороший способ освободить место, удалив неиспользуемые зависимости.
apt autoremove
Итоги
Ну вот вроде и все, это все было обмусолено множество раз, но появляются новые версии приложений и все работает уже не так как раньше, а с определёнными нюансами, об этих нюансах и было рассказано ранее. На этом история не заканчивается многие устройства не видят и даже отказываются работать с Самбой, например телевизор LG, подавай ему только DNLA, и об этом будет в следующих сериях. А на сегодня все, но как всегда...
Продолжение следует...
Подписывайтесь на мой канал TehnoZet-2, там много интересного! Мы только развиваемся! Понравилась статья, хотите продолжения - ставьте лайк, жмите палец вверх!
Подборки
Статьи
- Рабочее название: "Свой сервер из
г...на и палок."(статья еще будет)