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

0
4785
Обложка статьи: Установка и настройка файлового сервера Samba на CentOS 8

Статья о CentOS, поддержка которого закончилась. Для новых серверов выберите замену: Rocky, AlmaLinux или Astra. Описание ниже сохранено как справка по старым системам.

Нужна файловая шара Samba для Windows-клиентов. Заголовок про CentOS 8 — EOL; пакеты ставьте на Alma/Rocky/RHEL или Debian. Гостевой доступ и шару в интернет не выставляйте.

1. Поставить Samba

sudo dnf install -y samba samba-client
sudo systemctl enable --now smb nmb
# Debian: sudo apt install -y samba && sudo systemctl enable --now smbd nmbd

Ожидание: служба active. Конфиг: /etc/samba/smb.conf. Перед правкой: sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak.

2. Пользователь и каталог

sudo mkdir -p /srv/samba/share
sudo useradd -M -s /usr/sbin/nologin smbuser
sudo smbpasswd -a smbuser
sudo chown smbuser:smbuser /srv/samba/share
sudo chmod 770 /srv/samba/share

Пароль Samba не обязан совпадать с паролем ОС. Не используйте guest ok = yes на машине, которую видит не только LAN.

3. Минимальная шара

[global]
   workgroup = WORKGROUP
   server role = standalone server
   map to guest = never
   smb ports = 445

[share]
   path = /srv/samba/share
   browseable = yes
   read only = no
   valid users = smbuser
sudo testparm
sudo systemctl reload smb

Ожидание testparm: конфиг разобран, нет unexpected parameters. Файрвол: TCP/445 только из офисной сети. 139 не обязателен, если вы оставили только 445.

sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.0.2.0/24 service name=samba accept'
sudo firewall-cmd --reload

4. Проверить с клиента

smbclient //192.0.2.10/share -U smbuser
# Windows: \\192.0.2.10\share

Ожидание: вход по паролю, файл создаётся. С чужой сети порт 445 не отвечает — см. проверку портов.

Несколько общих папок и доступ по группам

sudo groupadd smbusers
sudo usermod -aG smbusers alice
sudo smbpasswd -a alice
sudo mkdir -p /srv/samba/docs
sudo chgrp smbusers /srv/samba/docs
sudo chmod 2770 /srv/samba/docs

Раздел для smb.conf:

[docs]
   path = /srv/samba/docs
   read only = no
   valid users = @smbusers
   force group = smbusers
   create mask = 0660
   directory mask = 2770

Строка valid users = @smbusers разрешает доступ членам группы (о группах: добавление в группу). После правки проверьте sudo testparm.

SELinux

В RHEL-семействе SELinux блокирует Samba, если у каталога неверный контекст:

sudo semanage fcontext -a -t samba_share_t "/srv/samba(/.*)?"
sudo restorecon -Rv /srv/samba
sudo setsebool -P samba_enable_home_dirs on

Не отключайте SELinux из-за Samba. Разрешение подбирайте по журналу: ausearch -m avc -ts recent.

Отключить устаревший протокол

В секцию [global] добавьте минимальную версию протокола:

server min protocol = SMB2
client min protocol = SMB2

SMB1 устарел и содержит известные уязвимости. Старые устройства, которым нужен SMB1, лучше обновить или изолировать.

Журнал доступа

vfs objects = full_audit
full_audit:prefix = %u|%I|%S
full_audit:success = open read write rename unlink mkdir rmdir
full_audit:failure = connect
full_audit:facility = local5
full_audit:priority = notice

Эти параметры в разделе общей папки записывают действия пользователей в системный журнал, который можно отправить на сервер: сбор логов. Для защиты данных учтите резервное копирование общих папок: 3-2-1. Для введения в домен Active Directory понадобится отдельная настройка (winbind), она выходит за рамки статьи.

Как проверить

sudo testparm -s
ss -lntup | grep ':445'
smbclient //127.0.0.1/share -U smbuser

Конфиг валиден, 445 слушает, свой пользователь пишет, guest не входит.

Источники

Оставьте свой ответ