Установка и настройка файлового сервера Samba на CentOS 8

Обновлено и опубликовано Опубликовано:

Используемые термины: Samba, CentOS, SMB.

Samba позволяет настроить файловое хранилище различных масштабов — от малых офисов для крупных организаций. В данной инструкции мы рассмотрим процесс настройки файлового сервера. Сначала мы выполним установку и базовую настройку с предоставлением гостевого доступа. После будет приведены примеры разграничения доступа по пользователям, группам и пользователям Active Directory.

Подготовка сервера

1. Время

Для корректного отображения дат, необходимо позаботиться о синхронизации времени. Для этого будем использовать демон chrony. Установим его:

dnf install chrony

Разрешим автозапуск и стартанем сервис:

systemctl enable chronyd

systemctl start chronyd

2. Брандмауэр

По умолчанию, в системах CentOS брандмауэр запрещает все соединения. Необходимо разрешить сервис samba. Выполняем команду:

firewall-cmd --permanent --add-service=samba

Применяем настройки:

firewall-cmd --reload

3. SELinux

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

dnf install policycoreutils setroubleshoot

Теперь создаем само правило. Например, если мы планируем использовать каталог /data, то вводим команды:

mkdir /data

* на случай, если каталога еще нет, создаем его.

semanage fcontext -a -t samba_share_t "/data(/.*)?"

restorecon -R -v /data

Или можно просто отключить SELinux.

Установка и запуск Samba

Установка выполняется из репозитория одной командой:

dnf install samba

Разрешаем автостарт сервиса и запускаем его:

systemctl enable smb --now

И проверим, что сервис запустился: 

systemctl status smb

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

Пример подключения к SMB шаре с компьютера на Windows

* в данном примере мы подключаемся к серверу Samba с IP-адресом 192.168.1.15.

Если мы настроили сервер правильно, система должна запросить пароль на подключение к Samba. Отказываемся его вводить. На данном этапе проверка закончена.

Создание первой шары и предоставление к ней гостевого доступа (анонимного)

Разберем самый простой пример предоставления доступа к папке — анонимный доступ всем пользователям без запроса пароля.

Открываем на редактирование конфигурационный файл samba:

vi /etc/samba/smb.conf

В секцию [global] добавляем:

...
map to guest = Bad Password
...

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

[Общая папка]
    comment = Public Folder
    path = /data/public
    public = yes
    writable = yes
    read only = no
    guest ok = yes
    create mask = 0777
    directory mask = 0777
    force create mode = 0777
    force directory mode = 0777

* где: 

  • [Общая папка] — имя общей папки, которое увидят пользователи, подключившись к серверу.
  • comment — свой комментарий для удобства.
  • path — путь на сервере, где будут храниться данные.
  • public — для общего доступа. Установите в yes, если хотите, чтобы все могли работать с ресурсом.
  • writable — разрешает запись в сетевую папку.
  • read only — только для чтения. Установите no, если у пользователей должна быть возможность создавать папки и файлы.
  • guest ok — разрешает доступ к папке гостевой учетной записи.
  • create mask, directory mask, force create mode, force directory mode — при создании новой папки или файла назначаются указанные права. В нашем примере права будут полные.

Создаем каталог на сервере и назначим права:

mkdir -p /data/public

chmod 777 /data/public

Применяем настройки samba, перезагрузив сервис:

systemctl restart smb

Пробуем подключиться к папке. Мы должны зайти в нее без необходимости ввода логина и пароля.

Доступ к папке по логину и паролю

Теперь создадим каталог, в который вход будет разрешен только авторизованным пользователям.

Открываем конфигурационный файл samba:

vi /etc/samba/smb.conf

Добавляем настройку для новой папки:

[Папка сотрудников]
    comment = Staff Folder
    path = /data/staff
    public = no
    writable = yes
    read only = no
    guest ok = no
    create mask = 0777
    directory mask = 0777
    force create mode = 0777
    force directory mode = 0777

* эти настройки, во многом, похожи на те, что использовались в примере выше. Вот основные различия:

  • path = /data/staff — используем новый путь до папки.
  • public = no — запрещаем публичный доступ.
  • guest ok = no — не разрешаем гостевое подключение.

Создаем каталог для новой папки:

mkdir /data/staff

Задаем права на созданный каталог:

chmod 777 /data/staff

Создаем пользователя в системе Linux:

useradd staff1

* где staff1 — имя пользователя.

Задаем пароль для пользователя:

passwd staff1

Теперь создадим пользователя в samba:

smbpasswd -a staff1

Перезапускаем samba:

systemctl restart smb

Пробуем зайти на сервер — общую папку мы должны открыть без авторизации, а при попытке открыть папку сотрудников должно появиться окно ввода логина и пароля.

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

Доступ к папке определенным пользователям и группам

Теперь создадим папку, доступ к которой будут иметь ограниченное количество пользователей.

Открываем конфигурационный файл samba:

vi /etc/samba/smb.conf

Добавляем настройку для новой папки:

[Приватная папка]
    comment = Private Folder
    path = /data/private
    public = no
    writable = no
    read only = yes
    guest ok = no
    valid users = admin, staff2, staff3, @privateusers
    write list = admin, staff2
    create mask = 0777
    directory mask = 0777
    force create mode = 0777
    force directory mode = 0777
    inherit owner = yes

* стоит обратить внимание на следующие настройки:

  • path = /data/private — используем новый путь до папки.
  • writable = no и read only = yes — в данном примере мы разрешим запись в каталог только некоторым пользователям. Поэтому общие настройки, разрешающие запись в папку, должны быть запрещены.
  • valid users — список пользователей, которым разрешено подключаться к каталогу. В данном примере разрешения работают для пользователей admin, staff2 и staff3, а также для всех, кто входим в группу privateusers.
  • write list — список пользователей, которые имеют доступ к папке на чтение и запись. В данном примере мы разрешаем это только для пользователей admin и staff2.
  • inherit owner — опция позволяем включить наследование владельца при создании папок и файлов.

* если мы хотим, чтобы доступ к каталогу был полный у определенных пользователей (без разделения на тех, кто может только читать и тех, кто может также писать в папку), то опцию write list можно не указывать, а опции writable и read only оставить как в примерах выше.

Создаем каталог для новой папки:

mkdir /data/private

Задаем права на созданный каталог:

chmod 777 /data/private

Для применения настроек перезапускаем samba:

systemctl restart smb

Проверяем возможность работы с новым каталогом.

Авторизация с Active Directory

Разберем пример конфигурирования файлового сервера samba в домене Windows и настроим авторизацию пользователей на базе LDAP Active Directory.

Подключение к Active Directory

Введем наш сервер в домен. Сначала необходимо убедиться, что сервер доступен по своему доменному имени. Если серверу так и не было задано вменяемого имени, вводим команду:

hostnamectl set-hostname samba.dmosk.local

* где samba — имя сервера; dmosk.local — домен.

После добавляем в DNS наш сервер samba. Ждем минут 15, если у нас используется доменная инфраструктура с несколькими сайтами.

Устанавливаем необходимые компоненты:

dnf install samba-client samba-winbind samba-winbind-clients krb5-workstation

Открываем конфигурационный файл samba:

vi /etc/samba/smb.conf

В разделе [global] редактируем следующие опции:

workgroup = DMOSK
security = ads

* где DMOSK — NETBIOS имя домена; ads — указывает, что для samba будет использоваться модель безопасности LDAP Active Directory.

Также в [global] добавим следующие строки:

kerberos method = secrets and keytab
realm = DMOSK.LOCAL
winbind enum groups = Yes
winbind enum users = Yes
idmap config * : rangesize = 1000000
idmap config * : range = 1000000-19999999
idmap config * : backend = autorid

* где:

  • kerberos method — метод проверки kerberos. В данном примере сначала используется secretts.tdb, а затем системная таблица ключей.
  • realm — сервер Active Directory. В нашем примере прописан домен, так как по нему можно обратиться к любому из серверов AD.
  • winbind enum groups — задает пределы перечисления групп через setgrent(), getgrent() и endgrent().
  • winbind enum users — задает пределы перечисления пользователей через setpwent(), getpwent()и endpwent().
  • idmap config * : rangesize — определяет количество доступных uids и gids в каждом доменном диапазоне.
  • idmap config * : range — определяет доступные совпадающие диапазоны uid и gid, для которых серверная часть является авторитетной.
  • idmap config * : backend — задает idmap плагин для использования в качестве SID/uid/gid подсистемы

Вводим сервер в домен: 

net ads join -U Administrator@dmosk.local

* где Administrator — учетная запись пользователя AD с правами на ввод компьютеров в домен; dmosk.local — наш домен.

Мы должны увидеть, примерно, следующее:

Using short domain name -- DMOSK
Joined 'SAMBA' to dns domain 'dmosk.local'

Разрешаем автозапуск winbind и стартуем его:

systemctl enable winbind --now

Выбираем профиль для аутентификации:

authselect select winbind --force

Проверяем, что наш сервер может получить список пользователей Active Directory:

wbinfo -u

... и групп:

wbinfo -g

Если мы увидели список пользователей и групп, то присоединение сервера к домену завершено.

Настройка шары

Открываем конфигурационный файл samba:

vi /etc/samba/smb.conf

Создаем шару:

[AD]
    comment = Folder for AD users
    path = /data/ad
    public = no
    writable = yes
    read only = no
    guest ok = no
    valid users = "@DMOSK\Domain Users" "@DMOSK\Domain Admins"
    create mask = 0777
    directory mask = 0777
    force create mode = 0777
    force directory mode = 0777
    inherit owner = yes

* в данном примере мы будем шарить папку на сервере /data/ad; мы предоставим доступ всем пользователям групп Domain Users и Domain Admins домена DMOSK.

Создаем каталог и задаем права:

mkdir /data/ad

chmod 777 /data/ad

Теперь можно перезапустить самбу:

systemctl restart smb

Пробуем подключиться к серверу. У нас должна появиться еще одна папка ad

Права ACL

И в продолжение разговора о интеграции с AD, попробуем настроить ACL для более тонкого предоставления прав доступа.

Для этого снова открываем конфигурационный файл samba:

vi /etc/samba/smb.conf

В раздел [global] добавим:

acl compatibility = auto

... и создадим новую шару:

[AD ACL]
    comment = Folder for AD ACL
    path = /data/adacl
    public = no
    writable = yes
    read only = no
    guest ok = no
    admin users = "@DMOSK\Domain Admins"
    inherit acls = yes
    inherit owner = yes
    inherit permissions = yes
    map acl inherit = yes

* где admin users — пользователи, которые могут менять права папки; inherit acls — наследование acl прав; inherit permissions — наследование прав от папки родителя; map acl inherit — использовать ли схему контроля доступа, хранимую в Windows ACL.

Создаем каталог и задаем права:

mkdir /data/adacl

chmod 777 /data/adacl

Перезапускаем самбу:

systemctl restart smb

Подключаемся к нашей созданной общей папке. Кликаем по ней правой кнопкой мыши - выбираем свойства. На вкладке «Безопасность» мы можем менять права:

Смена прав доступа с помощью ACL

Сетевая корзина

При удалении файлов из общей папки, данные удаляются навсегда. Но мы можем настроить сетевую корзину — скрытый каталог, в который будут перемещаться удаляемые с самбы объекты.

Открываем конфигурационный файл:

vi /etc/samba/smb.conf

Создаем шару:

[Recycle]
   comment = Snap Directories
   path = /data/recycle
   public = yes
   browseable = yes
   writable = yes
   vfs objects = recycle
   recycle:repository = .recycle/%U
   recycle:keeptree = Yes
   recycle:touch = Yes
   recycle:versions = Yes
   recycle:maxsize = 0
   recycle:exclude = *.tmp, ~$*
   recycle:exclude_dir = /tmp

* где:

  • vfs objects = recycle — использовать подсистему recycle.
  • recycle:repository — где хранить удаленные объекты. В данном примере удаленные файлы попадут в скрытый каталог .recycle к котором создастся каталог с именем пользователя, удалившего файл или папку.
  • recycle:keeptree — удалять объекты с сохранение дерева каталогов.
  • recycle:touch — изменить ли дату изменения файла при его перемещении в корзину.
  • recycle:versions — при удалении файлов с совпадающими именами, добавлять номер версии.
  • recycle:maxsize — не помещать в корзину файлы, размер которых больше заданного параметра (в байтах). В данном примере, помещать файлы любого размера.
  • recycle:exclude — исключить файлы.
  • recycle:exclude_dir — исключить каталог.

Создаем каталог и задаем права:

mkdir /data/recycle

chmod 777 /data/recycle

Перезапускаем самбу:

systemctl restart smb

Пробуем зайти в сетевой каталог Recycle и создать, а после удалить файл. Он должен оказаться к скрытой папке .recycle.

Для автоматической чистки сетевой корзины можно создать скрипт:

mkdir /scripts

vi /scripts/cleanrecycle.sh

#!/bin/bash

recyclePath="/data/recycle/.recycle"
maxStoreDays="30"

/usr/bin/find $recyclePath -name "*" -ctime +$maxStoreDays -exec rm {} \;

* в данном скрипте мы ищем все файлы в каталоге /data/recycle/.recycle, которые старше 30 дней и удаляем их.

Разрешаем запуск скрипта:

chmod +x /scripts/cleanrecycle.sh

Создаем задание в планировщике:

crontab -e

0 5 * * * /scripts/cleanrecycle.sh

* в данном примере мы будем запускать скрипт по очистке сетевой корзины каждый день в 05:00.

Подключение к шаре

Теперь разберем примеры подключения к нашим шарам из разных систем.

Windows

Для разового подключения можно использовать проводник, прописав в нем адрес сервера через косые линии:

Пример подключения к SMB шаре с компьютера на Windows

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

Подключение сетевого диска в Windows

В открывшемся окне прописываем путь до сетевой папки и выбираем имя диска:

Прописываем путь до сетевой папки, на которую хотим сделать сетевой диск

Сетевой диск настроен.

Но мы может сделать те же действия из командной строки:

net use x: \\samba.dmosk.local\AD ACL /persistent:yes

* где x: — имя сетевого диска; \\samba.dmosk.local\AD ACL — путь до сетевого каталога; persistent:yes — указывает на то, что нужно восстанавливать данный диск каждый раз при входе в систему.

Linux

Монтирование

В Linux мы можем монтировать удаленный каталог с помощью команды mount, например:

mount -t cifs "//192.168.1.15/ad" /mnt -o user=dmosk

* где 192.168.1.15 — IP-адрес сервера; mnt — каталог, куда монтируем сетевую шару; dmosk — пользователь, под которым выполняем подключение к сетевому каталогу.
** в систему должен быть установлен пакет cifs-utils.

Подробнее, процесс монтирования описан в инструкции Как в Linux монтировать шару CIFS.

SMB Browser

Также мы можем увидеть содержимое удаленных папок на samba при помощи клиента smb. Для начала установим данного клиента:

а) на Red Hat / CentOS / Fedora:

yum install samba-client

б) на Debian / Ubuntu / Mint:

apt-get install samba-client

После вводим команду:

smbclient -L 192.168.1.15 -U staff@dmosk.local

* где 192.168.1.15 — сервер samba, к которому мы пытаемся подключиться; staff@dmosk.local — учетная запись, под которой выполняется подключение.

... мы получим список каталогов, которые расшарены на сервере.

Также мы можем подключиться к конкретной папке, например:

smbclient \\\\192.168.1.15\\ad -U staff@dmosk.local

Мы подключимся клиентом samba — можно выполнить запрос на показ содержимого:

smb: \> ls

Или полный список возможных команд:

smb: \> help

Некоторые опции Samba

Рассмотрим некоторые полезные опции, которые могут пригодится при настройке Samba.

1. hosts allow

Параметр задает список разрешенных хостов или сетей, с которых можно подключаться к серверу. Если его прописать в секцию с настройкой шары, то он будет действовать только для нее, если прописать в [global], то для всех общих папок.

Пример использования параметра.

hosts allow = comp1, 192.168.1., 192.168.160.0/255.255.252.0

* в нашем примере мы разрешим доступ только для компьютера comp1, компьютеров из сетей 192.168.1.0/24 и 192.168.160.0/22.

2. hosts deny

Параметр аналогичный hosts allow, только он наоборот — запрещает доступ для хостов и сетей. Например:

hosts deny = comp2, 192.168.2., 192.168.164.0/255.255.252.0

hosts deny = ALL EXCEPT 192.168.3.

3. interfaces

По умолчанию samba использует все сетевые интерфейсы, кроме локальной петли (127.0.0.1). Параметр interfaces позволит указать, на каком сетевом адаптере файловый сервер должен принимать запросы. Пример:

interfaces = ens32 192.168.1.15/24 192.168.2.15/255.255.255.0

# Серверы # CentOS
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет