Очередная краткая шпаргалка. На этот раз о том, как выполняется настройка общей папки Samba на Ubuntu 22.04. В тестовых стендах уже пару раз возникала необходимость настройки передачи файлов между Windows и Linux системами. Оказалось, что через общую папку на smb вполне удобный вариант. Да, можно использовать, например, WinSCP. Но тут уже дело вкуса и предпочтений.
В качестве Samba сервера я буду использовать Ubuntu Server 22.04.
Предварительная подготовка
Сначала я установлю пакет sabma:
sudo apt -y update && sudo apt -y install samba
Настрою автоматический запуск сервера smb:
sudo systemctl enable smbd
Теперь нужно запустить сервер smb
sudo systemctl start smbd
Заключительный шаг по подготовке – проверка статуса сервиса smb:
sudo systemctl status smbd
roman@test1:~$ sudo systemctl status smbd
● smbd.service - Samba SMB Daemon
Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-05-30 16:14:15 UTC; 2min 24s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 2842 (smbd)
Status: "smbd: ready to serve connections..."
Tasks: 4 (limit: 9362)
Memory: 10.4M
CPU: 136ms
CGroup: /system.slice/smbd.service
├─2842 /usr/sbin/smbd --foreground --no-process-group
├─2844 /usr/sbin/smbd --foreground --no-process-group
├─2845 /usr/sbin/smbd --foreground --no-process-group
└─2846 /usr/lib/x86_64-linux-gnu/samba/samba-bgqd --ready-signal-fd=45 --parent-watch-fd=11 --de>
May 30 16:14:15 test1 systemd[1]: Starting Samba SMB Daemon...
May 30 16:14:15 test1 update-apparmor-samba-profile[2836]: grep: /etc/apparmor.d/samba/smbd-shares: No such f>
May 30 16:14:15 test1 update-apparmor-samba-profile[2839]: diff: /etc/apparmor.d/samba/smbd-shares: No such f>
May 30 16:14:15 test1 systemd[1]: Started Samba SMB Daemon.
Сервис должен быть запущен.
Настройка общей папки Samba
Теперь я создам пару директорий, которые я буду использовать для настройки различных вариантов ограничения доступа к smb ресурсу:
sudo mkdir -p /data/guestshare
sudo mkdir -p /data/pwd
sudo mkdir -p /data/restricted
Настройка анонимного доступа
Этот вариант подойдет в том случае, если в директории разрешено складировать файлы или удалять файлы абсолютно всем – даже без указания логина и пароля. Крайне не рекомендую использовать этот вариант в боевой среде. Но для демонстрационных сред очень даже удобный вариант.
Сначала зададим соответствующие разрешения на уровне директории:
sudo chmod 777 /data/guestshare
Теперь скорректируем файл конфигурации для общих ресурсов smb:
sudo nano /etc/samba/smb.conf
Теперь я добавлю следующий блок с конфигураций для анонимного доступа:
# Guest access
[guestshare]
path = /data/guestshare
writable = yes
guest ok = yes
guest only = yes
create mode = 0777
directory mode = 0777
В таблице ниже я кратко опишу основные параметры.
Параметр | Назначение |
[guestshare] | Имя smb ресурса |
path | Физическое расположение директории на сервере |
writable | Запись в директорию разрешена, если установлено значение yes |
guest ok | Анонимный доступ разрешен, если установлено значение yes |
guest only | Если установлен параметр yes, то разрешен только анонимный доступ к ресурсу |
create mode | Все новые файлы будут создаваться с указанными разрешениями (777 в моем случае) |
directory mode | Все новые директории будут создаваться с указанными разрешениями (777 в моем случае) |
Настройка доступа по логину и паролю
Теперь немного расширим задачу. Доступ к smb ресурсу должны получать только аутентифицированные пользователи. Отмечу, что доступ может получить любой аутентифицированный пользователь. Аутентификация производится сервером smb через локальную базу учетных записей на сервере.
Установлю нужные разрешения для директории:
sudo chmod 777 /data/pwd
Скорректируем файл конфигурации для общих ресурсов smb:
sudo nano /etc/samba/smb.conf
Теперь я добавлю следующий блок с конфигураций для анонимного доступа:
# Password access
[pwd]
path = /data/pwd
writable = yes
guest ok = no
public = no
create mode = 0777
directory mode = 0777
В таблице ниже я кратко опишу основные параметры.
Параметр | Назначение |
[pwd] | Имя smb ресурса |
path | Физическое расположение директории на сервере |
writable | Запись в директорию разрешена, если установлено значение yes |
guest ok | Анонимный доступ запрещен, если установлено значение no |
public | Если установлено значение “no”, то публичный доступ к ресурсу запрещен |
create mode | Все новые файлы будут создаваться с указанными разрешениями (777 в моем случае) |
directory mode | Все новые директории будут создаваться с указанными разрешениями (777 в моем случае) |
Теперь нужно создать пользователя и установить пароль для его учетной записи:
sudo useradd user1 && sudo passwd user1
Также нужно задать пароль для пользователя user1 для доступа по smb:
sudo smbpasswd -a user1
Настройка ограниченного доступа
Последний распространеный вариант – настройка ограниченного доступа. Под ограниченным доступом я подразумеваю доступ только для какой-то конкретной группы или пользователя. Я настрою ограничение для пользователя.
Создам дополнительного пользователя и установлю пароль для его учетной записи, а также выполню настройку разрешений.
sudo useradd -M -d /home/user6 -s /usr/sbin/nologin user6 && sudo passwd user6
sudo mkdir /home/user6
sudo chown user6:user6 /home/user6
sudo chmod 2770 /home/user6
Также нужно задать пароль для пользователя user6 для доступа по smb:
sudo smbpasswd -a user6
sudo smbpasswd -e user6
Изменю владельца для директории:
sudo chown user6:user6 /data/restricted/
Также я оставлю полные разрешения только для владельца и группы владельца:
sudo chmod 770 /data/restricted/
Скорректируем файл конфигурации для общих ресурсов smb:
sudo nano /etc/samba/smb.conf
Теперь я добавлю следующий блок с конфигураций для анонимного доступа:
# Restricted access
[restricted]
path = /data/restricted
read only = no
browseable = yes
create mode = 0660
directory mode = 2770
valid users = user6
В таблице ниже я кратко опишу основные параметры.
Параметр | Назначение |
[restricted] | Имя smb ресурса |
path | Физическое расположение директории на сервере |
browseable | Если установлен параметр “yes”, то ресурс будет отображаться при запросе списка ресурсов на сервере. Если установлен параметр “no”, то ресурс будет доступен только по прямому пути. Например, \\10.10.10.33\restricted |
read only | Определяет, является ли ресурс доступным только для чтения |
create mode | Все новые файлы будут создаваться с указанными разрешениями (777 в моем случае) |
directory mode | Все новые директории будут создаваться с указанными разрешениями (777 в моем случае) |
valid users | Перечень пользователей, которым разрешен доступ к ресурсу. В моем случае – это пользователь user6. Список пользователей разделяется пробелом |
Дополнительно необходимо перезапустить службы:
sudo systemctl restart smbd nmbd
Проверка доступа с клиента
В разделе выше я показал три возможных варианта для настройки общей smb директории. Теперь можно проверить все три варианта доступа.
Проверка анонимного доступа
Довольно простой случай. Просто перейдите по адресу сервера и имени директории и вы должны получить доступ к ресурсу без каких-либо запросов на аутентификацию и ограничений:
\\10.10.10.33\guestshare
Также у вас должна быть возможность создавать директории и файлы:
Проверка доступа по логину и паролю
Поскольку анонимный доступ в этом сценарии не разрешен, то нам нужно будет указать логин и пароль для доступа к smb ресурсу. Перейдите по адресу сервера и имени директории и вы должны получить доступ к ресурсу без каких-либо запросов на аутентификацию и ограничений:
\\10.10.10.33\pwd
Как только вы попробуете получить доступ к директории, то samba сервер сразу попросит вас предоставить ваш логин и пароль.
После указания логина и пароля у вас должна быть возможность получить доступ к ресурсу, а также возможность создавать объекты внутри этой директории.
Проверка ограниченного доступа
Это последний вариант проверки. Наш сценарий таков, что только пользователь user6 должен получить доступ к ресурсу. Всем остальынм пользователя доступ запрещен.
Попробую получить доступ к ресурсу:
\\10.10.10.33\restricted
Появится окно с запросом учетных данных. Попробую указать учетные данные пользователя user1:
В доступе отказано. Ожидаемо.
Теперь я укажу учетные данные пользователя user6.
Вот теперь я могу успешно получить доступ к ресурсу и создавать различные файлы и директории.