Создание простого файлового хранилища на базе Samba с ограничением доступа по IP-адресам


Если вам надо быстро и максимально просто создать небольшое файловое хранилище для дома или небольшого офиса и при этом не мучиться c доменом или рабочими группами, то можете смело воспользоваться представленной ниже инструкцией.

Как сделать простой файловый сервер на базе Ubuntu Linux 18.04

Что самое интересное решение получается кросс-платформенное и не требующее каких-то особых навыков администрирования Linux-систем, достаточно просто следовать моей инструкции.

Итак, что хотелось бы получить в итоге:

  • Ограничение доступа на уровне IP-адресов рабочих станций
  • Гостевой доступ без ввода логина и пароля

Итак, хватит слов, приступаем к делу и будем исходить из того, что у вас уже имеется установленный Ubuntu Linux server 18.04 в виртуальной машине или вы выделили для этого отдельный компьютер (вполне подойдет и небольшой ARM сервер).

Начинаем настройку с установки необходимого программного обеспечения и фактически нам требуется лишь один пакет samba, а остальные зависимости будут установлены автоматически:

# aptitude install samba

Теперь мы создаем пользователя от имени которого будут производиться операции с файлами на нашем сервере (использовать суперпользователя root для этих целей не самая удачная идея):

# adduser fileserver

Создаем каталог для хранения данных:

# mkdir /opt/data_vol
# chown fileserver:fileserver /opt/data_vol/

Теперь нам остается лишь создать конфигурацию для сервера samba (/etc/samba/smb.conf) и я сразу приведу рабочий конфиг, а дальше подробно пройдусь по каждой из опций:

[global]
   workgroup = CONTROLL
   server string = Controll center share
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   server role = standalone server
   map to guest = bad user
   usershare allow guests = yes

[data_vol]
   comment = Control center data storage
   browseable = yes
   read only = no
   path = /opt/data_vol/
   guest ok = yes
   create mask = 0700
   force user = fileserver
   force group = fileserver
   hosts allow = 10.212.1.2/32 127.0.0.1/32
   hosts deny = 0.0.0.0/0

Перезапустите сервер samba для принятия изменений (в дальнейшем можете делать reload чтобы перечитать конфигурацию):

# systemctl restart smbd

И как я и обещал пройдемся по каждой из опций в отдельности:

[global] - Секция описывающая глобальные параметры конфигурации Samba-сервера
workgroup - Названние рабочей группы в которую входит файловый сервер (я предпочитаю все внедоменные сервисы собирать в одной рабочей группе)
server string - Описание сервера (опционально отображается некоторыми приложениями)
log file - Путь к лог-файлам сервера
max log size - Ограничение на размер лог-файла
syslog - Выводить или не выводить информацию в системный журнал
server role - Режим работы сервера (в домене или отдельно)
map to guest - Режим работы с пользователями которых не удалось авторизовать по логин-пароль
usershare allow guests - Разрешаем или нет гостевой доступ
[data_vol] - Все, что не global, это описания отдельных сетевых ресурсов
comment - Описание для сетевого ресурса
browseable - Отображаем или нет сетевой ресурс (позволяет создавать скрытые ресурсы)
read only - Заблокировать сетевой ресурс только для чтения
path - Каталог с данными ассоциированный для шары
guest ok - Разрешаем или нет гостевой доступ
create mask - Маска по умолчанию для создаваемых файлов
force user - Все операции производятся от имени указанного пользователя
force group - Аналогично для группы
hosts allow - Список хостов или подсетей которым разрешен доступ к файловому хранилищу (прочие должны авторизоваться)
hosts deny = 0.0.0.0/0 - Для всех прочих хостов доступ закрыт

Такие конфигурации достаточно распространены, но в крупных компаниях я бы все же рекомендовал использовать интеграцию с контроллером домена Active Directory.