🐹 CentOS 7: Установка и настройка Samba.

Содержание:

1. Введение.

1.1. Описание программы.
1.2. Проверка наличия Samba.

2. Предварительная подготовка.

2.1. Удалим SELinux.
2.2. Обновим систему.
2.3. Установим полезные программы.
2.4. Получение IP-адреса по DHCP.
2.5. Получение IP-адреса вручную.
2.6. Временное отключение межсетевого экрана.
2.7. Отключение протокола IPv6.

3. Установка Samba.
4. Доступ по пользователю и паролю.
5. Доступ по IP-адресу.
6. Доступ всем подряд без ограничений.
7. Настройка межсетевого экрана.

7.1. Для firewalld.
7.2. Для iptables.
7.3. Для iptables доступ только из локальной сети.

8. Система логирования.
9. Проверка параметров и перезагрузка службы.
10. Оригиналы источников информации.


1.  Введение.

1.1. Описание программы.

Samba — программа, которая позволяет обращаться к сетевым дискам на различных операционных системах по протоколу  Server Message Block (SMB) и Common Internet File System (CIFS). Имеет клиентскую и серверную части. Является свободным программным обеспечением, выпущена под лицензией GPL.

Основное предназначение — организация коллективного доступа к файлам и принтерам между Linux и Windows системами.

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

  • smbd — демон, являющийся SMB-сервером файловых служб и служб печати;
  • nmbd — демон, предоставляющий службы имен NetBIOS;
  • smblient — утилита предоставляет доступ из командной строки к ресурсам SMB. Она также позволяет получить списки общих ресурсов на удаленных серверах и просматривать сетевое окружение;
  • smb.conf — конфигурационный файл, содержащий настройки для всех инструментов Samba.

Для того чтобы все работало правильно, все машины должны состоять в одной рабочей группе, указанной на сервере Samba. По умолчанию для Windows, CentOS 7 рабочая группа называется WORKGROUP.

1.2. Проверка наличия Samba.

Samba включена практически во все дистрибутивы Linux.

Скорей всего у вас он тоже есть, проверьте это:

# whereis samba

Если нет, то установим её.

2. Предварительная подготовка.

2.1. Удалим SELinux.

Удалим SELinux:

# yum -y remove selinux*

Перезагрузим CentOS 7:

# reboot

2.2. Обновим систему.

Обновим систему до актуального состояния:

# yum -y update

2.3. Установим полезные программы.

Net-tools и текстовый редактор Midnight Commander:

# yum -y install net-tools mc

2.4. Получение IP-адреса по DHCP.

Если по какой-то причине в сети нету DHCP сервера, вам стоит его поднять.

Для принудительного обновления или получения IP-адреса выполните команду:

# dhclient

Показать IP-адрес при установленных net-tools:

# ifconfig

или

# nmcli device show

Запоминаем наш IP-адрес, который был выдан по DHCP. Он нам пригодится для обращения к нашему Samba серверу с других компьютеров.

2.5. Получение IP-адреса вручную.

В командной строке список сетевых адаптеров можно получить командой:

# nmcli device status

Статический IP и Gateway задается следующей командой, где «enp2s0» — это имя сетевого адаптера:

# nmcli connection modify "enp2s0" ipv4.addresses "192.168.0.31/24 192.168.1.1"

2.6. Временное отключение межсетевого экрана.

По умолчанию CentOS 7 использует брандмауэр firewalld, временно отключим его:

# systemctl stop firewalld

Межсетевой экран настроим и активируем в конце инструкции, пока его отключим для чистоты экспериментов.

2.7. Отключение  протокола IPv6.

Если протокол IPv6 не используется, логично его отключить, для этого нужно добавить два параметра в файл /etc/sysctl.conf, выполните следующие команды или используйте редактор mcedit.

Открываем настройку ядра:

# mcedit /etc/sysctl.conf

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

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

Нам не нужно отключать IPv6 на уровне всей системы, а только, например, для «enp2s0»» — это имена сетевых адаптеров.

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

net.ipv6.conf.enp2s0.disable_ipv6 = 1

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

# sysctl -p

Перезагрузите службу сети:

# systemctl restart network

3. Установка Samba.

Устанавливаем Samba:

# yum -y install samba samba-client samba-common

Запускаем службу smb.service и smb.service добавляем в автозагрузку.

Первый:

# systemctl start smb
# systemctl enable smb

И второй:

# systemctl start nmb
# systemctl enable nmb

Делаем резервное копируем конфига.

# cp /etc/samba/smb.conf /etc/samba/smb.conf.original

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

# mcedit /etc/samba/smb.conf

В зависимости от этого настройки будут немного разные:

Настраиваем как над smb.conf по готовым решениям ниже и перезапускаем Samba, чтобы изменения вступили в силу, перезапускаем сервис Samba:

# systemctl restart smb
# systemctl restart nmb

Проверим его работу:

# systemctl status smb.service

Ответ:

Создаем папку для общего доступа и назначаем для всех права записи:

# mkdir -p /folder_for_share

Создадим и добавим «бездомного» и «бесконсольного» служебного пользователя по имени share-user.

# useradd share-user --no-create-home --shell /bin/false -M -G users -s /sbin/nologin

Импортируем этого пользователя в Samba и задаем пароль:

# smbpasswd -a share-user

 Настраиваем права на папку, чтобы он имел права на работу с ней и в ней.

# chown -R share-user:share-user /folder_for_share
# chmod -R 0775 /folder_for_share

Проверяем параметры:

# testparm

Ответ:

Просмотр пользователей:

# pdbedit -L -v

Ответ:

4. Доступ по пользователю и паролю.

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

# mcedit /etc/samba/smb.conf

Для доступа по паролю пишем такой конфигурационный файл:

[global]
passdb backend = tdbsam
server string = Samba

workgroup = WORKGROUP
log file = /var/log/samba/%m.log
max log size = 50
security = user
map to guest = Bad User 
dns proxy = no

# следовать по симлинкам
unix extensions = no
wide links = yes
follow symlinks = yes

# utf кодировка
dos charset = cp866
unix charset = UTF8

# отключаем принтеры
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes

# пускать в сетевую папку только компьютер только с этим адресом.
# hosts allow = 192.168.0.24
# пускать в сетевую папку только компьютеры с этой сети.
hosts allow = 192.168.0.0/24

# по умолчанию все файлы, начинающиеся с точки будут иметь атрибут "скрытый".
hide dot files = yes

[folder_for_share]
path = /folder_for_share
valid users = @users
force group = users
create mask = 0660
directory mask = 0771
writable = yes
browseable = yes

Следует обратить внимание на параметры:

hosts allow = 192.168.0.24 # пускать в сетевую папку только компьютер только с этим адресом.
hosts allow = 192.168.0.0/24 # пускать в сетевую папку только компьютеры с этой сети.

Перезапускаем службы.

# systemctl restart smb
# systemctl restart nmb

# systemctl restart smb.service

И пробуем зайти на шару по адресу:

\\ip-сервера\folder_for_share

5. Доступ по IP-адресу.

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

# mcedit /etc/samba/smb.conf

Чтоб организовать доступ в зависимости от IP-адреса, делаем такие настройки в smb.conf:

[global]
security = user
workgroup = WORKGROUP
server string = Samba
map to guest = bad user

[folder_for_share]
path = /folder_for_share
browsable = yes
writable = yes
guest ok = yes
read only = no
hosts allow = 192.168.0.10

В данном случае полный доступ будет у адреса 192.168.0.10.

Чтобы добавить всю подсеть, то указать нужно следующее:

hosts allow = 192.168.0.0/24

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

hosts allow = 192.168.0.0/24 except 192.168.0.15

Доступ будет разрешен всей подсети 192.168.0.0/24, кроме адреса 192.168.0.15.

Делаем перезапуск самбы и проверяем.

Перезапускаем службы.

# systemctl restart smb
# systemctl restart nmb

# systemctl restart smb.service

И пробуем зайти на каталог по адресу:

\\ip-сервера\folder_for_share

Если у вас установлена Samba 4, то эта конфигурация не заработает и вы получите ошибку:

WARNING: Ignoring invalid value ‘share’ for parameter ‘security’

Чтобы доступ по IP нормально заработал, вам необходимо внести следующие изменения в приведенный выше конфиг:

security = user
map to guest = Bad Password

Остальные параметры оставляете те же. После этого доступ по IP будет работать и на 4-й версии Samba.

6. Доступ всем подряд без ограничений.

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

# mcedit /etc/samba/smb.conf

Если доступ будет предоставлен всем без ограничений, то простейшая конфигурация Samba будет такой:

[global]
security = user
workgroup = WORKGROUP
server string = Samba
guest account = nobody
map to guest = Bad User

[folder_for_share]
comment = Public Folder
path = /folder_for_share
browseable = Yes
guest ok = Yes
public = yes
writeable = Yes
read only = no
guest ok = yes
create mask = 0777
directory mask = 0777

где:

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

Убедитесь, что директория из параметра path существует, если нет, создайте ее.

Не забываем еще раз сделать права для всех на папку:

# chmod -R 0777 /mnt/files

И пробуем зайти на каталог по адресу:

\\ip-сервера\folder_for_share

Должно пустить без лишних вопросов.

7. Настройка межсетевого экрана.

Настроим межсетевой экран.

7.1. Для firewalld.

По умолчанию CentOS 7 использует брандмауэр firewalld, состояние службы можно узнать командой:

# firewall-cmd --state

Он отключен!

Активируем его командой:

# systemctl start firewalld

Для получения списка правил и сервисов используйте

# firewall-cmd --list-all
# firewall-cmd --list-services

Обратите внимание на список сервисов, если вы отключили протокол IPv6, логично также поступить и с DHCPv6-client:

# firewall-cmd --permanent --remove-service=dhcpv6-client

Создаем правило для Samba и перезагружаем:

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

7.2. Для iptables.

Для этого в правилах откроем TCP-порты: 139 порт и 445 порт, а также UDP-порты: 137 порт и 138 порт, но только для тех подсетей, которым доверяете.

# mcedit /etc/sysconfig/iptables

Для указания собственного диапазона адресов, замените значение после ключа ‘-s‘:

-A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 139 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 445 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -p udp -m udp --dport 137 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -p udp -m udp --dport 138 -j ACCEPT

Перезагружаем iptables:

# systemctl restart iptables

Для проверки существующих правил используем:

# iptables -L

7.3. Для iptables доступ только из локальной сети.

Так же незабываем настроить iptables для доступа к ресурсу:

# mcedit /etc/sysconfig/iptables

Добавляем в файервол iptables исключение в параметрах INPUT:

# mcedit /etc/sysconfig/iptables

Вот такие строки:

-A INPUT -s 192.168.0.0/24 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-P INPUT DROP

В следующем примере показана простая политика, позволяющая локальному серверу принимать трафик только от клиентов частной сети 192.168.0.0/24.

Первая команда добавляет правило в цепочку INPUT путем его добавления в текущий список правил. Это правило говорит о том, что для любого трафика, приходящего из сети-источника (-s) 192.168.0.0/24, будет выполняться действие ACCEPT, разрешающее получение пакетов.

Вторая команда разрешает получение пакетов, приходящих при уже установленном соединении – за это отвечает вызов matcher state (оператор проверки соответствия состояния -m state). Этот matcher state следит за тем, какие подключения покидают хост. Ответные исходящие пакеты считаются установленными или связанными (established или related), поэтому остальные правила пропускают эти пакеты.

Последняя команда определяют политику по умолчанию цепочки INPUT, сбрасывающую пакеты. Если пакет не пришел из сети 192.168.0.0/24 или не является пакетом установленного хостом соединения, то он сбрасывается.

8. Система логирования.

По умолчанию log-файлы находятся в папке /var/log/samba. При необходимости получить подробные логи, в раздел [global] необходимо добавить параметр log level = 2 или log level = 3. По умолчанию используется значение 1, значение 0 отключает ведение логов.

[global]
log level = 2

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

В разделе [global] добавьте следующие параметры:

[global]
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes

9. Проверка параметров и перезагрузка службы.

Перезапускаем службы.

# systemctl restart smb
# systemctl restart nmb

# systemctl restart smb.service

Проверим параметры запуска Samba:

# testparm

Проверим состояние службы Samba:

# smbstatus

10. Оригиналы источников информации.

  1. serveradmin.ru «Быстрая и простая настройка Samba» от 04.05.2018.
  2. serveradmin.ru «Настройка файлового сервера Samba с интеграцией в Active Directory» от 02.10.2017.
  3. proft.me «Samba: настройка файлового обмена между Windows и Linux».
  4. forum.sys-adm.in « Тема: Создать быстро шару (общую папку) CentOS 7 / Fedora».
  5. dmosk.ru «Как расшарить папку в Samba».
  6. spo23.ru «Безопасность Samba посредством IPtables».
  7. bozza.ru «Установка и настройка Samba на CentOS 7».
  8. serverspace.by «Настройка Samba».
  9. losst.ru «Настройка Samba в Ubuntu 18.04».
  10. dmosk.ru «Способы отключения IPv6 в CentOS».

Читайте также: