Работа с различными типами серверов#
Использование защищенной связи между двумя системами с помощью OpenSSH#
Настройка и запуск сервера OpenSSH#
Используйте следующую процедуру для базовой конфигурации, которая может потребоваться для среды и для запуска сервера OpenSSH.
Запустите демон
sshdв текущем сеансе и настройте его на автоматический запуск во время загрузки:systemctl start sshd systemctl enable sshdЧтобы указать адреса, отличные от адресов по умолчанию
0.0.0.0(IPv4) или::(IPv6) для директивыListenAddressв файле конфигурации/etc/ssh/sshd_config, и использовать более медленную динамическую конфигурацию сети, добавьте зависимость отnetwork-online.targetцелевого устройства в файлsshd.service. Для достижения этой цели создайте файл/etc/systemd/system/sshd.service.d/local.confсо следующим содержимым:[Unit] Wants=network-online.target After=network-online.targetПроверьте, соответствуют ли параметры сервера OpenSSH в файле конфигурации
/etc/ssh/sshd_configтребованиям.При необходимости измените приветственное сообщение, отображаемое сервером OpenSSH перед аутентификацией клиента, отредактировав файл
/etc/issue, например:Welcome to ssh-server.example.ru Warning: By accessing this server, you agree to the referenced terms and conditions.Убедитесь, что параметр
Bannerне закомментирован в/etc/ssh/sshd_configи его значение содержит/etc/issue:less /etc/ssh/sshd_config | grep Banner Banner /etc/issueОбратите внимание, что для изменения сообщения, отображаемого после успешного входа в систему, необходимо отредактировать файл
/etc/motdна сервере.Перезагрузите конфигурацию systemd и перезапустите
sshd, чтобы применить изменения:systemctl daemon-reload** systemctl restart sshd
Проверка#
Убедитесь, что демон
sshdзапущен:systemctl status sshd ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2019-11-18 14:59:58 CET; 6min ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 1149 (sshd) Tasks: 1 (limit: 11491) Memory: 1.9M CGroup: /system.slice/sshd.service └─1149 /usr/sbin/sshd -D -oCiphers=aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc -oMACs=hmac-sha2-256, Nov 18 14:59:58 ssh-server-example.ru systemd[1]: Starting OpenSSH server daemon... Nov 18 14:59:58 ssh-server-example.ru sshd[1149]: Server listening on 0.0.0.0 port 22. Nov 18 14:59:58 ssh-server-example.ru sshd[1149]: Server listening on :: port 22. Nov 18 14:59:58 ssh-server-example.ru systemd[1]: Started OpenSSH server daemon.Подключитесь к SSH-серверу с помощью SSH-клиента.
ssh user@ssh-server-example.ruECDSA key fingerprint is SHA256:dXbaS0RG/UzlTTku8GtXSz0S1++lPegSy31v3L/FAEc. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'ssh-server-example.ru' (ECDSA) to the list of known hosts. user@ssh-server-example.ru's password:
Настройка сервера OpenSSH для аутентификации на основе ключей#
Чтобы повысить безопасность системы, примените проверку подлинности на основе ключей, отключив проверку подлинности по паролю на сервере OpenSSH.
Откройте конфигурацию
/etc/ssh/sshd_configв текстовом редакторе, например:nano /etc/ssh/sshd_configИзмените параметр
PasswordAuthenticationнаno:PasswordAuthentication noВ системе, отличной от новой установки по умолчанию, проверьте, что
PubkeyAuthentication noне была установлена и директиваChallengeResponseAuthenticationустановлена наno. Если подключение осуществляется удаленно, не используя консоль или внеполосный доступ, протестируйте процесс входа на основе ключа, прежде чем отключать проверку подлинности по паролю.Чтобы использовать аутентификацию на основе ключа в домашних каталогах, подключенных к
NFSuse_nfs_home_dirs, включите логическое значение SELinux:setsebool -P use_nfs_home_dirs 1Перезагрузите демон
sshd, чтобы применить изменения:systemctl reload sshd
Создание пары ключей SSH#
Используйте эту процедуру для создания пары ключей SSH в локальной системе и копирования сгенерированного открытого ключа на сервер OpenSSH. Если сервер настроен соответствующим образом, можно войти на сервер OpenSSH без указания какого-либо пароля.
Важно
Выполните следующие действия от имени пользователя с административными полномочиями, так как только он сможет использовать ключи.
Чтобы сгенерировать пару ключей ECDSA для версии 2 протокола SSH, введите:
ssh-keygen -t ecdsaПример вывода:
Generating public/private ecdsa key pair. Enter file in which to save the key (/home/joesec/.ssh/id_ecdsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/joesec/.ssh/id_ecdsa. Your public key has been saved in /home/joesec/.ssh/id_ecdsa.pub. The key fingerprint is: SHA256:Q/x+qms4j7PCQ0qFd09iZEFHA+SqwBKRNaU72oZfaCI joesec@localhost.example.ru The key's randomart image is: +---[ECDSA 256]---+ |.oo..o=++ | |.. o .oo . | |. .. o. o | |....o.+... | |o.oo.o +S . | |.=.+. .o | |E.*+. . . . | |.=..+ +.. o | | . oo*+o. | +----[SHA256]-----+Также можно сгенерировать пару ключей RSA, используя опцию
-t rsaс командойssh-keygen, или пару ключейEd25519, введя командуssh-keygen -t ed25519.Скопируйте открытый ключ на удаленную машину:
ssh-copy-id joesec@ssh-server-example.ruПример вывода:
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed joesec@ssh-server-example.ru's password: ... Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'joesec@ssh-server-example.ru'" and check to make sure that only the key(s) you wanted were added.
Теперь попробуйте войти в систему с помощью ssh joesec@ssh-server-example.ru и проверьте, что были добавлены только те ключи, которые необходимы.
Если не используете программу ssh-agent в своем сеансе, предыдущая команда копирует самый последний измененный открытый ключ ~/.ssh/id*.pub, если он еще не установлен. Чтобы указать другой файл с открытым ключом или установить приоритет ключей в файлах над ключами, кешированными в памяти ssh-agent, используйте команду ssh-copy-id с опцией -i.
Важно
Если переустановите систему и появится необходимость сохранения пары ключей, создайте резервную копию каталога ~/.ssh/. После переустановки скопируйте его обратно в свой домашний каталог. Можно сделать это для всех пользователей системы, включая пользователей с административными полномочиями.
Проверка#
Войдите на сервер OpenSSH без указания какого-либо пароля:
ssh joesec@ssh-server-example.ru
Welcome message.
...
Last login: Mon Nov 18 18:28:42 2019 from ::1
Подключение к удаленному серверу с помощью узла перехода SSH#
Используйте эту процедуру для подключения локальной системы к удаленному серверу через промежуточный сервер, также называемый jump host.
Предварительные условия:
Узел перехода принимает SSH-соединения из локальной системы.
Удаленный сервер принимает SSH-соединения только от узла перехода.
Определите узел перехода, отредактировав файл
~/.ssh/configв локальной системе, например:Host jump-server1 > HostName jump1.example.ruПараметр
Hostопределяет имя или псевдоним для хоста, который можно использовать в командахssh. Значение может соответствовать реальному имени хоста, но также может быть любой строкой.Параметр
HostNameзадает фактическое имя хоста или IP-адрес узла перехода.Добавьте конфигурацию перехода на удаленный сервер с помощью директивы
ProxyJumpв файл~/.ssh/configв локальной системе, например:Host remote-server HostName remote1.example.ru ProxyJump jump-server1Используйте свою локальную систему для подключения к удаленному серверу через
jump server:ssh remote-serverПредыдущая команда эквивалентна команде удаленного сервера
ssh -J jump-server1, если отпустить шаги настройки 1 и 2.
Примечание
Можно указать больше переходных серверов, а также пропустить добавление определений хостов в файл конфигурации, при предоставлении их полных имен хостов, например:
ssh -J jump1.example.ru, jump2.example.ru, jump3.example.ru, remote1.example.ru
Измените обозначение только для имени хоста в предыдущей команде, если имена пользователей или SSH-порты на серверах перехода отличаются от имен и портов на удаленном сервере, например:
ssh -J johndoe@jump1.example.ru:75, johndoe@jump2.example.ru:75,johndoe@johndoe@jump3.example.ru:75 joesec@remote1.example.ru:220
Подключение к удаленным машинам с ключами SSH с помощью ssh-agent#
Чтобы избежать ввода парольной фразы каждый раз, когда инициируете SSH-соединение, можно использовать утилиту ssh-agent для кеширования закрытого SSH-ключа. Закрытый ключ и кодовая фраза остаются в безопасности.
Предварительные условия:
Существует удаленный хост с запущенным SSH-демоном, к которому можно подключиться по сети.
Известен IP-адрес или имя хоста, а также учетные данные для входа на удаленный хост.
Сгенерирована пара ключей SSH с парольной фразой и передали открытый ключ на удаленную машину.
При необходимости убедитесь, что можно использовать ключ для аутентификации на удаленном хосте:
Подключитесь к удаленному хосту с помощью SSH:
ssh example.user1@<IP-ADDRESS> hostnameВведите пароль, который задан при создании ключа, чтобы предоставить доступ к закрытому ключу.
ssh example.user1@<IP-ADDRESS> hostname host.example.ru
Запустите
ssh-agent:eval $(ssh-agent) Agent pid 20062Добавьте ключ в
ssh-agent:ssh-add ~/.ssh/id_rsa Enter passphrase for ~/.ssh/id_rsa:< Identity added: ~/.ssh/id_rsa (example.user0@<IP-ADDRESS>)
Проверка#
При необходимости войдите в систему при помощи SSH.
ssh example.user1@<IP-ADDRESS>
Last login: Mon Sep 14 12:56:37 2020
Обратите внимание, что не нужно вводить кодовую фразу.
Настройка веб-сервера Apache HTTP#
Подробнее о веб-сервере Apache HTTP Server - в разделе «Веб-сервер Apache HTTP Server (httpd)».
Настройка HTTP-сервера Apache с одним экземпляром#
В этом разделе описывается, как настроить HTTP-сервер Apache с одним экземпляром для обслуживания статического HTML-контента.
Следуйте процедуре, описанной в этом разделе, если веб-сервер должен предоставлять одинаковый контент для всех доменов, связанных с сервером. Если можно предоставлять разный контент для разных доменов, настройте виртуальные хосты на основе имен.
Установите
httpd:dnf install httpdОткройте TCP-порт
80в локальном межсетевом экране:firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reloadВключите и запустите обслуживание
httpd:systemctl enable --now httpdПри необходимости добавьте HTML-файлы в каталог
/var/www/html/.
Примечание
При добавлении содержимого в /var/www/html/ файлы и каталоги должны быть доступны для чтения пользователю, под которым httpd запускается по умолчанию. Владельцем контента может быть либо пользователь с административными полномочиями и группа пользователей с административными полномочиями, либо другой пользователь или группа по выбору администратора. Если владельцем содержимого является пользователь с административными полномочиями и группа пользователей с административными полномочиями, файлы должны быть доступны для чтения другими пользователями. Контекст SELinux для всех файлов и каталогов должен быть httpd_sys_content_t, который применяется по умолчанию ко всему содержимому в каталоге /var/www.
Настройка проверки подлинности Kerberos для веб-сервера Apache HTTP#
Для выполнения аутентификации Kerberos на веб-сервере Apache HTTP использует модуль Apache mod_auth_gssapi. Общий API служб безопасности (GSSAPI) - это интерфейс для приложений, которые делают запросы на использование библиотек безопасности, таких как Kerberos. Сервис gssproxy позволяет реализовать разделение привилегий для сервера httpd, что оптимизирует этот процесс с точки зрения безопасности.
Примечание
Модуль mod_auth_gssapi заменяет удаленный модуль mod_auth_kerb.
Этот сценарий описывает, как настроить GSS-прокси для выполнения аутентификации Kerberos на веб-сервере Apache HTTP.
Включите доступ к
keytab HTTP/<name_server @realm principalфайлу, создав участника службы:ipa service-add HTTP/<SERVER_NAMEИзвлеките таблицу ключей для участника, хранящуюся в файле
/etc/gssproxy/http.keytab:ipa-getkeytab -s $(awk '/^server =/ {print $3}' /etc/ipa/default.conf) -k /etc/gssproxy/http.keytab -p HTTP/$(hostname -f)Этот шаг устанавливает разрешения на
400, таким образом, только пользователь с административными полномочиями имеет доступ к файлуkeytab.Создайте файл
/etc/gssproxy/80-httpd.confсо следующим содержимым:[service/HTTP] mechs = krb5 cred_store = keytab:/etc/gssproxy/http.keytab cred_store = keytab:/etc/gssproxy/http.keytab euid = apacheПерезапустите и включите службу
gssproxy:systemctl restart gssproxy.service systemctl enable gssproxy.service
Использование утилиты smbclient для доступа к общему ресурсу SMB#
Утилита smbclient позволяет получать доступ к общим файлам на сервере SMB аналогично FTP-клиенту командной строки. Можно использовать его, например, для загрузки файлов в общий ресурс и из него.
Для аутентификации в примере общего ресурса, размещенного на сервере, используется учетную запись DOMAIN\user:
smbclient -U "DOMAIN\user"
Пример вывода:
//server/exampleEnter domain\user's password:
Try "help" to get a list of possible commands.smb:
\
После успешного подключения smbclient к общему ресурсу утилита переходит в интерактивный режим и отображает следующее приглашение:
smb: \
Чтобы отобразить все доступные команды в интерактивной оболочке, введите:
smb: \ help
Чтобы отобразить справку по конкретной команде, введите:
smb: \ help command_name
Использование smbclient в интерактивном режиме#
Если используется smbclient без параметра -c, утилита переходит в интерактивный режим. Следующая процедура показывает, как подключиться к общему ресурсу SMB и загрузить файл из подкаталога.
Подключитесь к общему ресурсу:
smbclient -U "DOMAIN\user_name" //server_name/share_nameПерейдите в каталог
/example/:smb: \ d /example/Перечислите файлы в каталоге:
smb: \example\ ls . D 0 Thu Nov 1 10:00:00 2018 .. D 0 Thu Nov 1 10:00:00 2018 example.txt N 1048576 Thu Nov 1 10:00:00 2018 9950208 blocks of size 1024. 8247144 blocks availableСкачайте файл
example.txt:smb: \example\ get example.txt getting file \directory\subdirectory\example.txt of size 1048576 as example.txt (511975,0 KiloBytes/sec) (average 170666,7 KiloBytes/sec)Отключитесь от общего доступа:
smb: \example\ exit
Использование smbclient в режиме сценариев#
При использовании параметра -c в smbclient можно автоматически выполнять команды на удаленном общем ресурсе SMB. Это позволяет использовать smbclient в скриптах.
Используйте следующую команду для подключения, перейдите в каталог примеров, загрузите файл example.txt:
smbclient -U DOMAIN\user_name //server_name/share_name -c "cd /example/ ; get example.txt ; exit"
Экспорт общих ресурсов NFS#
Как пользователь с административными полномочиями, можно использовать сервер NFS для совместного использования каталога в системе по сети.
Введение в NFS#
В этом разделе объясняются основные концепции службы NFS.
Сетевая файловая система (NFS) позволяет удаленным хостам монтировать файловые системы по сети и взаимодействовать с этими файловыми системами так, как если бы они монтировались локально. Это позволяет консолидировать ресурсы на централизованных серверах в сети.
Сервер NFS обращается к файлу конфигурации /etc/exports, чтобы определить, разрешен ли клиенту доступ к любым экспортированным файловым системам. После проверки все операции с файлами и каталогами доступны пользователю.
Поддерживаемые версии NFS#
В этом разделе перечислены версии NFS, поддерживаемые в SberLinux, и их функции.
В настоящее время SberLinux поддерживает следующие основные версии NFS:
NFS версии 3 (NFSv3) поддерживает безопасную асинхронную запись и более надежна при обработке ошибок, чем предыдущая NFSv2; она также поддерживает 64-разрядные размеры файлов и смещения, позволяя клиентам получать доступ к более чем 2 ГБ файловых данных.
NFS версии 4 (NFSv4) работает через межсетевые экраны и в Интернете, больше не требует службы
rpcbind, поддерживает списки управления доступом (ACL) и использует операции с отслеживанием состояния.
Клиенты NFS пытаются подключиться, используя NFSv4.2 по умолчанию, и возвращаются к NFSv4.1, когда сервер не поддерживает NFSv4.2. Позже монтирование возвращается к NFSv4.0, а затем к NFSv3.
Особенности минорных версий NFS:
Копия на стороне сервера. Позволяет клиенту NFS эффективно копировать данные, не тратя впустую сетевые ресурсы, используя системный вызов
copy_file_range().Разреженные файлы. Позволяет файлам иметь один или несколько нераспределенных или неинициализированных блоков данных, состоящих только из нулей. Операция
lseek()в NFSv4.2 поддерживает функцииseek_hole()иseek_data().Резервирование места. Позволяет серверам хранения резервировать свободное пространство, что запрещает серверам исчерпывать пространство. NFSv4.2 поддерживает операцию
allocate()для резервирования места, операциюdeallocate()для освобождения места и операциюfallocate()для предварительного выделения или освобождения места в файле.Отметка NFS. Обеспечивает соблюдение прав доступа к данным и позволяет устанавливать метки SELinux между клиентом и сервером для отдельных файлов в файловой системе NFS.
Улучшения макета. Предоставляет операцию
layoutstats(), которая позволяет некоторым параллельным серверам NFS (pNFS) собирать лучшую статистику производительности.
Протоколы TCP и UDP в NFSv3 и NFSv4#
Для NFSv4 требуется протокол управления передачей (TCP), работающий по IP-сети.
NFSv3 также мог использовать протокол пользовательских дейтаграмм (UDP). В SberLinux NFS через UDP больше не поддерживается. По умолчанию UDP отключен на сервере NFS.
Службы, необходимые NFS#
В этом разделе перечислены системные службы, необходимые для запуска сервера NFS или подключения общих ресурсов NFS. SberLinux запускает эти службы автоматически.
SberLinux использует комбинацию процессов поддержки и обслуживания на уровне ядра для обеспечения общего доступа к файлам NFS. Все версии NFS полагаются на удаленные вызовы процедур (RPC) между клиентами и серверами. Для совместного использования или монтирования файловых систем NFS следующие службы работают совместно в зависимости от того, какая версия NFS реализована:
nfsd. Модуль ядра сервера NFS, который обслуживает запросы к общим файловым системам NFS.rpcbind. Принимает резервирование портов от местных служб RPC. Затем эти порты становятся доступными (или рекламируются), чтобы соответствующие удаленные службы RPC могли получить к ним доступ. Службаrpcbindотвечает на запросы служб RPC и устанавливает соединения с запрошенной службой RPC. Это не используется с NFSv4.rpc.mountd. Этот процесс используется сервером NFS для обработки запросов на подключение от клиентов NFSv3. Он проверяет, что запрошенный общий ресурс NFS в настоящее время экспортируется сервером NFS и что клиенту разрешен доступ к нему. Если запрос на монтирование разрешен, службаnfs-mountdотвечает со статусом успешного выполнения и предоставляет дескриптор файла для этого общего ресурса NFS обратно клиенту NFS.rpc.nfsd. Этот процесс позволяет определить явные версии NFS и протоколы, которые рекламирует сервер. Он работает с ядром Linux для удовлетворения динамических требований клиентов NFS, таких, как предоставление серверных потоков при каждом подключении клиента NFS. Этот процесс соответствует службе nfs-сервера.lockd. Это поток ядра, который выполняется как на клиентах, так и на серверах. Он реализует протокол Network Lock Manager (NLM), который позволяет клиентам NFSv3 блокировать файлы на сервере. Он запускается автоматически при каждом запуске сервера NFS и при каждом подключении файловой системы NFS.rpc.statd. Этот процесс реализует протокол RPC Network Status Monitor (NSM), который уведомляет клиентов NFS о перезапуске сервера NFS без его корректного отключения. Службаrpc-statdзапускается автоматически службойnfs-serverи не требует настройки пользователем. Это не используется с NFSv4.rpc.rquotad. Этот процесс предоставляет информацию о квотах для удаленных пользователей. Службаrpc-rquotadдолжна быть запущена пользователем при запуске nfs-сервера.rpc.idmapd. Этот процесс предоставляет клиентские и серверные вызовы NFSv4, которые сопоставляют между собой сетевые имена NFSv4 (строки в видеuser@domain) и локальные идентификаторы пользователя и GID. Чтобыidmapdфункционировал с NFSv4, необходимо настроить файл/etc/idmapd.conf. Как минимум, должен быть указан параметр домена, который определяет домен сопоставления NFSv4. Если домен сопоставления NFSv4 совпадает с доменным именем DNS, этот параметр можно пропустить. Клиент и сервер должны согласовать домен сопоставления NFSv4, чтобы сопоставление идентификаторов функционировало должным образом.Только сервер NFSv4 использует файл
rpc.idmapd, который запускается службойnfs-idmapd. Клиент NFSv4 использует утилитуnfsidmapна основе цепочки ключей, которая вызывается ядром по требованию для выполнения сопоставления идентификаторов. Если возникает проблема сnfsidmap, клиент возвращается к использованиюrpc.idmapd.
Форматы имени хоста NFS#
В этом разделе описываются различные форматы, которые можно использовать для указания хоста при подключении или экспорте общего ресурса NFS.
Можно указать хост в следующих форматах:
Одиночная машина. Любое из следующих:
Полное доменное имя (которое может быть разрешено сервером);
Имя хоста (которое может быть разрешено сервером);
IP-адрес.
IP-сети. Допустим любой из следующих форматов:
a.b.c.d/z, гдеa.b.c.d- сеть, аz- количество битов в маске сети.a.b.c.d/netmask, гдеa.b.c.d- сеть, аnetmask- сетевая маска.
Сетевые группы. Формат
@group-name, гдеgroup-name- это имя сетевой группы NIS.
Конфигурация NFS-сервера#
В этом разделе описывается синтаксис и параметры двух способов настройки экспорта на сервере NFS:
Редактирование файла конфигурации
/etc/exportsвручную;Использование утилиты
exportfsв командной строке.
Файл конфигурации /etc/exports#
Файл /etc/exports управляет тем, какие файловые системы экспортируются на удаленные хосты, и задает параметры. Он следует следующим правилам синтаксиса:
Пустые строки игнорируются.
Чтобы добавить комментарий, начните строку с хеш-метки (
#).Можно обернуть длинные строки обратной косой чертой (
\).Каждая экспортируемая файловая система должна находиться в отдельной строке.
Любые списки авторизованных хостов, размещенные после экспортированной файловой системы, должны быть разделены пробелами.
Параметры для каждого из хостов должны быть заключены в круглые скобки непосредственно после идентификатора хоста, без каких-либо пробелов, разделяющих хост и первую круглую скобку.
Экспортный ввод#
Каждая запись для экспортируемой файловой системы имеет следующую структуру:
export host(options)
Также возможно указать несколько хостов вместе с конкретными параметрами для каждого хоста. Для этого перечислите их в той же строке, что и список, разделенный пробелами, с каждым именем хоста, за которым следуют соответствующие параметры (в скобках), как в следующем примере:
export host1(options1) host2(options2) host3(options3)
В этой структуре:
export. Экспортируемый каталог.host. Параметры хоста или сети, к которым предоставляется общий доступ при экспорте.options. Параметры, которые будут использоваться для хоста.
Параметрами по умолчанию для экспортной записи являются:
ro. Экспортированная файловая система доступна только для чтения. Удаленные хосты не могут изменять данные, совместно используемые в файловой системе. Чтобы разрешить хостам вносить изменения в файловую систему (то есть читать и записывать), укажитеrwпараметр.sync. Сервер NFS не будет отвечать на запросы до тех пор, пока изменения, внесенные предыдущими запросами, не будут записаны на диск. Чтобы вместо этого включить асинхронную запись, укажитеasyncпараметр.wdelay. Сервер NFS задержит запись на диск, если заподозрит, что другой запрос на запись неизбежен. Это может повысить производительность, поскольку уменьшает количество обращений к диску с помощью отдельных команд записи, тем самым уменьшая накладные расходы на запись. Чтобы отключить, укажите параметрno_wdelay, который доступен только в том случае, если также указан параметр синхронизации по умолчанию.root_squash. Это не позволяет пользователям с административными полномочиями, подключенным удаленно (в отличие от локальных), иметь административные привилегии; вместо этого сервер NFS присваивает им идентификатор пользователяnobody. Это эффективно «сокращает» полномочия удаленного пользователя с административными полномочиями до самого низкого локального пользователя, предотвращая возможную несанкционированную запись на удаленный сервер. Чтобы отключить раздавливание корней, укажитеno_root_squashпараметр.
Чтобы удалить всех удаленных пользователей (включая пользователей с административными полномочиями), используйте параметр all_squash. Чтобы указать идентификаторы пользователя и группы, которые сервер NFS должен назначить удаленным пользователям с определенного хоста, используйте параметры anonuid и anongid: (anonuid=uid,anongid=gid).
Здесь uid и gid - это идентификационный номер пользователя и идентификационный номер группы соответственно. Параметры anonuid и anongid позволяют создать специальную учетную запись пользователя и группы для совместного использования удаленными пользователями NFS.
По умолчанию списки контроля доступа (ACL) поддерживаются NFS в SberLinux. Чтобы отключить эту функцию, укажите параметр no_acl при экспорте файловой системы.
Каждое значение по умолчанию для каждой экспортируемой файловой системы должно быть явно переопределено. Например, если параметр rw не указан, то экспортированная файловая система будет доступна только для чтения. Ниже приведен пример строки из /etc/exports, которая переопределяет два параметра по умолчанию:
export host(anonuid=uid,anongid=gid)
Утилита exportfs#
Утилита exportfs позволяет пользователю с административными полномочиями выборочно экспортировать или не экспортировать каталоги без перезапуска службы NFS. Когда заданы соответствующие параметры, утилита exportfs записывает экспортированные файловые системы в файле /var/lib/nfs/xtab. Поскольку служба nfs-mountd ссылается на файл xtab при определении прав доступа к файловой системе, изменения в списке экспортированных файловых систем вступают в силу немедленно.
Ниже приведен список часто используемых опций, доступных для exportfs:
-r. Вызывает экспорт всех каталогов, перечисленных в/etc/exports, путем создания нового списка экспорта в/var/lib/nfs/etab. Эта опция эффективно обновляет список экспорта с учетом любых изменений, внесенных в каталог/etc/exports.-а. Приводит к тому, что все каталоги экспортируются или не экспортируются, в зависимости от того, какие параметры передаются вexportfs. Если не указаны,exportfsэкспортирует все файловые системы, указанные в каталоге/etc/exports.-o file-systems. Указывает экспортируемые каталоги, которых нет в/etc/exports. Заменитеfile-systemsдополнительными файловыми системами, подлежащими экспорту. Эти файловые системы должны быть отформатированы таким же образом, как они указаны в каталоге/etc/exports. Эта опция часто используется для тестирования экспортированной файловой системы перед ее постоянным добавлением в список экспортируемых файловых систем.-i. Игнорирует/etc/exports; для определения экспортируемых файловых систем используются только опции, заданные из командной строки.-u. Не экспортирует все общие каталоги. Командаexportfs -uaприостанавливает общий доступ к файлам NFS, сохраняя при этом работоспособность всех служб. Чтобы повторно включить общий доступ к NFS, используйте командуexportfs -r.-v. Подробная операция, при которой экспортируемые или неэкспортируемые файловые системы отображаются более подробно при выполнении командыexportfs.Если утилите
exportfsне переданы никакие опции, она отобразит список экспортируемых в данный момент файловых систем.
NFS и rpcbind#
В этом разделе объясняется назначение службы rpcbind, которая требуется NFSv3.
Служба rpcbind сопоставляет службы удаленного вызова процедур (RPC) с портами, на которых они прослушиваются. Процессы RPC уведомляют rpcbind при запуске, регистрируя порты, которые они прослушивают, и номера программ RPC, которые ожидают обслуживания. Затем клиентская система связывается с rpcbind на сервере с определенным номером программы RPC. Служба rpcbind перенаправляет клиента на соответствующий номер порта, чтобы он мог взаимодействовать с запрошенной службой.
Поскольку службы на основе RPC полагаются на rpcbind для установления всех соединений с входящими клиентскими запросами, rpcbind должен быть доступен до запуска любой из этих служб.
Правила контроля доступа для rpcbind влияют на все службы на основе RPC. В качестве альтернативы можно указать правила управления доступом для каждого из демонов NFS RPC.
Установка NFS#
Эта процедура устанавливает все пакеты, необходимые для монтирования или экспорта общих ресурсов NFS.
Установите пакет nfs-utils:
dnf install nfs-utils
Запуск NFS-сервера#
Эта процедура описывает, как запустить сервер NFS, который необходим для экспорта общих ресурсов NFS.
Предварительные условия:
Для серверов, поддерживающих соединения NFSv3, должна быть запущена служба
rpcbind. Чтобы убедиться, что службаrpcbindактивна, используйте следующую команду:systemctl status rpcbindЕсли служба остановлена, запустите и включите ее:
systemctl enable --now rpcbind
Чтобы запустить сервер NFS и включить его автоматический запуск при загрузке, используйте следующую команду:
systemctl enable --now nfs-server
Устранение неполадок NFS и rpcbind#
Поскольку служба rpcbind обеспечивает координацию между службами RPC и номерами портов, используемыми для связи с ними, полезно просматривать состояние текущих служб RPC с помощью rpcbind при устранении неполадок. Утилита rpcinfo показывает каждую службу на основе RPC с номерами портов, номером программы RPC, номером версии и типом протокола IP (TCP или UDP).
Чтобы убедиться, что для службы rpcbind включены соответствующие службы на основе NFS RPC, используйте следующую команду:
rpcinfo -p
Если одна из служб NFS запускается неправильно, rpcbind не сможет сопоставить запросы RPC от клиентов для этой службы с правильным портом.
Во многих случаях, если NFS отсутствует в выводе службы rpcinfo, перезапуск NFS приводит к тому, что служба правильно регистрируется в rpcbind и начинает работать. Поэтому перезапустите службу rpcbind:
systemctl restart nfs-server
Настройка сервера NFS для работы за межсетевым экраном#
Для NFS требуется служба rpcbind, которая динамически назначает порты для служб RPC и может вызывать проблемы при настройке правил межсетевого экрана. В следующих разделах описано, как настроить версии NFS для работы за межсетевым экраном, если необходимо поддерживать:
NFSv3. Это включает в себя любые серверы, которые поддерживают NFSv3:
Серверы только для NFSv3;
Серверы, поддерживающие как NFSv3, так и NFSv4;
NFSv4-only.
Настройка сервера с поддержкой NFSv3 для работы за межсетевым экраном#
Следующая процедура описывает, как настроить серверы, поддерживающие NFSv3, для работы за межсетевым экраном. Сюда входят серверы только для NFSv3 и серверы, которые поддерживают как NFSv3, так и NFSv4.
Чтобы разрешить клиентам доступ к общим ресурсам NFS за межсетевым экраном, настройте межсетевой экран, выполнив следующие команды на сервере NFS:
firewall-cmd --permanent --add-service mountd firewall-cmd --permanent --add-service rpc-bind firewall-cmd --permanent --add-service nfsУкажите порты, которые будут использоваться службой RPC
nlockmgrв файле/etc/nfs.conf, следующим образом:[lockd]port=tcp-port-numberudp-port=udp-port-numberВ качестве альтернативы можно указать
nlm_tcpportиnlm_udpportв файле/etc/modprobe.d/lockd.conf.Откройте указанные порты в межсетевом экране, выполнив следующие команды на сервере NFS:
firewall-cmd --permanent --add-port=<lockd-tcp-port>/tcp firewall-cmd --permanent --add-port=<lockd-udp-port>/udpДобавьте статические порты для
rpc.statd, отредактировав раздел[statd]файла/etc/nfs.confследующим образом:[statd]port=port-numberОткройте добавленные порты в межсетевом экране, выполнив следующие команды на сервере NFS:
firewall-cmd --permanent --add-port=<statd-tcp-port>/tcp firewall-cmd --permanent --add-port=<statd-udp-port>/udpПерезагрузите конфигурацию межсетевого экрана:
firewall-cmd --reloadСначала перезапустите службу
rpc-statd, а затем перезапустите службуnfs-server:systemctl restart rpc-statd.service systemctl restart nfs-server.service
В качестве альтернативы, если указаны порты lockd в файле /etc/modprobe.d/lockd.conf:
Обновите текущие значения
/proc/sys/fs/nfs/nlm_tcpportи/proc/sys/fs/nfs/nlm_udpport:sysctl -w fs.nfs.nlm_tcpport=<tcp-port># sysctl -w fs.nfs.nlm_udpport=<udp-port>Перезапустите службы
rpc-statdиnfs-server:systemctl restart rpc-statd.service# systemctl restart nfs-server.service
Настройка сервера только для NFSv4 для работы за межсетевым экраном#
Следующая процедура описывает, как настроить сервер только для NFSv4 для работы за межсетевым экраном.
Чтобы разрешить клиентам доступ к общим ресурсам NFS за межсетевым экраном, настройте межсетевой экран, выполнив следующую команду на сервере NFS:
firewall-cmd --permanent --add-service nfsПерезагрузите конфигурацию межсетевого экрана:
firewall-cmd --reloadПерезапустите nfs-сервер:
systemctl restart nfs-server
Настройка клиента NFSv3 для работы за межсетевым экраном#
Процедура настройки клиента NFSv3 для работы за межсетевым экраном аналогична процедуре настройки сервера NFSv3 для работы за межсетевым экраном.
Следующая процедура описывает, как настроить машину, являющуюся клиентом NFS, только для работы за межсетевым экраном.
Чтобы разрешить серверу NFS выполнять обратные вызовы клиенту NFS, когда клиент находится за межсетевым экраном, добавьте службу
rpc-bindк межсетевым экрану, выполнив следующую команду на клиенте NFS:firewall-cmd --permanent --add-service rpc-bindУкажите порты, которые будут использоваться службой RPC
nlockmgrв файле/etc/nfs.confследующим образом:[lockd]port=port-numberudp-port=upd-port-numberВ качестве альтернативы можно указать
nlm_tcpportиnlm_udpportв файле/etc/modprobe.d/lockd.conf.Откройте указанные порты в межсетевым экране, выполнив следующие команды на клиенте NFS:
firewall-cmd --permanent --add-port=<lockd-tcp-port>/tcp firewall-cmd --permanent --add-port=<lockd-udp-port>/udpДобавьте статические порты для
rpc.statd, отредактировав раздел[statd]файла/etc/nfs.confследующим образом:[statd]port=port-numberОткройте добавленные порты в межсетевом экране, выполнив следующие команды на клиенте NFS:
firewall-cmd --permanent --add-port=<statd-tcp-port>/tcp firewall-cmd --permanent --add-port=<statd-udp-port>/udpПерезагрузите конфигурацию межсетевого экрана:
firewall-cmd --reloadПерезапустите службу
rpc-statd:systemctl restart rpc-statd.service
В качестве альтернативы, если указаны порты lockd в файле /etc/modprobe.d/lockd.conf:
Обновите текущие значения
**/proc/sys/fs/nfs/nlm_tcpport**и/proc/sys/fs/nfs/nlm_udpport:sysctl -w fs.nfs.nlm_tcpport=<tcp-port># sysctl -w fs.nfs.nlm_udpport=<udp-port>Перезапустите службу
rpc-statd:systemctl restart rpc-statd.service
Настройка клиента NFSv4 для работы за межсетевым экраном#
Выполняйте эту процедуру только в том случае, если клиент использует NFSv4.0. В этом случае необходимо открыть порт для обратных вызовов NFSv4.0.
Эта процедура не требуется для NFSv4.1 или выше, поскольку в более поздних версиях протокола сервер выполняет обратные вызовы по тому же соединению, которое было инициировано клиентом.
Чтобы разрешить обратные вызовы NFSv4.0 проходить через межсетевые экраны, установите порт
/proc/sys/fs/nfs/nfs_callback_tcpи разрешите серверу подключаться к этому порту на клиенте следующим образом:echo "fs.nfs.nfs_callback_tcpport = <callback-port>" >/etc/sysctl.d/90-nfs-callback-port.conf sysctl -p /etc/sysctl.d/90-nfs-callback-port.confОткройте указанный порт в межсетевым экране, выполнив следующую команду на клиенте NFS:
firewall-cmd --permanent --add-port=<callback-port>/tcpПерезагрузите конфигурацию межсетевого экрана:
firewall-cmd --reload
Экспорт квоты RPC через межсетевой экран#
Если экспортируете файловую систему, использующую дисковые квоты, можно использовать службу удаленного вызова процедуры квотирования (RPC) для предоставления данных дисковых квот клиентам NFS.
Включите и запустите службу
rpc-rquotad:systemctl enable --now rpc-rquotadПримечание
Служба
rpc-rquotad, если она включена, запускается автоматически после запуска службы nfs-сервера.Чтобы сделать службу
quotaRPCдоступной за межсетевым экраном, TCP (или UDP, если включен UDP) порт875должен быть открыт. Номер порта по умолчанию определен в файле/etc/services.Можно переопределить номер порта по умолчанию, добавив номер порта
-pк переменнойRPCRQUOTADOPTSв файле/etc/sysconfig/rpc-rquotad.По умолчанию удаленные хосты могут считывать только квоты. Если необходимо разрешить клиентам устанавливать квоты, добавьте параметр
-Sк переменнойRPCRQUOTADOPTSв файле/etc/sysconfig/rpc-rquotad.Перезапустите
rpc-rquotad, чтобы изменения в файле/etc/sysconfig/rpc-rquotadвступили в силу:systemctl restart rpc-rquotad
Защита NFS#
Чтобы свести к минимуму риски безопасности NFS и защитить данные на сервере, рассмотрите следующие разделы при экспорте файловых систем NFS на сервере или их монтировании на клиенте.
Безопасность NFS с AUTH_SYS и элементами управления экспортом#
NFS предоставляет следующие традиционные опции для управления доступом к экспортированным файлам:
Сервер ограничивает, каким хостам разрешено подключать какие файловые системы, либо по IP-адресу, либо по имени хоста.
Сервер применяет разрешения файловой системы для пользователей на клиентах NFS таким же образом, как и для локальных пользователей. Традиционно NFS делает это с помощью сообщения о вызове
AUTH_SYS(также называемогоAUTH_UNIX), которое полагается на то, что клиент указывает UID и GID пользователя. Имейте в виду, что это означает, что вредоносный или неправильно сконфигурированный клиент может легко ошибиться и разрешить пользователю доступ к файлам, которые он не должен.Чтобы ограничить потенциальные риски, пользователи с административными полномочиями часто ограничивают доступ только для чтения или ограничивают пользовательские разрешения общим идентификатором пользователя и группы. К сожалению, эти решения не позволяют использовать общий ресурс NFS так, как это было изначально задумано.
Кроме того, если злоумышленник получит контроль над DNS-сервером, используемым системой, экспортирующей файловую систему NFS, он может указать систему, связанную с определенным именем хоста или полным доменным именем, на неавторизованный компьютер. На данный момент неавторизованный компьютер - это система, которой разрешено подключать общий ресурс NFS, поскольку информация об имени пользователя или пароле не обменивается для обеспечения дополнительной безопасности при подключении NFS.
Подстановочные знаки следует использовать экономно при экспорте каталогов через NFS, поскольку область действия подстановочного знака может охватывать больше систем, чем предполагалось.
Безопасность NFS с AUTH_GSS#
Все версии NFS поддерживают RPCSEC_GSS и механизм Kerberos.
В отличие от AUTH_SYS, с механизмом RPCSEC_GSS Kerberos сервер не зависит от клиента, чтобы правильно представить, какой пользователь обращается к файлу. Использование механизма RPCSEC_GSS Kerberos является наиболее простым способом обеспечения безопасности подключений, поскольку после настройки Kerberos не требуется дополнительная настройка.
Настройка сервера и клиента NFS для использования Kerberos#
Kerberos - это сетевая система аутентификации, которая позволяет клиентам и серверам аутентифицироваться друг перед другом с помощью симметричного шифрования и доверенной третьей стороны, KDC. Рекомендуется использовать управление идентификацией для настройки Kerberos.
Создайте принципал
nfs/hostname.domain@REALMна стороне сервера NFS.Создайте принципал
host/hostname.domain@REALMкак на стороне сервера, так и на стороне клиента.Добавьте соответствующие ключи в
keytabsдля клиента и сервера.На стороне сервера используйте параметр
sec=, чтобы включить требуемые параметры безопасности. Для включения всех вариантов защиты:/export *(sec=sys:krb5:krb5i:krb5p)Допустимыми вариантами безопасности для использования с опцией
sec=являются:sys: отсутствие защиты по умолчанию;krb5: только аутентификация;krb5i: защита целостности. Использует Kerberos V5 для аутентификации пользователя и выполняет проверку целостности операций NFS с использованием безопасных контрольных сумм для предотвращения подделки данных.krb5p: защита конфиденциальности.
Использует Kerberos V5 для аутентификации пользователя, проверки целостности и шифрует трафик NFS, чтобы предотвратить прослушивание трафика. Это наиболее безопасная настройка, но она также сопряжена с наибольшими затратами на производительность.
На стороне клиента добавьте
sec=krb5(илиsec=krb5i, илиsec=krb5p, в зависимости от настройки) к параметрам монтирования:mount -o sec=krb5 server:/export/mnt
Права доступа к файлам для смонтированного экспорта NFS#
Как только файловая система NFS смонтирована удаленным хостом либо для чтения, либо для чтения и записи, единственная защита, которой обладает каждый общий файл - это его разрешения. Если два пользователя с одинаковым значением идентификатора пользователя монтируют одну и ту же файловую систему NFS в разных клиентских системах, они могут изменять файлы друг друга. Кроме того, любой пользователь, вошедший в систему с административными полномочиями в клиентской системе, может использовать su - команду для доступа к любым файлам с общим ресурсом NFS.
По умолчанию NFS использует root_squash при экспорте файловой системы. Это устанавливает идентификатор пользователя любого, кто обращается к общему ресурсу NFS в качестве пользователя с административными полномочиями на своем локальном компьютере, равным пользователю nobody.
При экспорте общего ресурса NFS как доступного только для чтения, рассмотрите возможность использования опции all_squash. Эта опция заставляет каждого пользователя, получающего доступ к экспортированной файловой системе, использовать идентификатор пользователя nobody.
Включение макетов pNFS SCSI в NFS#
Можно настроить сервер и клиент NFS на использование макета pNFS SCSI для доступа к данным. pNFS SCSI полезен в случаях использования, которые предполагают более длительный доступ к файлу для одного клиента:
Клиент и сервер должны иметь возможность отправлять команды SCSI на одно и то же блочное устройство. То есть блочное устройство должно находиться на общей шине SCSI.
Блочное устройство должно содержать файловую систему XFS.
Устройство SCSI должно поддерживать постоянное резервирование SCSI, как описано в спецификации основных команд SCSI-3.
Технология pNFS#
Архитектура pNFS улучшает масштабируемость NFS. Когда сервер реализует pNFS, клиент может получать доступ к данным через несколько серверов одновременно. Это может привести к повышению производительности.
Макеты pNFS SCSI#
Макет SCSI основан на работе макетов блоков pNFS. Макет определяется для всех устройств SCSI. Он содержит последовательный ряд блоков фиксированного размера в виде логических юнитов (LU), которые должны поддерживать постоянное резервирование SCSI. Устройства LU идентифицируются по их идентификатору устройства SCSI.
pNFS SCSI хорошо работает в случаях использования, которые предполагают более длительный доступ одного клиента к файлу. Примером может служить почтовый сервер или виртуальная машина, на которой размещен кластер.
Операции между клиентом и сервером#
Когда клиент NFS считывает из файла или записывает в него, клиент выполняет операцию LAYOUTGET. Сервер отвечает местоположением файла на устройстве SCSI. Клиенту может потребоваться выполнить дополнительную операцию GETDEVICEINFO, чтобы определить, какое устройство SCSI использовать. Если эти операции работают правильно, клиент может отправлять запросы ввода-вывода непосредственно на устройство SCSI вместо отправки операций чтения и записи на сервер.
Ошибки или разногласия между клиентами могут привести к тому, что сервер отзывает макеты или не выдает их клиентам. В этих случаях клиенты возвращаются к выполнению операций чтения и записи на сервер вместо отправки запросов ввода-вывода непосредственно на устройство SCSI.
Резервирование устройств#
pNFS SCSI обрабатывает ограждение посредством назначения резервирования. Прежде чем сервер выдаст макеты клиентам, он резервирует устройство SCSI, чтобы гарантировать, что только зарегистрированные клиенты могут получить доступ к устройству. Если клиент может выдавать команды этому устройству SCSI, но не зарегистрирован на устройстве, многие операции клиента на этом устройстве завершаются неудачей. Например, команда blkid на клиенте не показывает UUID файловой системы XFS, если сервер не предоставил клиенту макет для этого устройства.
Сервер не удаляет свое собственное постоянное резервирование. Это защищает данные в файловой системе устройства при перезапуске клиентов и серверов. Чтобы перепрофилировать устройство SCSI, может потребоваться вручную удалить постоянное резервирование на сервере NFS.
Проверка устройства SCSI, совместимого с pNFS#
Эта процедура проверяет, поддерживает ли устройство SCSI макет pNFS SCSI.
Предварительные условия:
Установите пакет
sg3_utils:dnf install sg3_utils
Как на сервере, так и на клиенте проверьте правильность поддержки устройств SCSI:
sg_persist --in --report-capabilities --verbose path-to-scsi-device
Убедитесь, что установленный бит сохранения при отключении питания остается активным (PTPL_A).
Настройка pNFS SCSI на сервере#
Эта процедура настраивает сервер NFS для экспорта макета pNFS SCSI.
На сервере смонтируйте файловую систему XFS, созданную на устройстве SCSI.
Настройте сервер NFS для экспорта NFS версии 4.1 или выше. Установите следующий параметр в разделе
[nfsd]файла/etc/nfs.conf:[nfsd] vers4.1=yНастройте сервер NFS для экспорта файловой системы XFS через NFS с опцией
pnfs.
Экспортируемая файловая система должна быть создана на всем блочном устройстве, а не только на разделе.
Настройка pNFS SCSI на клиенте#
Эта процедура настраивает клиент NFS для подключения макета nfs SCSI.
На клиенте смонтируйте экспортированную файловую систему XFS, используя NFS:
mount -t nfs -o nfsvers=4.1 host:/remote/export/local/directory
Не монтируйте файловую систему XFS напрямую без NFS.
Снятие резервирования pNFS SCSI на сервере#
Эта процедура освобождает постоянное резервирование, которое сервер NFS хранит на устройстве SCSI. Это позволяет перепрофилировать устройство SCSI, когда больше не нужно экспортировать pNFS SCSI.
Необходимо удалить резервирование с сервера. Он не может быть удален из другого ИТ-узла.
Предварительные условия:
Установите пакет
sg3_utils:dnf install sg3_utils
Запросите существующее резервирование на сервере:
sg_persist --read-reservation path-to-scsi-deviceУдалите существующую регистрацию на сервере:
sg_persist --out \ --release \ --param-rk=reservation-key \ --prout-type=6 \ path-to-scsi-device
Агент почтового транспорта#
Почтовый транспортный агент (MTA) транспортирует сообщения электронной почты между хостами с помощью SMTP. Доставка сообщений электронной почты может включать в себя несколько MTA при достижении пункта назначения. В процессе доставки сообщений использование MTA зависит от MTA или конфигурации доступа в сети.
Sendmail#
Sendmail не является агентом пользователя сообщений (MUA). Не получится просматривать входящую почту и управлять ею через пользовательский интерфейс, но она может работать как SMTP-клиент.
Установка Sendmail#
Чтобы установить Sendmail, выполните следующие действия:
Обновите все установленные пакеты до последней версии, чтобы все зависимые пакеты были обновлены.
dnf updateУстановите пакет
sendmail.dnf install sendmailИспользуйте команду
sendmailдля отправки электронной почты через командную строку.For Example: # echo "This is a test email" | sendmail -s "Test Email" example@receipientemail.ru