# Базовая настройка подключения к серверу Samba

## Установка Samba

За основу примера я возьму дистрибутив [Ubuntu 20.04.2](https://releases.ubuntu.com/20.04/). Для начала необходимо установить сам сервер Samba, если он отсутствует. Обновим базы данных пакетов и произведём установку Samba:

```sh
sudo apt update
sudo apt install samba
```

После завершения установки служба Samba запустится автоматически. Чтобы проверить, работает ли сервер Samba, введём:

```sh
systemctl status smbd.service
```

или

```sh
systemctl status smb.service
```

Получим ожидаемый ответ:

```sh
● smbd.service - Samba SMB Daemon
     Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-06-18 23:03:37 MSK; 15h ago
       Docs: man:smbd(8)
             man:samba(7)
             man:smb.conf(5)
   Main PID: 1368 (smbd)
     Status: "smbd: ready to serve connections..."
...
```

## Создание сетевой учетной записи пользователя

Для подключения по сети к расшариваемому каталогу нам необходимо иметь учетную запись с нужными правами. Для начала создадим общую группу пользователей Samba, в которую далее включим нашу учетную запись:

```sh
sudo groupadd smbgrp
```

Создаём нового пользователя и включаем его в вышесозданную группу (`-M` - без домашней директории, `-G` - добавляем в группу, `-s /sbin/nologin` - без авторизации на текущем компьютере/без оболочки):

```sh
sudo useradd -MG smbgrp -s /sbin/nologin smbuser
```

Зададим Samba-пароль для созданной учетной записи:

```sh
sudo smbpasswd -a smbuser
```

## Настройка расшариваемого каталога

Нам необходимо будет создать каталог (или выбрать из имеющихся), который необходимо будет сконфигурировать в файле настроек сервера. Создаём каталог для общего доступа. Я буду его создавать в `/mnt`:

```sh
sudo mkdir -p /mnt/share
```

Установить права на чтение/запись расшариваемого каталога (где `$USER` - текущий пользователь host-системы):

```sh
sudo chown $USER:smbgrp /mnt/share
sudo chmod g+ws,o-rx /mnt/share
```

Или вместо последней строки выполнить:

```sh
sudo chmod 2770 /mnt/share
```

Также необходимо добавить пользователя host-системы в группу `smbgrp`, для того, чтобы на хосте можно было просматривать/редактировать файлы, загруженные пользователем `smbuser`:

```sh
sudo usermod -aG smbgrp $USER
```

В результате манипуляций у нас должно получиться:

```sh
drwxrws---  2 host-user smbgrp 4096 Jun 19 11:46 share/
```

## Конфигурация smb.conf

Файл конфигурации Samba находится в `/etc/samba/smb.conf`. Нам необходимо (на всякий случай) сделать бэкап данного файла и внести изменения в основной файл для доступа к расшариваемому каталогу. Делаем бэкап:

```sh
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
```

Теперь редактируем файл конфигурации:

```sh
sudo nano /etc/samba/smb.conf
```

Добавляем в конец файла строки:

```sh
[share]
   path = /mnt/share
   valid users = @smbgrp
   guest ok = no
   browseable = yes
   writeable = yes
   create mask = 2770
   directory mask = 2770
```

Сохраняем файл конфигурации и проверяем на корректность новые указанные данные:

```sh
testparm -s
```

Получим ожидаемый ответ:

```sh
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
```

Если всё в порядке - перезапускаем службу Samba:

```sh
sudo systemctl restart smbd.service
```

### Для доступа гостям

```sh
[share]
   path = /mnt/share
   guest ok = yes
   guest only = yes
   browseable = yes
   writeable = yes
   read only = no
```

## Соединение

Теперь попробуем присоединиться к нашему серверу с удалённого компьютера. На host-системе должен быть открыт порт `445` для подключения к Samba. С удалённого компьютера под управлением Linux (в моём случае [Solus Budgie 4.2](https://getsol.us/2021/02/03/solus-4-2-released/)) запускаем утилиту `smbclient` и подключаемся к нашему серверу (где `-U` — наш пользователь Samba, далее следует пароль):

```sh
smbclient //<host-ip-address>/share -U 'smbuser' '<smbuser-password>'
```

В моём случае:

```sh
smbclient //192.168.56.104/share -U 'smbuser' 'smbuser'
```

В ответ нам прилетит приглашение Samba:

```sh
Try "help" to get a list of possible commands.
smb: \>
```

Теперь мы можем просматривать/редактировать файлы на нашем сервере. Базовая настройка подключения к серверу Samba окончена!
