Глава 19. Совместное применение файлов между системами RHEL9 и Windows при помощи Samba
Содержание
- Глава 19. Совместное применение файлов между системами RHEL9 и Windows при помощи Samba
- Доступ к ресурсам Windows из Рабочего стола GNOME
- Samba и клиент Samba
- Установка Samba в RHEL9
- Настройка Межсетевого экрана RHEL9 на включение Samba
- Настройка файла smb.conf
- Настройка SELinux для Samba
- Создание пользователя Samba
- Тестирование файла smb.conf
- Запуск Samba и Служб имён NetBIOS
- Доступ к Совместным ресурсам Samba
- Доступ к Совместным ресурсам Windows из RHEL9
- Заключение
Хотя 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.
Прежде чем вдаваться в подробности совместных ресурсов Samba, было бы нелишним отметить, что если вы желаете выполнять доступ к разделяемым папкам Windows изнутри рабочего стола GNOME, тогда поддержка также предоставляется изнутри приложения Files GNOME. Данное приложение Files расположено в полоске, как это выделено на Рисунке 19-1:
После запуска выберите вариант Other Locations в панели навигации слева, и далее иконку Windows Network в главной панели для просмотра доступных ресурсов Windows:
Samba позволяет как совместно применять ресурсы RHEL9 в системах Windows, так и ресурсы Windows разделять с системами RHEL9. RHEL осуществляет доступ к ресурсам Windows пользуясь клиентом Samba. Ресурсы RHEL, с другой стороны, совместно применяются в системах Windows путём установки и настройки соответствующей службы Samba.
Настройки по умолчанию, применяемые в процессе установки RHEL9 обычно не устанавливают необходимые пакеты Samba. Пока вы намеренно не запросите чтобы Samba была установлена, маловероятно чтобы вы имели Samba установленной в своей системе. Чтобы проверить установлена ли Samba, откройте окно терминала и выполните такую команду:
# rpm -q samba samba-common samba-client
Все пропущенные пакеты можно установить при помощи инструмента командной строки dnf
:
# dnf install samba samba-common samba-client
Затем, чтобы разрешить обмен Samba необходимо выполнить настройку межсетевого экрана, защищающего систему RHEL9. Этого можно достичь при помощи команды
firewall-cmd
следующим образом:
# firewall-cmd --permanent --add-port={139/tcp,445/tcp}
# firewall-cmd --reload
Прежде чем запускать свою службу Samba, для определения того как система RHEL будет достигать систем и ресурсов Windows для их совместного применения удалёнными
клиентами необходим ряд этапов настройки. Большинство задач настройки происходят внутри файла /etc/samba/smb.conf
.
Samba это чрезвычайно гибкая и настраиваемая система, которая предоставляет множество вариантов для конфигурации того как совместно применять сетевые среды Windows. К сожалению, такая гибкость способна приводить к ощущению чрезмерной сложности. В действительности, однако, типичная установка не требует множества параметров настройки и стратегия обучения установки базовой конфигурации относительно краткая.
Для целей данной главы мы рассмотрим соединение RHEL9 с рабочей группой Windows и настройкой некого каталога в качестве совместного ресурса, к которому может осуществлять доступ конкретный пользователь. Именно эта конфигурация носит название автономного сервера Samba. Также возможны расширенные настройки, например, интеграция Samba внутри некой среды Active Directory, однако это выходит за рамки данной книги.
Самый первый шаг настройки Samba состоит в редактировании файла /etc/samba/smb.conf
.
Файл 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 это по умолчанию интегрируемая в ядро 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 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
можно проверить на ошибки инструментом командной строки
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
.
.
Чтобы сервер 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 настроены, а службы запущены, настало время для доступа доступа к совместным ресурсам из системы Windows. На подходящей системе Windows из той же самой рабочей группы что и данная система RHEL9, откройте Проводник (Explorer) Windows и переместитесь в панель Network (Сети). В этом месте Проводник должен выполнить поиск в сети и перечислить только обнаруженные системы, применяющие протокол SMB. Следующий рисунок иллюстрирует систему RHEL9 с названием LINUXSERVER, локализованную при помощи проводника Windows в системе Windows:
Дважды щёлкните по хосту LINUXSERVER и вы получите приглашение для ввода имени и пароля пользователя с полномочиями доступа. В данном случае это учётная запись
demo, которую мы настроили при помощи инструмента smbpasswd
:
Ввод соответствующих имени пользователя и пароля в результате приведут к тому, что настроенные для этого пользователя появятся в окне Проводника, включая ранее
настроенный ресурс /sampleshare
:
Двойной клик по совместному ресурсу /sampleshare
отобразит список имеющихся файлов и содержащих их каталогов.
Если вы не способны наблюдать систему Linux или имеете проблемы с доступом к совместным папкам, попробуйте установить соответствие к совместному ресурсу Samba с локальным устройством Windows следующим образом:
-
Откройте Проводник Windows чтобы увидеть систему Linux, кликните правой кнопкой по записи Сеть (Network) в панели слева и выберите Map network drive... (Подключить сетевой диск...) из появляющегося в результате меню.
-
Прежде чем введёте значение пути к совместно используемой папке выберите букву устройства из диалога Подключения сетевого диска. Например:
\\LinuxServer\sampleshare
Включите флаговую кнопку вслед за Connect using different credentials (Подключится с применением других полномочий). Например, если вы не хотите чтобы это устройство подключалось при каждой вашей регистрации в данной системе Windows, отключите соответствующий флаговый блок:
Введя все необходимые настройки кликните по кнопке Finish для подключения данного устройства, введите значения имени пользователя и пароль для настроенного ранее в этой главе пользователя Samba при появлении приглашения на ввод. После небольшой задержки соответствующее содержимое совместного ресурса Samba появится в новом окне Проводника Windows.
Как уже упоминалось ранее, 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 (если она определилась):
Выбор варианта Windows Network отобразит определённые в данной сетевой среде системы Windows и позволит выполнить доступ ко всем совместным ресурсам.
В качестве альтернативы для подключения к конкретной системе можно применить вариант 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.