Тариф успешно добавлен в корзину
В корзину
url image

Как установить и настроить Samba на Ubuntu

Samba — это бесплатная программа с открытым исходным кодом, которая обеспечивает компьютерам с разными ОС (Windows, Linux и macOS) общий доступ к файлам и принтерам. Это решение позволяет централизованно хранить данные и упрощает их совместное использование. Кроме того, начиная с четвёртой версии, Samba может использоваться в качестве контроллера домена

В статье рассмотрим процесс установки и настройки Samba для разных сценариев: предоставление гостевого доступа, настройку аутентификации с помощью учётных записей, а также подключение к ресурсам с операционных систем Windows и Linux. 

Установка Samba

Рассмотрим установку Samba на виртуальном сервере с ОС Ubuntu 24.04. Все шаги необходимо выполнять от имени root-пользователя или пользователя с правами sudo.

  1. Обновите индекс репозиториев и установите пакеты Samba и smbclient:
apt update && apt -y install samba smbclient
  1. Проверьте статус сервиса Samba:
systemctl status smbd
Проверка статуса сервиса Samba

Если в статусе сервиса отображается active (running), значит, сервис успешно установлен и запущен. 

  1. Добавьте сервис в автозагрузку:
systemctl enable smbd

Команды для управления демоном Samba:

  • Запуск

systemctl start smbd
  • Остановка
systemctl stop smbd
  • Перезапуск
systemctl restart smbd
  1. Откройте порты, чтобы клиентские компьютеры могли подключаться к ресурсам Samba.

Команды зависят от файрвола. Для пользователей UFW:

ufw allow 137,138/udp
ufw allow 139,445/tcp

Для iptables:

iptables -A INPUT -p udp -m multiport --dports 137,138 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 139,445 -j ACCEPT

Для nftables: 

nft add rule inet filter input udp dport { 137, 138 } accept
nft add rule inet filter input tcp dport { 139, 445 } accept

Настройка гостевого доступа

Гостевой доступ позволяет подключаться к файловому ресурсу без аутентификации (с использованием учётной записи nobody или другой указанной) и без ввода пароля. Это удобно для работы с файловым хранилищем, например, в локальных сетях при работе с файлами проекта.

Использование гостевого доступа подразумевает полное отсутствие аутентификации. Это позволяет любому пользователю получить полный доступ к общим ресурсам, а значит — приводит к рискам утечки или изменения данных, поскольку контроль разрешений (запись, чтение) для всех гостевых сессий происходит по упрощённой схеме. Поэтому настраивать доступ без аутентификации для публичного ресурса не стоит. 

По умолчанию гостевой доступ в Samba выключен.

  1. Создайте новую директорию, где будут храниться файлы:
mkdir -p /srv/samba/share
  1. Назначьте владельца и выдайте права на созданную директорию:
chown -R nobody:nogroup /srv/samba/share
chmod -R 775 /srv/samba/share

Права доступа 775 означают, что владелец и группа обладают полным доступом, а все остальные могут только читать файлы.

  1. Перейдите в созданную директорию:
cd /srv/samba/share
  1. Создайте текстовый файл с именем file1.txt и запишите в него фразу: «Тестируем гостевой доступ в Samba!»:
echo "Тестируем гостевой доступ в Samba!" > file1.txt

В дальнейшем все файлы и каталоги необходимо создавать в папке /srv/samba/share.

  1. Перед тем как редактировать основной конфигурационный файл smb.conf, создайте его резервную копию:
cp /etc/samba/smb.conf /etc/samba/smb.conf.bakup
  1. С помощью текстового редактора, например, nano, откройте на редактирование файл smb.conf:
nano /etc/samba/smb.conf
  1. В файле найдите секцию [global], а в ней — два параметра: map to guest и usershare allow guests. Приведите их к виду:
map to guest = bad user
usershare allow guests = yes

Если параметров нет, то их нужно добавить.

Расшифровка параметров:

  • map to guest = bad user — определяет поведение Samba при попытке подключения пользователя с недействительной учётной записью (например, с неправильным именем пользователя или паролем). Значение bad user означает, что такие подключения должны автоматически перенаправляться на гостевую учётную запись (обычно с именем nobody). Это позволяет организовать анонимный доступ к общим ресурсам без аутентификации.
  • usershare allow guests = yes — разрешает всем пользователям предоставлять гостевой доступ к общим ресурсам. 

В конце файла добавьте новый блок с именем [guestshare] со следующими параметрами:

[guestshare]
        comment = Гостевая папка
        path = /srv/samba/share
        browsable = yes
        guest ok = yes
        read only = no
        writable = yes
        create mask = 0664
        directory mask = 0775
        force user = nobody
        force group = nogroup

Сохраните изменения и выйдите из файла.

Расшифровка параметров:

  • comment = Гостевая папка — текстовое описание, которое отображается в сетевом окружении Windows или при просмотре списка доступных ресурсов через команду smbclient -L. Информативная настройка, которая не влияет на общую работоспособность системы.
  • path = /srv/samba/share — абсолютный путь к каталогу на файловой системе сервера, который будет экспортирован как сетевая папка. Все операции чтения/записи будут происходить в ней.
  • browsable = yes — отображает файловое хранилище в списке доступных ресурсов в сетевом окружении Windows и при выполнении команды smbclient -L. Используется для диагностики проблем, не влияет на возможности подключения.
  • guest ok = yes — разрешает анонимный (гостевой) доступ к файловому хранилищу без аутентификации.
  • read only = no — определяет возможность записи в файловой системе. Значение no означает, что клиенты могут создавать, менять и удалять файлы.
  • writable = yes — явно указывает на возможность менять файлы в каталоге.
  • create mask = 0664 — задаёт битовую маску прав доступа для создаваемых файлов. Значение 0664 означает, что владелец и группа получают права на чтение и запись (6), остальные — только на чтение (4).
  • directory mask = 0775 — задаёт битовую маску прав доступа для каталогов. Значение 0775 означает, что владелец имеет полный доступ (7), группа — чтение+запись+выполнение (7), остальные — чтение+выполнение (5).
  • force user = nobody — принудительно использует учётную запись системного пользователя nobody без привилегий.
  • force group = nogroup  — действует аналогично параметруforce user, но только для групп. Значение nogroup — стандартная группа без привилегий.
  1. Проверим синтаксис конфигурации на возможные ошибки:
testparm
Проверка конфигурации Samba на наличие ошибок

Если в ответ команда вернула «Loaded services file OK», то конфигурация корректна. При обнаружении ошибок утилита укажет номер строки и описание проблемы. 

  1. Перезапустите сервис Samba и проверьте статус:
systemctl restart smbd && systemctl status smbd
Проверка статуса сервиса Samba

Если в статусе сервиса отображается active (running), Samba готова к работе. На этом этапе настройка гостевого доступа окончена. Теперь проверим подключение.

Подключение к ресурсу из Windows

Подключимся к файловому хранилищу с устройства на операционной системе Windows.

  1. Откройте проводник и в адресной строке введите  IP-адрес сервера и имя ресурса guestshare. Вместо IP-адреса 192.168.234.128 укажите свой.

\\192.168.234.128\guestshare

Подключение к файловому хранилищу из Windows с помощью гостевого доступа
  1. При появлении окна с вводом учётной записи введите guest в поле Имя пользователя, а поле с паролем оставьте пустым и нажмите кнопку ОК:
Ввод данных для доступа к общей папке

Появится сетевая папка с именем guestshare:

Сетевая директория Samba с файлами
  1. Найдите файл с именем file1.txt, который мы создали ранее, и проверьте его содержимое:
Проверка работоспособности файлового хранилища

Подключение к ресурсу из Linux

В комплекте с Samba поставляется утилита smbclient, которая позволяет подключаться к ресурсам Samba из командной строки. Для этого используйте команду: 

smbclient //192.168.234.128/guestshare -U guest -N
Подключение к файловому хранилищу из Linux при помощи командной строки

192.168.234.128 — это IP-адрес сервера с Samba: не забудьте заменить его на свой.

Чтобы вывести список всех файлов в каталоге, необходимо выполнить команду ls, а для скачивания файла — get с указанием имени файла.

Настройка доступа по логину и паролю

Samba позволяет использовать персонализированные учётные записи для доступа к файлам. 

Как настроить доступ по логину и паролю:

  1. Создайте  нового пользователя с именем smbuser:
adduser --no-create-home --shell /usr/sbin/nologin smbuser
Добавление нового пользователя в систему
  1. При создании пользователя нужно установить для него пароль. Однако Samba не может использовать системный пароль пользователя напрямую, поскольку работает по протоколу SMB/CIFS. Он применяет для аутентификации NTLM-хеши, несовместимые с хешами паролей в Unix. Поэтому пароль будет использоваться только при аутентификации в Samba-ресурсах и не будет изменён для системного пользователя. 

Чтобы задать пароль, выполните команду:

smbpasswd -a smbuser
Установка пароля для пользователя в Samba

При этом необязательно вводить пароль, заданный при создании пользователя, можно придумать новый.

  1. Включите учётную запись пользователя в базе Samba:
smbpasswd -e smbuser
Включение учетной записи
  1. Создайте новую директорию, где будут храниться файлы:
mkdir -p /srv/smbuser-directory
  1. Назначьте владельца и группу для директории:
chown smbuser:smbuser /srv/smbuser-directory/

А также задайте права доступа:

chmod 2775 /srv/smbuser-directory/

Права доступа 2775 означают, что каталог монтируется с setgid-битом (2), полными правами для владельца и группы (7 и 7), а также чтением/исполнением для всех остальных (5).

  1. Перейдите в ранее созданную директорию:
cd /srv/smbuser-directory

Создайте новый файл с именем file1.txt и запишите в него строку «Тестируем доступ по логину и паролю в Samba!»:

echo “Тестируем доступ по логину и паролю в Samba!” > file1.txt
  1. Перед тем, как редактировать конфигурационный файл smb.conf, проверьте резервную копию или создайте её:
cp /etc/samba/smb.conf /etc/samba/smb.conf.bakup
  1. Откройте на редактирование конфигурационный файл smb.conf:
nano /etc/samba/smb.conf

Необходимо привести секцию [global] к следующему виду:

[global]
   workgroup = WORKGROUP
   server string = Samba Server %v
   netbios name = ubuntu-samba
   security = user
   map to guest = never
   usershare allow guests = no
   min protocol = SMB2
   server role = standalone server
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   panic action = /usr/share/samba/panic-action %d

Расшифровка параметров:

  • workgroup = WORKGROUP — имя рабочей группы в сети Windows, к которой будет принадлежать Samba-сервер. Значение WORKGROUP — это стандартное имя, которое используется по умолчанию в Windows.
  • server string = Samba Server %v — описание сервера, которое отображается в сетевом окружении Windows рядом с именем хоста. Переменная %v подставляет текущую версию Samba.
  • netbios name = ubuntu-samba — NetBIOS-имя сервера, под которым он будет виден в сети. Значение ubuntu-samba переопределяет имя хоста системы. Имя должно быть уникальным в локальной сети и не длиннее 15 символов.
  • security = user — задает модель аутентификации. Значение user означает, что каждый пользователь должен пройти проверку имени и пароля через локальную базу пользователей Samba.
  • map to guest = never — управляет поведением при неудачной аутентификации. Значение never запрещает преобразование неизвестных пользователей в гостевую учётную запись. При любой ошибке входа соединение будет отклонено.
  • usershare allow guests = no — управляет доступом к общим папкам. Значение no запрещает гостевой доступ и требует аутентификации.
  • min protocol = SMB2 — задаёт минимальную поддерживаемую версию протокола SMB.
  • server role = standalone server — определяет роль Samba в сети. Значение standalone server означает, что сервер работает автономно, без участия в домене Active Directory.
  • log file = /var/log/samba/log.%m — указывает путь к файлам журнала для каждого клиента. Переменная %m подставляет NetBIOS-имя клиента.
  • max log size = 1000 — ограничивает размер каждого файла журнала в килобайтах.
  • logging = file — выбирает подсистему логирования. Значение file направляет все сообщения в файлы, указанные в log file.
  • panic action = /usr/share/samba/panic-action %d — задаёт команду, которая выполняется при критическом сбое сервиса smbd или nmbd. Скрипт /usr/share/samba/panic-action %d (где %d — демон) обычно собирает отладочную информацию и автоматически перезапускает сервис.

В конец файла добавьте новый блок с именем [share]:

[share]
   path = /srv/smbuser-directory
   browsable = yes
   writable = yes
   valid users = smbuser
   create mask = 0664
   directory mask = 0775

Расшифровка параметров:

  • path = /srv/smbuser-directory — абсолютный путь на сервере к каталогу, который будет открыт для общего доступа. Все операции чтения/записи будут происходить в этом каталоге.
  • browsable = yes — разрешает отображение файлового сервера в списке доступных ресурсов при просмотре сетевого окружения.
  • writable = yes — пользователи с соответствующими правами смогут создавать, менять и удалять файлы.
  • valid users = smbuser — ограничивает доступ к файловому серверу только указанным пользователям Samba. В данном случае подключиться сможет только пользователь smbuser.
  • create mask = 0664 — задаёт битовую маску прав доступа для создаваемых файлов. Значение 0664 означает, что владелец и группа получают доступ на чтение+запись (6), остальные — только на чтение (4).
  • directory mask = 0775 — задает битовую маску прав доступа для каталогов. Значение 0775 означает, что владелец имеет полный доступ (7), группа — чтение+запись+выполнение (7), остальные — чтение+выполнение (5).

Сохраните изменения и выйдите из файла.

  1. Проверьте конфигурацию на наличие ошибок:
testparm
Проверка конфигурации Samba на наличие ошибок

Если в ответ команда вернула «Loaded services file OK», то конфигурация корректна. При обнаружении ошибок утилита укажет номер строки и описание проблемы. После нажатия ENTER будет выведена текущая конфигурация.

  1. Перезапустите сервис Samba и сервис для обработки NetBIOS запросов:
systemctl restart smbd
systemctl restart nmbd
  1. Проверьте статус Samba:
systemctl status smbd
Проверка статуса сервиса Samba

Если в статусе сервиса отображается active (running), Samba готова к работе. На этом этапе настройка гостевого доступа окончена. Теперь проверим подключение.

Подключение к ресурсу из Windows

Подключитесь к файловому хранилищу из операционной системы Windows, используя логин и пароль.

  1. Откройте проводник и в адресной строке введите IP-адрес сервера Samba, например:

\\192.168.234.128\

Подключение к файловому хранилищу из Windows

Вместо 192.168.234.128 укажите свой IP-адрес.

  1. При появлении окна с вводом учётной записи введите логин smbuser и пароль, который вы задали при использовании утилиты smbpasswd:
Ввод данных для подключения к хранилищу данных Samba
  1. Перейдите в сетевую папку share и проверьте наличие  созданного файла file1.txt:
Проверка работоспособности файлового хранилища

Доступ по логину и паролю успешно осуществлен.

Подключение к ресурсу из Linux

Чтобы подключиться к ресурсу из Linux, используйте утилиту smbclient. Пример команды для подключения к Samba-серверу 192.168.234.128 под учётной записью smbuser:

smbclient //192.168.234.128/share -U smbuser
Подключение к файловому хранилищу из Linux при помощи командной строки

Введите пароль пользователя при появлении фразы “Password for [WORKGROUP\smbuser]”.

Если подключение произошло успешно, можно вывести список файлов с помощью команды ls. Чтобы скачать файл, используйте команду get.

Перемещение удаленных файлов в сетевую корзину

По умолчанию все файлы удаляются из директории безвозвратно. Чтобы избежать потери данных из-за случайного удаления, настройте сетевую корзину. 

  1. Создайте скрытую директорию .recycle:
mkdir -p /srv/samba/secure/.recycle
  1. Назначьте владельца ранее созданного пользователя smbuser:
chown smbuser:smbuser /srv/samba/secure/.recycle
  1. Откройте на редактирование конфигурационный файл smb.conf:
nano /etc/samba/smb.conf

В самый конец файла добавьте следующий блок:

[Recycle]
  vfs objects = recycle
   recycle:repository = .recycle/%U
   recycle:keeptree = yes
   recycle:versions = yes
   recycle:touch = yes
   recycle:exclude = *.tmp, *.temp, ~$*, *.log, *.bak
   recycle:exclude_dir = .recycle, temp, tmp
   recycle:maxsize = 0
   recycle:noversions = *.doc, *.docx, *.xls, *.xlsx, *.ppt, *.pptx

В этом случае мы используем модуль recycle, который перемещает удалённые файлы в специальную папку вместо полного удаления.

Сохраните изменения и выйдите из файла.

  1. Перезапустите сервис Samba:
systemctl restart smbd
  1. Для проверки удалите ранее созданный файл file1.txt, который находится в хранилище share. Затем перейдите в директорию /srv/smbuser-directory/.recycle/smbuser:
cd /srv/smbuser-directory/.recycle/smbuser

Всё работает: файл был перемещен в корзину вместо полного удаления.

Заключительный этап

Теперь, когда ваш файловый сервер на Samba работает, самое время убедиться в его работоспособности, особенно если предполагается его использование в корпоративной сети. Для этого:

  • Проверьте подключение с другого компьютера — это главный критерий успеха.
  • Настройте брандмауэр. Не забудьте открыть порты Samba или добавить правила для вашей подсети.
  • Защитите свою систему: Для гостевого доступа убедитесь, что общая папка не содержит конфиденциальных данных. Также используйте метод аутентификации по паролю. 

Этот материал был полезен?

Скидка новым клиентам
Закажите сервер сегодня и получите скидку на первый месяц аренды!
Наш сайт использует cookies Вы можете отключить их в настройках браузера, но это может ограничить функционал. Оставаясь на сайте, вы соглашаетесь с использованием cookies.