В этой статье я покажу процесс установки и настройки простого файлового сервера Samba на сервере Debian 13. Добавим корзину на сервере, настроим аудит доступа к файлам. Также покажу подключение к серверу с Windows и Linux клиентов.
🕒 8 мин.
Что такое samba
Samba — это пакет программ с открытым исходным кодом для Linux, реализующий протокол SMB/CIFS. Он позволяет Linux-серверу создавать общие папки и принтеры для клиентов Windows, Linux, macOS и других ОС. Проект выпущен под лицензией GPL и является участником организации Software Freedom Conservancy.
Помимо автономного сервера Samba может выполнять функции контроллера домена или интегрироваться в существующий домен Active Directory.
Для работы с Samba на стороне клиента понадобятся:
- smbclient — для подключения к общим ресурсам из командной строки;
- cifs-utils — для монтирования удалённых папок в локальную файловую систему.
На серверной стороне устанавливается пакет — samba.
Подготавливаем сервер
Обратите внимание, все примеры в этой статье проделаны на Debian 13.
Устанавливаем необходимые пакеты:
sudo apt update && \ sudo apt install samba
Создаём два каталога, которые будем использовать как общие ресурсы:
- /srv/private — каталог с доступом по паролю;
- /srv/share — каталог с гостевым доступом.
sudo mkdir /srv/{private,share}
Добавляем нового пользователя в систему:
sudo useradd -M -s /usr/sbin/nologin shareuser
Назначаем этого пользователя владельцем созданных каталогов и устанавливаем необходимые права:
sudo chown shareuser:shareuser /srv/private && \ sudo chown shareuser:shareuser /srv/share && \ sudo chmod 770 /srv/private && \ sudo chmod 777 /srv/share
В моём случае установилась samba версии 4.22.8, узнать версию можно с помощью следующей команды:
smbstatus -V
Добавляем одноимённого пользователя в samba (для сетевого доступа):
sudo smbpasswd -a shareuser
- нужно будет придумать пароль.
Посмотреть, появился ли наш пользователь в samba можно так:
sudo pdbedit -L -v shareuser
Настройка samba
Создадим резервную копию конфига:
sudo mv /etc/samba/smb.conf \ /etc/samba/smb.conf.orig
И создадим новый конфиг:
sudo nano /etc/samba/smb.conf
[global]
log file = /var/log/samba/log.%m
map to guest = Bad User
max log size = 1000
security = USER
server role = standalone server
[share]
comment = Общая папка
create mask = 0666
directory mask = 0777
force directory mode = 0777
guest ok = Yes
path = /srv/share
read only = No
[private]
comment = Приватная папка
create mask = 0600
directory mask = 0700
path = /srv/private
read only = No
valid users = shareuser
Проверим конфигурацию с помощью команды:
testparm
Если конфиг верный, перезапускаем службы:
sudo systemctl restart smbd nmbd
Разбираем конфиг
Первая и основная секция это — [global]. Здесь находятся параметры влияющие на весть сервер и на все общедоступные ресурсы.
Секции [share] и [private] — это секции для общедоступных ресурсов.
- share — с гостевым доступом,
- private — с доступом по паролю.
Разберём параметры из секции [global]:
log file— указываем путь к лог-файлу. В примере выше, с помощью переменной%m, я для каждого клиента создаю свой лог-файл. Переменная%mозначает имя NetBIOS клиента.map to guest— указываем когда пользователю будет предоставляться гостевой доступ. Возможные варианты:never— никогда,bad user— если пользователя не существует,bad password— если пароль не верный.
max log size— максимальное количество строк в лог-файлах.security— клиенты, основываясь на этом параметре, определяют нужно ли (и если да то как) передавать серверу имя пользователя и пароль. Возможные варианты:auto— параметр настраивается автоматически в зависимости от роли сервера;user— клиент должен сначала произвести вход, с существующим именем пользователя и паролем;domain— переданные логин и пароль будут проверятся на контроллере домена;ads— в этом режиме сервер Samba будет действовать как член домена. Для работы в этом режиме нужно использовать Kerberos.
server role— указываем роль сервера. Возможные варианты:standalone server— автономный сервер (сервер рабочих групп),member server— участник домена,domain controller— контроллер домена.
Разберём параметры общедоступных ресурсов:
comment— комментарий.create mask— максимальные права при создании файла, но с некоторыми ограничениями. Выполнять файлы может только владелец. Поэтому здесь нельзя указать например такие права: 777, 776, 711. То есть указать можно, но в любом случае группа и все остальные будут урезаться чтобы не получить доступ на исполнение. Здесь я урезаю владельца в правах, чтобы он тоже не мог запускать исполняемые файлы. Но если нам всё же нужно назначить группе и владельцу право на исполнение, то это делается с помощью дополнительного параметра:create mask = 0776— максимальные права;force create mode = 0776— увеличиваем права группы до максимальных.- Если вы не помните как задаются права к файлам и каталогам, то об это я писал здесь.
directory mask— максимальные права для каталога. Но писать может только владелец. Если мы хотим группе и всем остальным разрешить запись в этот каталог, то это делается с помощью дополнительного параметра:directory mask = 0777;force directory mode = 0777.
guest ok— разрешаем гостевой доступ.- Для
[share]этот параметр равенYes. - А для
[private]мы не задаём этот параметр, так как по умолчанию гостевой доступ выключен.
- Для
path— путь к каталогу.read only— по умолчанию наши ресурсы будут доступны только для чтения. Чтобы это изменить указываем здесьNo.valid users— перечисляем пользователей у которых будет доступ к ресурсу. Можно перечислить через запятую, например:valid users = smb-admin, user1, user2.
Доступ с Windows
С компьютеров под управлением Windows получить доступ к нашим шарам очень просто. Это делается из проводника, в котором мы указываем путь в формате \\<ip-адрес-сервера>:

- В каталог share должно пускать, не требуя логин или пароль.
- Для private будет запрошен логин и пароль.

Доступ с Linux (монтирование)
Устанавливаем необходимые пакеты:
sudo apt update && \ sudo apt install smbclient cifs-utils
Тестируем сетевой доступ (необходимо будет ввести пароль):
smbclient -L //172.28.90.52 -U shareuser
Должны получить примерно такой вывод:
Sharename Type Comment --------- ---- ------- share Disk Общая папка private Disk Приватная папка IPC$ IPC IPC Service (Samba 4.22.8-Debian-4.22.8+dfsg-0+deb13u1) SMB1 disabled -- no workgroup available
👉Монтируем каталог (с указание логина и пароля):
sudo mount -t cifs //172.28.90.52/private/ /mnt/ \ -o user=shareuser,password=12345,uid=1000,gid=1000
👉Монтирование с указанием только логина (пароль будет запрошен):
sudo mount -t cifs //172.28.90.52/private /mnt/ \ -o user=shareuser,uid=1000,gid=1000
👉Монтирование с указанием файла, который содержит логин и пароль:
nano .smbcredentials username=shareuser password=12345
sudo mount -t cifs //172.28.90.52/private /mnt/ \ -o credentials=/home/alex/.smbcredentials,uid=1000,gid=1000
👉Монтирование гостевой шары:
sudo mount -t cifs //172.28.90.52/share /mnt/ \ -o guest,uid=1000,gid=1000
Дополнительные параметры сервера
Дополнительно при настройке сервера мы можем использовать следующие параметры:
available = No / Yes. Выключить или включить общий ресурс. По умолчанию — Yes.browsable = No / Yes. Сделать общий ресурс видимым, или не видимым. По умолчанию — Yes.comment = "строка". Комментарий для общего ресурса.hide dot files = No / Yes. Скрывать файлы начинающиеся с точки. По умолчанию — Yes.hide files = "строка". Можем задать, с помощью регулярного выражения, шаблон файлов, которые должны стать скрытыми. Например,hide files = ./*.so.hide special files = No / Yes. Скрыть специальные файлы, такие как сокеты или устройства. По умолчанию — No.hide unreadable = No / Yes. Скрыть те файлы, к которым у клиента нет доступа на чтение. По умолчанию — No.hosts allow = 192.168.0.0/24, 192.168.1.0/24. Список подсетей или отдельных ip-адресов, которым можно подключаться к серверу.hosts deny = 192.168.0.100. Противоположный параметр hosts allow. При этом hosts allow имеет больший приоритет. То есть вы можете запретить все соединенияhosts deny = 0.0.0.0/0, и разрешить некоторые.max connections = число. Указать максимальное число подключений к серверу. По умолчанию — 0 (без ограничения).force user = имя_пользователя. Задать пользователя, под которым фактически будет вестись запись. Например вы авторизованы как «alex», что позволяет вам писать в каталог средствами Samba. А при записи будет использоваться пользователь «max». При этом пользователь «max» должен иметь права на файловой системе для записи файла.
VFS объекты
Функциональность сервера Samba можно расширять специальными модулями, их называют VFS объектами.
Ниже я покажу настройку двух модулей:
- full_audit — записывает выполняемые операции клиента. То есть позволяет выполнять логирование, кто какие операции с файлами производит на сервере. Поможет вам найти виновника, который удалил какой-нибудь нужный файл.
- recycle — перемещает удаляемые файлы во временную директорию, а не удаляет их немедленно.
Настройка аудита
Чтобы добавить какой-нибудь VFS объект к samba, его нужно прописать в конфигурационном файле /etc/samba/smb.conf в параметре vfs objects в следующем виде:
vfs objects = <1-объект> <2-объект> ...
Так как я делаю аудит для всех общих ресурсов, то я добавляю этот параметр в секцию [global]. А ниже пропишем какие операции следует логировать:
vfs objects = full_audit full_audit:success = connect, unlinkat, write, connectpath, renameat full_audit:failure = connect, unlinkat, write, connectpath, renameat
Я перечислил следующие операции:
- connect — подключение (например открыли общий каталог);
- unlinkat — удаление файлов или каталогов;
- write — редактирование файлов или каталогов (по факту не видел появление этой операции, поэтому можно не использовать);
- connectpath — подключение к определённому ресурсу (так как write у меня не работал, я стал ловить любые коннекты к файлам, чтобы видеть кто этот файл открывал);
- renameat — переименовывание файлов или каталогов.
После редактирования конфига перезапустим службу:
sudo systemctl restart smbd
События о любые перечисленных операциях будут идти в журнал. Посмотреть его вы можете с помощью утилиты journalctl. Я ниже приведу две команды. Первая выводит все события к текущему моменту. Вторая выводит 10 последних событий и ждёт появления следующих (как tail -f):
journalctl -t smbd_audit journalctl -t smbd_audit -f
Создание корзины
Вы уже знаете как добавлять vfs объекты, поэтому сразу в конфиг добавим ещё один объект — recycle (напоминаю, я добавляю их в секцию [global]):
vfs objects = full_audit recycle
Ниже, в этом же файле, и в этой же секции, добавим ещё два параметра относящиеся к корзине:
recycle:versions = Yes recycle:keeptree = Yes
- recycle:versions — отвечает за версионность, это полезно если вы удаляете файл, а в корзине уже есть файл с этим именем;
- recycle:keeptree — если вы удаляете каталог, а в нём есть ещё каталоги, то этот параметр сохранит в корзине дерево каталогов.
Затем в этом же файле, но уже в секциях для общих ресурсов нужно прописать путь к корзине:
[share]
*** Другие параметры***
recycle:repository = /srv/share/.trash
[private]
*** Другие параметры***
recycle:repository = /srv/private/.trash
Затем перезапустим службу:
sudo systemctl restart smbd
Итог
Samba — достаточно сложный продукт, но им можно научиться пользоваться. В статье я продемонстрировал как создать приватный и общий ресурс. Показал различные опции, которые дополнительно можно применять для настройки общих каталогов. А также познакомил вас с VFS объектами, настроил с их помощью аудит и корзину.
Дополнительно показал как выполняется монтирование samba ресурсов из консоли Linux.
Если понравилась статья, подпишись на мой канал в VK или Telegram.