Samba — это бесплатная программа с открытым исходным кодом, которая обеспечивает компьютерам с разными ОС (Windows, Linux и macOS) общий доступ к файлам и принтерам. Это решение позволяет централизованно хранить данные и упрощает их совместное использование. Кроме того, начиная с четвёртой версии, Samba может использоваться в качестве контроллера домена.
В статье рассмотрим процесс установки и настройки Samba для разных сценариев: предоставление гостевого доступа, настройку аутентификации с помощью учётных записей, а также подключение к ресурсам с операционных систем Windows и Linux.
Установка Samba
Рассмотрим установку Samba на виртуальном сервере с ОС Ubuntu 24.04. Все шаги необходимо выполнять от имени root-пользователя или пользователя с правами sudo.
- Обновите индекс репозиториев и установите пакеты Samba и smbclient:
apt update && apt -y install samba smbclient- Проверьте статус сервиса Samba:
systemctl status smbd
Если в статусе сервиса отображается active (running), значит, сервис успешно установлен и запущен.
- Добавьте сервис в автозагрузку:
systemctl enable smbdКоманды для управления демоном Samba:
Запуск
systemctl start smbd- Остановка
systemctl stop smbd- Перезапуск
systemctl restart smbd- Откройте порты, чтобы клиентские компьютеры могли подключаться к ресурсам 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 выключен.
- Создайте новую директорию, где будут храниться файлы:
mkdir -p /srv/samba/share- Назначьте владельца и выдайте права на созданную директорию:
chown -R nobody:nogroup /srv/samba/share
chmod -R 775 /srv/samba/shareПрава доступа 775 означают, что владелец и группа обладают полным доступом, а все остальные могут только читать файлы.
- Перейдите в созданную директорию:
cd /srv/samba/share- Создайте текстовый файл с именем
file1.txtи запишите в него фразу: «Тестируем гостевой доступ в Samba!»:
echo "Тестируем гостевой доступ в Samba!" > file1.txtВ дальнейшем все файлы и каталоги необходимо создавать в папке /srv/samba/share.
- Перед тем как редактировать основной конфигурационный файл
smb.conf, создайте его резервную копию:
cp /etc/samba/smb.conf /etc/samba/smb.conf.bakup- С помощью текстового редактора, например, nano, откройте на редактирование файл
smb.conf:
nano /etc/samba/smb.conf- В файле найдите секцию
[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 — стандартная группа без привилегий.
- Проверим синтаксис конфигурации на возможные ошибки:
testparm
Если в ответ команда вернула «Loaded services file OK», то конфигурация корректна. При обнаружении ошибок утилита укажет номер строки и описание проблемы.
- Перезапустите сервис Samba и проверьте статус:
systemctl restart smbd && systemctl status smbd
Если в статусе сервиса отображается active (running), Samba готова к работе. На этом этапе настройка гостевого доступа окончена. Теперь проверим подключение.
Подключение к ресурсу из Windows
Подключимся к файловому хранилищу с устройства на операционной системе Windows.
- Откройте проводник и в адресной строке введите IP-адрес сервера и имя ресурса guestshare. Вместо IP-адреса
192.168.234.128укажите свой.
\\192.168.234.128\guestshare

- При появлении окна с вводом учётной записи введите guest в поле Имя пользователя, а поле с паролем оставьте пустым и нажмите кнопку ОК:

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

- Найдите файл с именем
file1.txt, который мы создали ранее, и проверьте его содержимое:

Подключение к ресурсу из Linux
В комплекте с Samba поставляется утилита smbclient, которая позволяет подключаться к ресурсам Samba из командной строки. Для этого используйте команду:
smbclient //192.168.234.128/guestshare -U guest -N
192.168.234.128 — это IP-адрес сервера с Samba: не забудьте заменить его на свой.
Чтобы вывести список всех файлов в каталоге, необходимо выполнить команду ls, а для скачивания файла — get с указанием имени файла.
Настройка доступа по логину и паролю
Samba позволяет использовать персонализированные учётные записи для доступа к файлам.
Как настроить доступ по логину и паролю:
- Создайте нового пользователя с именем smbuser:
adduser --no-create-home --shell /usr/sbin/nologin smbuser
- При создании пользователя нужно установить для него пароль. Однако Samba не может использовать системный пароль пользователя напрямую, поскольку работает по протоколу SMB/CIFS. Он применяет для аутентификации NTLM-хеши, несовместимые с хешами паролей в Unix. Поэтому пароль будет использоваться только при аутентификации в Samba-ресурсах и не будет изменён для системного пользователя.
Чтобы задать пароль, выполните команду:
smbpasswd -a smbuser
При этом необязательно вводить пароль, заданный при создании пользователя, можно придумать новый.
- Включите учётную запись пользователя в базе Samba:
smbpasswd -e smbuser
- Создайте новую директорию, где будут храниться файлы:
mkdir -p /srv/smbuser-directory- Назначьте владельца и группу для директории:
chown smbuser:smbuser /srv/smbuser-directory/А также задайте права доступа:
chmod 2775 /srv/smbuser-directory/Права доступа 2775 означают, что каталог монтируется с setgid-битом (2), полными правами для владельца и группы (7 и 7), а также чтением/исполнением для всех остальных (5).
- Перейдите в ранее созданную директорию:
cd /srv/smbuser-directoryСоздайте новый файл с именем file1.txt и запишите в него строку «Тестируем доступ по логину и паролю в Samba!»:
echo “Тестируем доступ по логину и паролю в Samba!” > file1.txt- Перед тем, как редактировать конфигурационный файл
smb.conf, проверьте резервную копию или создайте её:
cp /etc/samba/smb.conf /etc/samba/smb.conf.bakup- Откройте на редактирование конфигурационный файл
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).
Сохраните изменения и выйдите из файла.
- Проверьте конфигурацию на наличие ошибок:
testparm
Если в ответ команда вернула «Loaded services file OK», то конфигурация корректна. При обнаружении ошибок утилита укажет номер строки и описание проблемы. После нажатия ENTER будет выведена текущая конфигурация.
- Перезапустите сервис Samba и сервис для обработки NetBIOS запросов:
systemctl restart smbd
systemctl restart nmbd- Проверьте статус Samba:
systemctl status smbd
Если в статусе сервиса отображается active (running), Samba готова к работе. На этом этапе настройка гостевого доступа окончена. Теперь проверим подключение.
Подключение к ресурсу из Windows
Подключитесь к файловому хранилищу из операционной системы Windows, используя логин и пароль.
- Откройте проводник и в адресной строке введите IP-адрес сервера Samba, например:
\\192.168.234.128\

Вместо 192.168.234.128 укажите свой IP-адрес.
- При появлении окна с вводом учётной записи введите логин smbuser и пароль, который вы задали при использовании утилиты smbpasswd:

- Перейдите в сетевую папку share и проверьте наличие созданного файла
file1.txt:

Доступ по логину и паролю успешно осуществлен.
Подключение к ресурсу из Linux
Чтобы подключиться к ресурсу из Linux, используйте утилиту smbclient. Пример команды для подключения к Samba-серверу 192.168.234.128 под учётной записью smbuser:
smbclient //192.168.234.128/share -U smbuser
Введите пароль пользователя при появлении фразы “Password for [WORKGROUP\smbuser]”.
Если подключение произошло успешно, можно вывести список файлов с помощью команды ls. Чтобы скачать файл, используйте команду get.
Перемещение удаленных файлов в сетевую корзину
По умолчанию все файлы удаляются из директории безвозвратно. Чтобы избежать потери данных из-за случайного удаления, настройте сетевую корзину.
- Создайте скрытую директорию
.recycle:
mkdir -p /srv/samba/secure/.recycle- Назначьте владельца ранее созданного пользователя smbuser:
chown smbuser:smbuser /srv/samba/secure/.recycle- Откройте на редактирование конфигурационный файл
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, который перемещает удалённые файлы в специальную папку вместо полного удаления.
Сохраните изменения и выйдите из файла.
- Перезапустите сервис Samba:
systemctl restart smbd- Для проверки удалите ранее созданный файл
file1.txt, который находится в хранилище share. Затем перейдите в директорию/srv/smbuser-directory/.recycle/smbuser:
cd /srv/smbuser-directory/.recycle/smbuserВсё работает: файл был перемещен в корзину вместо полного удаления.
Заключительный этап
Теперь, когда ваш файловый сервер на Samba работает, самое время убедиться в его работоспособности, особенно если предполагается его использование в корпоративной сети. Для этого:
- Проверьте подключение с другого компьютера — это главный критерий успеха.
- Настройте брандмауэр. Не забудьте открыть порты Samba или добавить правила для вашей подсети.
- Защитите свою систему: Для гостевого доступа убедитесь, что общая папка не содержит конфиденциальных данных. Также используйте метод аутентификации по паролю.