Настройка общей папки Samba на Ubuntu 22.04

Очередная краткая шпаргалка. На этот раз о том, как выполняется настройка общей папки 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.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *