Samba – отдельный файловый сервер

В этой статье я покажу процесс установки и настройки простого файлового сервера 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-адрес-сервера>:

Проводник Windows с доступом к Samba
  • В каталог share должно пускать, не требуя логин или пароль.
  • Для private будет запрошен логин и пароль.
Windows проводник. Запрос пароля

Доступ с 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.

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять
Отказаться
Политика конфиденциальности