Долгое время для организации файлового сервера, работающего по протоколу SMB, в Linux не было альтернативы Samba, но с недавних пор ситуация изменилась. Начиная с ядра 5.15 в Linux появился новый модуль ядра - ksmbd - реализующий функции SMB-сервера. В отличии от Samba, которая имеет кроме файлового сервера широкий набор дополнительных функций, ksmbd, наоборот, только файловый сервер, простой и нетребовательный к ресурсам. В этой статье мы расскажем, как подключить данный модуль и выполнить первоначальную настройку сервера.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Сразу скажем, что если вам нужен полноценный и функциональный файловый сервер уровня предприятия, то лучше остановить свой выбор на Samba. А ksmbd придется ко двору там, где надо быстро и просто организовать один или несколько общих ресурсов без лишних затрат и сложностей. Также следует учитывать, что проект молодой и в нем несколько раз находили критические уязвимости.
К явным плюсам ksmbd следует отнести его низкие требования к ресурсам и высокую скорость работы, а также крайнюю простоту работы с ним, файловый сервер теперь можно поднять буквально за пару минут.
В настоящее время ksmbd доступен в репозиториях Ubuntu 22.04 и новее, а также Debian 12, в Debian 11 его можно установить из Backports.
Установка ksmbd в Debian 11
Прежде всего подключим репозиторий Backports:
echo "deb http://deb.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/bullseye-backports.list
Обновим список пакетов:
apt update
И установим необходимые для работы с ksmbd инструменты командой:
apt install ksmbd-tools/bullseye-backports
Все необходимые службы будут добавлены в автозагрузку автоматически.
Теперь установим новое ядро, это можно быстро сделать командой:
apt install linux-image-amd64/bullseye-backports
Будет установлено самое последнее ядро, на момент написания статьи это было ядро 6.1.
Если же вам нужно установить определенную верию ядра, то обратитесь к соотвествующему разделу нашей статьи:
Linux - начинающим. Установка и первоначальная настройка Debian 11 для сервера
После установки нового ядра систему следует обязательно перезагрузить.
Установка ksmbd в Debian 12 и Ubuntu 22.04 и новее
В данных системах ksmbd-tools присутствует в основных репозиториях, поэтому просто достаточно команды:
apt install ksmbd-tools
Как и в предыдущем сценарии все необходимые службы также будут добавлены в автозагрузку.
Настройка ksmbd
Все настройки сервера хранятся в /etc/ksmbd, конфигурационный файл по умолчанию отсутствует, зато есть файл с примером конфига. Скопируем его как конфигурационный файл, для Debian 12 выполните:
cp /etc/ksmbd/ksmbd.conf.example /etc/ksmbd/ksmbd.conf
В Debian 11 и Ubuntu директория с настройками отсутствует, поэтому сначала создадим ее, а затем скопируем базовую конфигурацию:
mkdir /etc/ksmbd
cp /usr/share/doc/ksmbd-tools/examples/smb.conf.example /etc/ksmbd/smb.conf
Следует отметить, что в этих системах образец конфигурационного файла достаточно спартанский, всего несколько строк. Но ничего страшного, можно просто добавить нужные опции и работать. Либо позаимствовать более подробный пример конфигурации из Debian 12:
ksmbd.conf.example
SHA1: 1B2B249CC8F51EC2D20507CF72C0ECA4D7EE083C
Внутри файл сильно напоминает конфигурационный файл Samba, и это действительно так - синтаксис Samba совместим с ksmbd. У нас также есть глобальные опции и опции, относящиеся к конкретному общему ресурсу, многие определенные глобально опции можно переопределять на уровне ресурсов. Настройки по умолчанию достаточно оптимальны и можно их оставить как есть, но все равно коротко разберем наиболее значимые опции.
Если вы хотите привязать службу к определенному интерфейсу, то включите опцию:
bind interfaces only = yes
После чего укажите интерфейс или список интерфейсов в опции, при указании нескольких значений разделите их пробелом:
interfaces =
В современных системах гостевой доступ к SMB ресурсам считается небезопасным и по умолчанию отключен:
map to guest = never
Если вы хотите его включить, то измените значение опции на
map to guest = bad user
Более подробно об особенностях работы с анонимным гостевым доступом в современных системах вы можете причитать в нашей статье:
Исправляем ошибку подключения Windows к общим ресурсам на сервере Samba Linux
Для повышения производительности протокола SMB3 можно включить многоканальное соединение, но данная функция пока является экспериментальной и может работать нестабильно:
server multi channel support = yes
Ниже глобальных опций сервера идут настройки по умолчанию для всех общих ресурсов, эти же самые опции мы можем использовать внутри описания ресурса для переопределения поведения. По умолчанию гостевой доступ выключен и включен режим только чтения, файлы по умолчанию создаются с правами 0744, папки - 0755.
В самом конце файла конфигурации есть пример общего ресурса, удалим его и создадим собственный, так как основные параметры заданы выше, то много писать не придется:
[My_share]
comment = my_share
path = /mnt/smb
writeable = yes
В квадратных скобках указываем имя ресурса, затем путь к физической директории, которую мы открываем в общий доступ и разрешаем запись в данный общий ресурс. Комментарий - необязательная опция, но может быть полезна, если имя ресурса не полностью раскрывает его назначение.
Сохраним файл конфигурации и перезапустим сервер:
systemctl restart ksmbd
Теперь создадим пользователей файлового сервера. Пользователи SMB отражаются на системных пользователей по совпадению имени, поэтому для каждого пользователя SMB нужно создать системного пользователя и установить для него нужные права на общие файлы и папки.
Если делать правильно, то сначала создаем системного пользователя, не задавая ему домашней папки и запретив интерактивный вход (если вам не нужен реальный пользователь в системе с этим именем):
useradd -s /sbin/nologin smbusr
В нашем случае мы создали пользователя smbusr, которого нужно сделать владельцем общего ресурса:
chown -R /mnt/smb
Затем создадим SMB-пользователя:
ksmbd.adduser --add-user=smbusr
После чего вам нужно будет ввести пароль пользователя и его подтверждение.
Теперь снова перезапустите сервер:
systemctl restart ksmbd
По мере добавления пользователей права доступа на общие ресурсы следует регулировать стандартными правами Linux, мы не будем углубляться в эту тему, так как подробно рассматривали ее в статье:
Настройка файлового сервера Samba на платформе Debian / Ubuntu
Также есть дополнительные инструменты управления доступом к ресурсам, например, мы можем явно задать список пользователей имеющих право доступа к ресурсу:
valid users = ivanov petrov
Либо, наоборот, задать список тех, кому доступ запрещен:
invalid users = kozlov
Данный список имеет приоритет над valid users.
В случае ресурса с доступом только на чтения можно дополнительно указать пользователей имеющих право записи:
write list = ivanov
Также можно выборочно переключить некоторых пользователей в режим только чтения:
read list = kozlov
В случае совместного применения опций read list имеет приоритет над write list.
Для того, чтобы изменить пароль пользователя используйте:
ksmbd.adduser --update-user=smbusr --password=NewPa$$w0rd
Для удаления:
ksmbd.adduser --del-user=smbusr
Напоследок рассмотрим еще один сценарий, который может быть полезен в небольших внедрениях, когда нет ни желания, ни необходимости заводить несколько системных пользователей и настраивать систему прав доступа, но хочется выдать каждому свой пароль. В этом случае просто заводим SMB-пользователей, а в описание общего ресурса добавляем опции:
force user = smbusr
force group = smbusr
В этом случае все пользователи, которых невозможно отразить на системных пользователей, будут отражены на указанного в опции пользователя. Таким образом можно выполнить отображение многих SMB-пользователей на одного системного.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Последние комментарии