Глава 19. Совместное применение файлов между системами RHEL9 и Windows при помощи Samba

Хотя Linux и добился некоторых успехов на рынке настольных компьютеров, его происхождение и будущее во многом зависят от серверов. Поэтому неудивительно, что RHEL9 может работать как файловый сервер. Системы RHEL и Windows также часто применяются в сетевых средах бок о бок. Поэтому обычно требуется, чтобы файлы в системе RHEL9 были доступны для систем на базе Linux, UNIX и Windows через сетевые подключения. Точно так же общие папки и принтеры, находящиеся в системах Windows, также должны быть доступны из систем на базе RHEL9.

Системы Windows разделяют такие ресурсы как файловые системы и принтеры, применяя протокол, известного как SMB (Server Message Block, блок сообщений сервера). Чтобы система RHEL9 была способна обслуживать такие ресурсы по сети в системе Windows и наоборот, она должна поддерживать SMB. Это достигается при помощи технологии под названием Samba. Помимо обеспечения интеграции между системами Linux и Windows, Samba также способна обеспечивать совместное применение папок между системами Linux (в качестве альтернативы описанной в предыдущей главе NFS).

В данной главе мы рассмотрим те шаги, которые требуются для совместного применения ресурсов файловой системы и принтеров в системе RHEL9 с удалёнными системами Windows и Linux, а также для доступа к ресурсам Windows из RHEl9.

Доступ к ресурсам Windows из Рабочего стола GNOME

Прежде чем вдаваться в подробности совместных ресурсов Samba, было бы нелишним отметить, что если вы желаете выполнять доступ к разделяемым папкам Windows изнутри рабочего стола GNOME, тогда поддержка также предоставляется изнутри приложения Files GNOME. Данное приложение Files расположено в полоске, как это выделено на Рисунке 19-1:

 

Рисунок 19-1


 

После запуска выберите вариант Other Locations в панели навигации слева, и далее иконку Windows Network в главной панели для просмотра доступных ресурсов Windows:

 

Рисунок 19-2


 

Samba и клиент Samba

Samba позволяет как совместно применять ресурсы RHEL9 в системах Windows, так и ресурсы Windows разделять с системами RHEL9. RHEL осуществляет доступ к ресурсам Windows пользуясь клиентом Samba. Ресурсы RHEL, с другой стороны, совместно применяются в системах Windows путём установки и настройки соответствующей службы Samba.

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

Настройки по умолчанию, применяемые в процессе установки RHEL9 обычно не устанавливают необходимые пакеты Samba. Пока вы намеренно не запросите чтобы Samba была установлена, маловероятно чтобы вы имели Samba установленной в своей системе. Чтобы проверить установлена ли Samba, откройте окно терминала и выполните такую команду:


# rpm -q samba samba-common samba-client
		

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


# dnf install samba samba-common samba-client
		

Настройка Межсетевого экрана RHEL9 на включение Samba

Затем, чтобы разрешить обмен Samba необходимо выполнить настройку межсетевого экрана, защищающего систему RHEL9. Этого можно достичь при помощи команды firewall-cmd следующим образом:


# firewall-cmd --permanent --add-port={139/tcp,445/tcp}
# firewall-cmd --reload
		

Прежде чем запускать свою службу Samba, для определения того как система RHEL будет достигать систем и ресурсов Windows для их совместного применения удалёнными клиентами необходим ряд этапов настройки. Большинство задач настройки происходят внутри файла /etc/samba/smb.conf.

Настройка файла smb.conf

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

Для целей данной главы мы рассмотрим соединение RHEL9 с рабочей группой Windows и настройкой некого каталога в качестве совместного ресурса, к которому может осуществлять доступ конкретный пользователь. Именно эта конфигурация носит название автономного сервера Samba. Также возможны расширенные настройки, например, интеграция Samba внутри некой среды Active Directory, однако это выходит за рамки данной книги.

Самый первый шаг настройки Samba состоит в редактировании файла /etc/samba/smb.conf.

Настройка раздела [global]

Файл smb.conf делится на разделы. Самым первым разделом выступает раздел [global], в котором могут быть определены настройки, которые применяются ко всей конфигурации Samba. Хотя эти настройки глобальные, каждый параметр может перекрываться внутри прочих разделов файла конфигурации.

Самая первая задача состоит в определении имени рабочей группы Windows, в которой будут совместно использоваться ресурсы RHEL9. Это контролируется через директиву workgroup = раздела [global], которая по умолчанию настроена следующим образом:


workgroup = SAMBA
 	   

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

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


[global]
.
.
        netbios name = LinuxServer
 	   

Данное свойство "netbios name" определяет то название, под которым данный сервер будет отображаться в прочих системах данной сетевой среды.

Настройка Совместного ресурса

Следующий шаг состоит в настройке необходимых совместных ресурсов (иными словами, тех ресурсов, которые будут доступны из прочих систем в соответствующей сетевой среде Windows). Для достижения этого соответствующему разделу придаётся название, по которому к нему можно будет ссылаться при совместном применении. Например, когда в своей системе RHEL9 мы планируем совместно использовать каталог /sampleshare, мы озаглавим этот раздел [sampleshare]. В данном разделе допустимы разнообразные параметры конфигурации. Однако, например, для данного примера мы просто задаём подлежащий совместному применению каталог, указывая что данный каталог можно как просматривать, так и выполнять в него запись, а также объявляя что данный ресурс общедоступный, а потому гостевые пользователи способны получать доступ:


[sampleshare]
        comment = Example Samba share
        path = /sampleshare
        browseable = Yes
        public = yes
        writable = yes
 	   

Для ограничения доступа на конкретных пользователей можно воспользоваться свойством "valid users", например:


valid users = demo, bobyoung, marcewing
 	   

Удаление не нужных Совместных ресурсов

Файл smb.conf предварительно настроен с разделами для совместного применения принтеров и домашних папок имеющихся в системе пользователей. Если эти ресурсы не требуется разделять, соответствующие разделы можно скрыть комментарием с тем, чтобы Samba их игнорировала. В приводимом ниже образце комментарием скрыт раздел [homes]:


.
.
#[homes]
# comment = Home Directories
# valid users = %S, %D%w%S
# browseable = No
# read only = No
# inherit acls = Yes
.
.
 	   

Настройка SELinux для Samba

SELinux это по умолчанию интегрируемая в ядро Linux всех систем RHEL9 система, предоставляющая дополнительный уровень безопасности и защиты самой операционной системе и файлам пользователя.

Традиционно безопасность Linux основывалась на разрешении пользователям принимать решение кто обладает доступом к их файлам и прочим обладаемыми ими ресурсами. Как пример, рассмотрим некий расположенный в домашнем каталоге файл какого- то пользователя, которым он и владеет. Этот пользователь способен контролировать все полномочия доступа этого файла в терминах того, будут ли прочие пользователи в данной системе считывать его или производить в него запись, либо, в случае сценария или двоичного файла, исполнять его. Такой тип безопасности носит название контроля доступа по собственному усмотрению (discretionary access control), поскольку свобода выбора доступа к ресурсам остаётся за самим пользователем.

При помощи SELinux, однако, доступ контролируется установленным системным администратором и не может перекрываться таким пользователем. Это носит название мандатного контроля доступа (mandatory access control) и определяется имеющимся администратором при помощи политики SELinux, определяющей кто по умолчанию, сама система или её администратор допускают это.

Текущее состояние SELinux в системе RHEL9 может быть выявлено при помощи средства sestatus следующим образом:


SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33
		

SELinux может работать как в режиме принуждения, так и в режиме разрешения. Когда он включён, принудительный режим запрещает все действия, которые не допускаются политикой SELinux. С другой стороны, разрешающий режим допускает выполнение действий, которые обычно были бы запрещены, но записывает такое нарушение в файл журнала.

Безопасность SELinux основывается на понятии меток. Всем ресурсам системы (включая процессы и файлы) назначаются контекстные метки, состоящие из пользователя, роли, типа и необязательного уровня безопасности. Соответствующий контекст файлов SELinux, к примеру, можно просматривать следующим образом:


$ ls -Z /home/demo
 unconfined_u:object_r:user_home_t:s0 Desktop
 unconfined_u:object_r:user_home_t:s0 Documents
		

Аналогично, для выявления контекста исполняемого процесса можно воспользоваться командой ps, в данном случае для команды ls:


$ ps -eZ | grep ls
 unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 14311 tty1 00:00:18 ls
		

Когда процесс (такой как приведённая выше команда ls) пытается выполнить доступ к файлу или папке, система SELinux проверит установленную политику для выявления того допустим или нет доступ. Теперь рассмотрим установленный для службы Samba контекст:


$ ps -eZ | grep smb
system_u:system_r:smbd_t:s0       14129 ?       00:00:00 smbd
system_u:system_r:smbd_t:s0       14132 ?       00:00:00 smbd-notifyd
		

SELinux реализует безопасность несколькими способами, наиболее распространённый из которых называется принудительной типизацией (type enforcement). В общих словах, когда процесс пытается выполнить задачу с неким объектом (скажем, запись в файл), SELinux проверяет типы контекстов и процесса, и самого объекта и убеждается в том, что установленная политика безопасности допускает предпринимать такое действие. Предположим, процесс с типом A, например, пытается выполнить запись файла с типом B. В такой ситуации, это будет допустимо только когда политика SELinux постулирует в явном виде что процесс с типом A способен выполнять операцию записи в файл типа B. При принудительном SELinux, все действия отклоняются по умолчанию, только если некое правило намеренно не допускает выполнение такого действия.

Основная проблема SELinux и Samba состоит в том, что политика SELinux не настроена на допуск процесса с типом smb_t выполнять действия с файлами любого отличного от samba_share_t типа. К примеру, перечисленный ранее каталог /home/demo будет недоступен службе Samba, потому как обладает типом user_home_t. Чтобы превратить файлы или папки системы в доступные для службы Samba, тип принуждения данного конкретного ресуса должен быть изменён на samba_share_t.

В случае данного примера, мы сначала создадим в файле smb.conf каталог /sampleshare, на который ссылались ранее, и изменим его тип принуждения на доступный для службы Samba. Начнём следующим образом с создания соответствующего каталога:


# mkdir /sampleshare
		

Затем проверим значение текущего контекста SELinux для этого каталога:


$ ls -aZ /sampleshare/
unconfined_u:object_r:root_t:s0 .
		

В данном экземпляре, значению метки контекста данной папки был присвоен тип root_t. Чтобы превратить эту папку в разделяемую Samba, необходимо следующим образом установить значение типа принуждения в samba_share_t с применением средства semanage:


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

Обратите внимание на применение символа подстановки в данной команде semanage для обеспечения что значение типа применяется ко всем подкаталогам и файлам, содержащимся внутри указанного каталога /sampleshare. Раз оно добавлено, данное изменение требуется применить при помощи команды restorecon, воспользовавшись флагом -R для применения данного изменения рекурсивно по всем подкаталогам:


# restorecon -R -v /sampleshare
Relabeled /sampleshare from unconfined_u:object_r:default_t:s0 to unconfined_u:object_r:samba_share_t:s0
		

После применения этих изменений данная папка настроена на соответствие политике SELinux для процесса smb и готова к совместному применению через Samba.

Создание пользователя Samba

Всякий пользователь, которому необходим доступ к совместным ресурсам Samba, должен быть настроен в качестве Samba User с назначенным ему паролем. Эта задача достигается при помощи инструмента командной строки smbpasswd. К примеру, рассмотрим ситуацию, при которой пользователю с именем demo требуется иметь возможность доступа к каталогу /sampleshare нашей системы RHEL9 из системы Windows. Для соответствия этому требованию, мы обязаны добавить demo в качестве пользователя Samba следующим образом:


# smbpasswd -a demo
New SMB password:
Retype new SMB password:
Added user demo.
		

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

Тестирование файла smb.conf

Настройки файла smb.conf можно проверить на ошибки инструментом командной строки testparm таким манером:


# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed

Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

# Global parameters
[global]
       log file = /var/log/samba/%m.log
       netbios name = LINUXSERVER
       printcap name = cups
       security = USER
       wins support = Yes
       idmap config * : backend = tdb
       cups options = raw

[sampleshare]
       comment = Example Samba share
       guest ok = Yes
       path = /sampleshare
       read only = No

[homes]
       browseable = No
       comment = Home Directories
       inherit acls = Yes
       read only = No
       valid users = %S %D%w%S

[printers]
       browseable = No
       comment = All Printers
       create mask = 0600
       path = /var/tmp
.
.
		

Запуск Samba и Служб имён NetBIOS

Чтобы сервер RHEL9 работал внутри сетевой среды Windows, должны быть запущены службы SMB (Samba) и NMB (служба имён NetBIOS). Как необязательный вариант, эти службы также включаются так, чтобы они запускались при каждом запуске системы:


# systemctl enable smb nmb
# systemctl start smb nmb
		

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


# smbclient -U demo -L localhost
Enter WORKGROUP\demo’s password:
 
      Sharename       Type      Comment
      ---------       ----      -------
      sampleshare     Disk      Example Samba share
      print$          Disk      Printer Drivers
      IPC$            IPC       IPC Service (Samba 4.9.1)
      demo            Disk      Home Directories
		

Доступ к Совместным ресурсам Samba

Теперь, когда ресурсы Samba настроены, а службы запущены, настало время для доступа доступа к совместным ресурсам из системы Windows. На подходящей системе Windows из той же самой рабочей группы что и данная система RHEL9, откройте Проводник (Explorer) Windows и переместитесь в панель Network (Сети). В этом месте Проводник должен выполнить поиск в сети и перечислить только обнаруженные системы, применяющие протокол SMB. Следующий рисунок иллюстрирует систему RHEL9 с названием LINUXSERVER, локализованную при помощи проводника Windows в системе Windows:

 

Рисунок 19-3


 

Дважды щёлкните по хосту LINUXSERVER и вы получите приглашение для ввода имени и пароля пользователя с полномочиями доступа. В данном случае это учётная запись demo, которую мы настроили при помощи инструмента smbpasswd:

 

Рисунок 19-4


 

Ввод соответствующих имени пользователя и пароля в результате приведут к тому, что настроенные для этого пользователя появятся в окне Проводника, включая ранее настроенный ресурс /sampleshare:

 

Рисунок 19-5


 

Двойной клик по совместному ресурсу /sampleshare отобразит список имеющихся файлов и содержащих их каталогов.

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

  1. Откройте Проводник Windows чтобы увидеть систему Linux, кликните правой кнопкой по записи Сеть (Network) в панели слева и выберите Map network drive... (Подключить сетевой диск...) из появляющегося в результате меню.

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

    
    \\LinuxServer\sampleshare
     	   

    Включите флаговую кнопку вслед за Connect using different credentials (Подключится с применением других полномочий). Например, если вы не хотите чтобы это устройство подключалось при каждой вашей регистрации в данной системе Windows, отключите соответствующий флаговый блок:

     

    Рисунок 19-6


     

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

Доступ к Совместным ресурсам Windows из RHEL9

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


# dnf install samba-client
 	   

К совместным ресурсам системы Windows можно выполнить доступ с рабочего стола RHEL воспользовавшись приложением Files или из приглашения на ввод в командной строке с применением инструментов smbclient и mount. Все шаги в данном разделе предполагают что система Windows обладает включёнными соответствующими настройками совместных сетевых ресурсов.

Для доступа к любому разделяемому ресурсу из системы Windows с применением рабочего стола GNOME запустите приложение Files и выберите параметр Other Locations. Это отобразит показанный на рисунке 19-7 ниже экран, включая иконку для Windows Network (если она определилась):

 

Рисунок 19-7


 

Выбор варианта Windows Network отобразит определённые в данной сетевой среде системы Windows и позволит выполнить доступ ко всем совместным ресурсам.

 

Рисунок 19-8


 

В качестве альтернативы для подключения к конкретной системе можно применить вариант Connect to Server. Обратите внимание, что значение имени или IP адреса удалённой системы должно иметь префикс smb://, за которым может следовать значение пути к конкретному совместному ресурсу, например:


smb://WinServer/Documents
 	   

В случае отсутствия среды рабочего стола, совместный удалённый ресурс Windows может быть смонтирован из приглашения командной строки при помощи команды mount и определения значения типа cifs файловой системы. Наша следующая команда, например, смонтирует разделяемый ресурс с названием Documents, расположенным в системе Windows с именем WinServer в точке монтирования, обладающей названием /winfiles:


# mount -t cifs //WinServer/Documents /winfiles -o user=demo
 	   

Заключение

В данной главе мы рассмотрели как настраивать систему RHEL9 на действие в качестве как клиента, так и сервера Samba, делая возможным совместное применение ресурсов с системами Windows. Рассмотренные вопросы включали установку сервера и клиента Samba, а также настройку Samba в качестве автономного сервера. Кроме того, совместно с необходимыми шагами для предоставления доступа к разделяемым ресурсам были рассмотрены понятия SELinux.