Развертывание различных типов серверов#
Настройка веб-сервера Apache HTTP#
Введение в веб-сервер Apache HTTP#
Веб-сервер - это сетевая служба, которая предоставляет контент клиенту через Интернет. Обычно это означает веб-страницы, но могут быть представлены и любые другие документы. Веб-серверы также известны как HTTP-серверы, поскольку они используют транспортный протокол гипертекста (HTTP).
Apache HTTP Server httpd - это веб-сервер с открытым исходным кодом, разработанный Apache Software Foundation. В этом разделе рассматриваются некоторые из недавно добавленных функций и приводятся инструкции по обновлению предыдущих файлов конфигурации.
Заметные изменения в HTTP-сервере Apache#
Функции включают в себя:
Поддержка HTTP/2 обеспечивается пакетом mod_http2, который является частью модуля httpd.
Поддержка активации сокета systemd.
Поддержка модулей:
mod_proxy_hcheck - модуль проверки работоспособности прокси;
mod_proxy_uwsgi - прокси-интерфейс шлюза веб-сервера (WSGI);
mod_proxy_fdpass - обеспечивает поддержку передачи сокета клиента другому процессу;
mod_cache_socache - HTTP-кеш, использующий, например, серверную часть memcache;
mod_md - службу сертификатов протокола ACME SSL/TLS;
Следующие модули загружаются по умолчанию:
mod_request;
mod_macro;
mod_watchdog.
Добавлен новый подпакет httpd-filesystem, который содержит базовую структуру каталогов для HTTP-сервера Apache, включая правильные разрешения для каталогов.
Новый httpd-init.service заменяет скрипт %post для создания пары ключей mod_ssl с самоподписью.
Автоматическая подготовка и обновление сертификатов TLS с использованием протокола Automatic Certificate Management Environment (ACME) поддерживается пакетом mod_md.
HTTP-сервер Apache поддерживает загрузку сертификатов TLS и закрытых ключей из аппаратных токенов безопасности непосредственно из модулей PKCS#11. В результате конфигурация mod_ssl может использовать URL-адреса PKCS#11 для идентификации закрытого ключа TLS и, необязательно, сертификата TLS в директивах SSLCertificateKeyFile и SSLCertificateFile.
Поддерживается директива ListenFree в файле /etc/httpd/conf/httpd.conf.
Аналогично директиве Listen, ListenFree предоставляет информацию об IP-адресах, портах или комбинациях IP-адресов и портов, которые прослушивает сервер. Однако в ListenFree опция сокета IP_FREEBIND включена по умолчанию. Следовательно, httpd разрешено привязываться к нелокальному IP-адресу или к IP-адресу, который еще не существует. Это позволяет httpd прослушивать сокет, не требуя, чтобы базовый сетевой интерфейс или указанный динамический IP-адрес были активны в то время, когда httpd пытается привязаться к нему.
Для получения более подробной информации о ListenFree смотрите следующую таблицу:
Таблица. Синтаксис, статус и модули директивы ListenFree
Синтаксис |
Статус |
Модули |
|---|---|---|
ListenFree [IP-адрес:] portnumber [protocol] |
MPM |
event, worker, prefork, mpm_winnt, mpm_netware, mpmt_os2 |
Используйте mod_ssl вместо mod_perl
Тип базы данных аутентификации DBM по умолчанию, используемый HTTP-сервером Apache в SberLinux, был изменен с SDBM на db5.
Модуль mod_wsgi для HTTP-сервера Apache обновлен до версии Python 3. Приложения WSGI поддерживаются только с Python 3 и должны быть перенесены с Python 2.
Модуль многопроцессорной обработки (MPM), настроенный по умолчанию с HTTP-сервером Apache, изменился с многопроцессорной разветвленной модели (известной как prefork) на высокопроизводительную многопоточную модель event.
Любые сторонние модули, которые не являются потокобезопасными, должны быть заменены или удалены. Чтобы изменить настроенный MPM, отредактируйте /etc/httpd/conf.modules.d/00-mpm.conf файл. Смотрите справочную страницу httpd.service(8) для получения дополнительной информации.
Минимальные UID и GID, разрешенные для пользователей suEXEC, равны 1000 и 500 соответственно (ранее 100 и 100%).
Файл /etc/sysconfig/httpd больше не является поддерживаемым интерфейсом для настройки переменных среды для службы httpd. Справочная страница httpd.service(8) была добавлена для systemd службы.
При остановке службы httpd по умолчанию используется «изящная остановка».
Модуль mod_auth_kerb был заменен модулем mod_auth_gssapi.
Обновление конфигурации#
Чтобы обновить файлы конфигурации с версии HTTP-сервера Apache выберите один из следующих вариантов:
Если для установки переменных окружения используется файл /etc/sysconfig/httpd, создайте вместо него раскрывающийся файл systemd. Если используются какие-либо сторонние модули, убедитесь, что они совместимы с многопоточным MPM. Если используется suexec, убедитесь, что идентификаторы пользователя и группы соответствуют новому минимуму. Можно проверить конфигурацию на наличие возможных ошибок, используя следующую команду:
# apachectl configtest
Syntax OK
Файлы конфигурации Apache#
Когда httpd служба запущена, по умолчанию она считывает конфигурацию из местоположений, перечисленных в таблице ниже.
Таблица. Файлы конфигурации службы httpd
Путь |
Описание |
|---|---|
/etc/httpd/conf/httpd.conf |
Основной конфигурационный файл. |
/etc/httpd/conf.d/ |
Вспомогательный каталог для файлов конфигурации, которые включены в основной файл конфигурации. |
/etc/httpd/conf.modules.d/ |
Вспомогательный каталог для файлов конфигурации, которые загружают установленные динамические модули. В конфигурации по умолчанию эти файлы конфигурации обрабатываются в первую очередь |
Хотя конфигурация по умолчанию подходит для большинства ситуаций, можно использовать и другие параметры конфигурации. Чтобы любые изменения конфигурации вступили в силу, перезапустите веб-сервер.
Чтобы проверить конфигурацию на наличие возможных ошибок, введите следующее в командной строке:
# apachectl configtest
Syntax OK
Чтобы упростить восстановление после ошибок, сделайте копию исходного файла перед его редактированием.
Управление службой httpd#
В этом разделе описано, как запустить, остановить и перезапустить httpd службу.
Предварительные условия:
Установлен HTTP-сервер Apache.
Процедура:
Чтобы запустить httpd службу, введите:
systemctl start httpd
Чтобы остановить httpd службу, введите:
# systemctl stop httpd
Чтобы перезапустить httpd службу, введите:
# systemctl restart httpd
Настройка HTTP-сервера Apache с одним экземпляром#
В этом разделе описывается, как настроить HTTP-сервер Apache с одним экземпляром для обслуживания статического HTML-контента.
Следуйте процедуре, описанной в этом разделе, если веб-сервер должен предоставлять одинаковый контент для всех доменов, связанных с сервером. Если можно предоставлять разный контент для разных доменов, настройте виртуальные хосты на основе имен. Дополнительные сведения см. в разделе «Настройка виртуальных хостов Apache на основе имен».
Процедура:
Установите httpd пакет:
# yum 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 запускается по умолчанию. Владельцем контента может быть либо пользователь root и группа пользователей root, либо другой пользователь или группа по выбору администратора. Если владельцем содержимого является пользователь root и группа пользователей root, файлы должны быть доступны для чтения другими пользователями. Контекст SELinux для всех файлов и каталогов должен быть httpd_sys_content_t, который применяется по умолчанию ко всему содержимому в каталоге /var/www.
Этапы проверки:
Подключитесь с помощью веб-браузера к http://server_IP_or_host_name/.
Если каталог /var/www/html/ пуст или не содержит index.html или файл index.htm, Apache отображает тестовую страницу SberLinux. Если /var/www/html/ содержит HTML-файлы с другим именем, Можно загрузить их, введя URL-адрес этого файла, например http://server_IP_or_host_name/example.html.
Настройка виртуальных хостов Apache на основе имен#
Виртуальные хосты на основе имен позволяют Apache обслуживать различный контент для разных доменов, которые разрешаются по IP-адресу сервера.
Процедура в этом разделе описывает настройку виртуального хоста как для example.ru и example.net домен с отдельными корневыми каталогами документов. Оба виртуальных хоста обслуживают статический HTML-контент.
Предварительные условия:
Клиенты и веб-сервер разрешают example.ru и example.net домен к IP-адресу веб-сервера.
Обратите внимание, что необходимо вручную добавить эти записи на свой DNS-сервер.
Процедура:
Установите httpd пакет:
# yum install httpd
Отредактируйте файл /etc/httpd/conf/httpd.conf:
Добавьте следующую конфигурацию виртуального хоста для example.ru домен:
<VirtualHost *:80
DocumentRoot "/var/www/example.ru/"
ServerName example.ru
CustomLog /var/log/httpd/example.ru_access.log combined
ErrorLog /var/log/httpd/example.ru_error.log
</VirtualHost
Эти параметры настраивают следующее:
Все настройки в директиве <VirtualHost *:80 специфичны для этого виртуального хоста.
DocumentRoot задает путь к веб-контенту виртуального хоста.
ServerName задает домены, для которых этот виртуальный хост обслуживает контент.
Чтобы задать несколько доменов, добавьте параметр ServerAlias в конфигурацию и укажите дополнительные домены, разделенные пробелом в этом параметре.
Пользовательский журнал задает путь к журналу доступа виртуального хоста.
Журнал ошибок задает путь к журналу ошибок виртуального хоста.
Примечание: Apache использует первый виртуальный хост, найденный в конфигурации, также для запросов, которые не соответствуют ни одному домену, установленному в параметрах ServerName и ServerAlias. Это также включает запросы, отправленные на IP-адрес сервера.
Добавьте аналогичную конфигурацию виртуального хоста для example.net домена:
<VirtualHost *:80
DocumentRoot "/var/www/example.net/"
ServerName example.net
CustomLog /var/log/httpd/example.net_access.log combined
ErrorLog /var/log/httpd/example.net_error.log
</VirtualHost
Создайте корни документа для обоих виртуальных хостов:
# mkdir /var/www/example.ru/
# mkdir /var/www/example.net/
Если задаете пути в DocumentRoot параметры, которые не входят в /var/www/, установите httpd_sys_content_t контекст в обоих корнях документа:
# semanage fcontext -a -t httpd_sys_content_t "/srv/example.ru(/.*)?"
# restorecon -Rv /srv/example.ru/
# semanage fcontext -a -t httpd_sys_content_t "/srv/example.net(/.\*)?"
# restorecon -Rv /srv/example.net/
Эти команды устанавливают httpd_sys_content_t контекст на /srv/example.ru//srv/example.net/ каталог.
Обратите внимание, что необходимо установить policycoreutils-python-utils пакет для запуска restorecon команды.
Откройте порт 80 в локальном межсетевом экране:
# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --reload
Включите и запустите обслуживание httpd:
# systemctl enable --now httpd
Этапы проверки:
Создайте отдельный файл примера в корне документа каждого виртуального хоста:
# echo "vHost example.ru" /var/www/example.ru/index.html# echo "vHost example.net" /var/www/example.net/index.html
Используйте браузер и подключитесь к http://example.ru. Веб-сервер показывает пример файла с example.ru виртуального хоста.
Используйте браузер и подключитесь к http://example.net. Веб-сервер показывает пример файла с example.net виртуального хоста.
Настройка проверки подлинности Kerberos для веб-сервера Apache HTTP#
Для выполнения аутентификации Kerberos на веб-сервере Apache HTTP SberLinux использует модуль Apache mod_auth_gssapi. Общий API служб безопасности (GSSAPI) - это интерфейс для приложений, которые делают запросы на использование библиотек безопасности, таких как Kerberos. Сервис gssproxy позволяет реализовать разделение привилегий для httpd сервера, что оптимизирует этот процесс с точки зрения безопасности.
Примечание: Модуль mod_auth_gssapi заменяет удаленный модуль mod_auth_kerb.
Предварительные условия:
Пакеты httpd и gssproxy установлены.
Веб-сервер Apache настроен и httpd служба запущена.
Настройка GSS-Proxy в среде IdM
Эта процедура описывает, как настроить GSS-прокси для выполнения аутентификации Kerberos на веб-сервере Apache HTTP.
Процедура:
Включите доступ к keytab HTTP/<ИМЯ_СЕРВЕРА @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, таким образом, только пользователь root имеет доступ к файлу keytab. Пользователь apache этого не делает.
Создайте файл /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
Настройка проверки подлинности Kerberos для каталога, совместно используемого веб-сервером Apache HTTP
Эта процедура описывает, как настроить проверку подлинности Kerberos для каталога /var/www/html/private/.
Предварительные условия:
Служба gssproxy настроена и запущена.
Процедура:
Настройте модуль mod_auth_gssapi для защиты каталога /var/www/html/private/:
<Location /var/www/html/private
AuthType GSSAPI
AuthName "GSSAPI Login"
Require valid-user
</Location
Создайте файл /etc/systemd/system/httpd.service со следующим содержимым:
.include /lib/systemd/system/httpd.service
[Service]
Environment=GSS_USE_PROXY=11
Перезагрузите конфигурацию системы:
# systemctl daemon-reload
Перезапустите httpd службу:
# systemctl restart httpd.service
Этапы проверки:
Получите Kerberos ticket:
# kinit
Откройте URL-адрес защищенного каталога в браузере.
Настройка шифрования TLS на HTTP-сервере Apache#
По умолчанию Apache предоставляет контент клиентам, используя незашифрованное HTTP-соединение. В этом разделе описывается, как включить шифрование TLS и настроить часто используемые параметры, связанные с шифрованием, на HTTP-сервере Apache.
Предварительные условия:
HTTP-сервер Apache установлен и запущен.
Добавление шифрования TLS на HTTP-сервер Apache
В этом разделе описывается, как включить шифрование TLS на HTTP-сервере Apache для example.ru домен.
Предварительные условия:
HTTP-сервер Apache установлен и запущен.
Закрытый ключ хранится в /etc/pki/tls/private/example.ru.key файле.
Для получения подробной информации о создании закрытого ключа и запроса на подписание сертификата (CSR), а также о том, как запросить сертификат у центра сертификации (CA), см. документацию CA. В качестве альтернативы, если центр сертификации поддерживает протокол ACME, Можно использовать модуль mod_md для автоматизации получения и предоставления сертификатов TLS.
Сертификат TLS хранится в /etc/pki/tls/certs/example.ru.crt файле. Если используете другой путь, адаптируйте соответствующие шаги процедуры.
Сертификат CA хранится в /etc/pki/tls/certs/ca.crt файле. Если используете другой путь, адаптируйте соответствующие шаги процедуры.
Клиенты и веб-сервер преобразуют имя хоста сервера в IP-адрес веб-сервера.
Процедура:
Установите пакет mod_ssl:
# yum install mod_ssl
Отредактируйте файл / etc/httpd/conf.d/ssl.conf и добавьте следующие настройки в директиву <VirtualHost default:443:
Установите имя сервера:
ServerName example.ru
Примечание: Имя сервера должно соответствовать записи, заданной в поле Common Name сертификата.
При необходимости: если сертификат содержит дополнительные имена хостов в поле Subject Alt Names (SAN), можно настроить mod_ssl для обеспечения шифрования TLS также для этих имен хостов. Чтобы настроить это, добавьте параметр ServerAliases с соответствующими именами:
ServerAlias www.example.ru server.example.ru
Задайте пути к закрытому ключу, сертификату сервера и сертификату CA:
SSLCertificateKeyFile "/etc/pki/tls/private/example.ru.key"
SSLCertificateFile "/etc/pki/tls/certs/example.ru.crt"
SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"
По соображениям безопасности настройте, чтобы только пользователь root мог получить доступ к файлу закрытого ключа:
# chown root:root /etc/pki/tls/private/example.ru.key
# chmod 600 /etc/pki/tls/private/example.ru.key
Предупреждение: Если к закрытому ключу получили доступ неавторизованные пользователи, отмените сертификат, создайте новый закрытый ключ и запросите новый сертификат. В противном случае соединение TLS больше не является безопасным.
Откройте порт 443 в локальном межсетевом экране:
# firewall-cmd --permanent --add-port=443/tcp
# firewall-cmd --reload
Перезапустите httpd службу:
# systemctl restart httpd
Примечание: Если файл закрытого ключа защищен паролем, необходимо вводить этот пароль каждый раз при запуске службы httpd.
Этапы проверки:
Используйте браузер и подключайтесь к https://example.ru.
Настройка поддерживаемых версий протокола TLS на HTTP-сервере Apache
По умолчанию HTTP-сервер Apache на SberLinux использует общесистемную политику шифрования, которая определяет безопасные значения по умолчанию, и они также совместимы с последними браузерами. Например, политика по умолчанию определяет, что в apache включены только версии протоколов TLSv1.2 и TLSv1.3.
В этом разделе описывается, какие версии протокола TLS поддерживает HTTP-сервер Apache. Следуйте процедуре, если в среде требуется включить только определенные версии протокола TLS, например:
Если среда требует, чтобы клиенты также могли использовать слабый протокол TLS1 (TLSv1.0) или TLS1.1.
Если настроить, что Apache поддерживает только протокол TLSv1.2 или TLSv1.3.
Предварительные условия:
Шифрование TLS включено на сервере, как описано в разделе «Добавление шифрования TLS на HTTP-сервер Apache».
Процедура:
Отредактируйте файл /etc/httpd/conf/httpd.conf и добавьте следующий параметр в директиву <VirtualHost, для которой можно установить версию протокола TLS. Например, чтобы включить только протокол TLSv1.3:
SSLProtocol -All TLSv1.3
Перезапустите службу httpd:
# systemctl restart httpd
Этапы проверки:
Используйте следующую команду, чтобы убедиться, что сервер поддерживает TLSv1.3:
# openssl s_client -connect example.ru:443 -tls1_3
Используйте следующую команду, чтобы убедиться, что сервер не поддерживает TLSv1.2:
# openssl s_client -пример подключения.com:443 -tls1_2
Если сервер не поддерживает протокол, команда возвращает сообщение об ошибке:
140111600609088:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1543:SSL alert number 70
При необходимости повторите команду для других версий протокола TLS.
Настройка поддерживаемых шифров на HTTP-сервере Apache
По умолчанию HTTP-сервер Apache использует общесистемную политику шифрования, которая определяет безопасные значения по умолчанию, и они также совместимы с последними браузерами. Список шифров, разрешенных общесистемной криптографией, см. в файле /etc/crypto-policies/back-ends/openssl.config.
В этом разделе описывается, как вручную настроить, какие шифры поддерживает HTTP-сервер Apache. Следуйте процедуре, если в среде требуются определенные шифры.
Предварительные условия:
Шифрование TLS включено на сервере, как описано в разделе «Добавление шифрования TLS на HTTP-сервер Apache».
Процедура:
Отредактируйте файл /etc/httpd/conf/httpd.conf и добавьте параметр SSLCipherSuite в директиву <VirtualHost, для которой необходимо установить шифры TLS:
SSLCipherSuite "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!SHA1:!SHA256"
Этот пример включает только шифры EECDH +AESGCM, EDH+AESGCM, AES256+EECDH и AES256+EDH и отключает все шифры, которые используют код аутентификации сообщений SHA1 и SHA256 (MAC).
Перезапустите службу httpd:
# systemctl restart httpd
Этапы проверки:
Для отображения списка шифров, поддерживаемых HTTP-сервером Apache:
Установите пакет nmap:
# yum install nmap
Используйте утилиту nmap для отображения поддерживаемых шифров:
# nmap --script ssl-enum-ciphers -p 443 example.ru
...
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
| TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
...
Настройка аутентификации сертификата клиента TLS#
Проверка подлинности по сертификату клиента позволяет администраторам разрешать доступ к ресурсам на веб-сервере только тем пользователям, которые проходят проверку подлинности с использованием сертификата. В этом разделе описывается, как настроить проверку подлинности клиентского сертификата для каталога /var/www/html/Example/.
Если HTTP-сервер Apache использует протокол TLS 1.3, некоторым клиентам требуется дополнительная настройка. Например, в Firefox установите для параметра security.tls.enable_post_handshake_authв меню about:configзначение true.
Предварительные условия:
Шифрование TLS включено на сервере, как описано в разделе Добавление шифрования TLS на HTTP-сервер Apache.
Процедура:
Отредактируйте файл /etc/httpd/conf/httpd.conf и добавьте следующие параметры в директиву <VirtualHost, для которой можно настроить аутентификацию клиента:
<Directory "/var/www/html/Example/"
SSLVerifyClient require
</Directory
Параметр SSLVerifyClient require определяет, что сервер должен успешно проверить сертификат клиента, прежде чем клиент сможет получить доступ к содержимому в каталоге /var/www/html/Example/.
Перезапустите службу httpd:
# systemctl restart httpd
Этапы проверки:
Используйте утилиту curl для доступа к https://example.ru/Example/ URL без аутентификации клиента:
$ curl https://example.ru/Example/
curl: (56) OpenSSL SSL_read: error:1409445C:SSL routines:ssl3_read_bytes:tlsv13 **alert certificate required**, errno 0
Ошибка указывает на то, что веб-серверу требуется проверка подлинности по сертификату клиента.
Передайте закрытый ключ и сертификат клиента, а также сертификат CA в curl, чтобы получить доступ к тому же URL-адресу с проверкой подлинности клиента:
$ curl --cacert ca.crt --key client.key --cert client.crt https://example.ru/Example/
Если запрос выполнен успешно, curl отображает index.html файл, хранящийся в каталоге /var/www/html/Example/.
Установка HTTP-сервера Apache#
Чтобы снизить риски, связанные с запуском веб-приложений на веб-сервере, путем развертывания ModSecurity, установите пакеты mod_security и mod_security_crs для HTTP-сервера Apache. Пакет mod_security_crs предоставляет базовый набор правил (CRS) для модуля межсетевого экрана веб-приложений ModSecurity (WAF).
Процедура:
Установите пакеты mod_security, mod_security_crs и httpd:
# yum install -y mod_security мод_security_crs httpd
Запустите сервер httpd:
# systemctl restart httpd
Проверка:
Убедитесь, что межсетевой экран веб-приложений ModSecurity включен на HTTP-сервере Apache:
# httpd -M | grep security
Убедитесь, что каталог /etc/httpd/modsecurity.d/activated_rules/ содержит правила, предоставляемые mod_security_crs.
Работа с модулями#
Будучи модульным приложением, служба httpd распространяется вместе с рядом динамических общих объектов (DSO), которые могут быть динамически загружены или выгружены во время выполнения по мере необходимости. Эти модули расположены в /usr/lib64/httpd/modules/ каталоге.
Загрузка модуля
Чтобы загрузить определенный модуль DSO, используйте директиву LoadModule. Обратите внимание, что модули, предоставляемые отдельным пакетом, часто имеют свой собственный конфигурационный файл в /etc/httpd/conf.modules.d/ каталоге.
Загрузите DSO mod_ssl
LoadModule ssl_module модули/mod_ssl.so
После загрузки модуля перезапустите веб-сервер, чтобы перезагрузить конфигурацию.
Написание модуля
Чтобы создать новый модуль DSO, убедитесь, что установлен пакет httpd-devel. Для этого введите следующую команду от имени root:
# yum install httpd-devel
Этот пакет содержит включаемые файлы, файлы заголовков и утилиту APache eXtenSion (apxs), необходимую для компиляции модуля.
После написания можно создать модуль с помощью следующей команды:
# apxs -i -a -c module_name.c
Если сборка прошла успешно, можно загрузить модуль таким же образом, как и любой другой модуль, распространяемый с HTTP-сервером Apache.
Экспорт закрытого ключа и сертификатов из базы данных NSS для их использования в конфигурации веб-сервера Apache.
Эта процедура предполагает, что база данных NSS хранится в /etc/httpd/alias/, а экспортированный закрытый ключ и сертификаты хранятся в каталоге /etc/pki/tls/.
Предварительные условия:
Закрытый ключ, сертификат и сертификат центра сертификации (CA) хранятся в базе данных NSS.
Процедура:
Перечислите сертификаты в базе данных NSS:
# certutil -d /etc/httpd/alias/ -L
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
Example CA C,,
Example Server Certificate u,u,u
На следующих шагах понадобятся псевдонимы сертификатов.
Чтобы извлечь закрытый ключ, необходимо временно экспортировать ключ в файл PKCS #12:
Используйте псевдоним сертификата, связанного с закрытым ключом, чтобы экспортировать ключ в файл PKCS #12:
# pk12util -o /etc/pki/tls/private/export.p12 -d /etc/httpd/alias/ -n "Example Server Certificate"
Enter password for PKCS12 file: password
Re-enter password: password
pk12util: PKCS12 EXPORT SUCCESSFUL
Обратите внимание, что необходимо установить пароль для файла PKCS #12. Этот пароль понадобится на следующем шаге.
Экспортируйте закрытый ключ из файла PKCS #12:
# openssl pkcs12 -in /etc/pki/tls/private/export.p12 -out /etc/pki/tls/private/server.key -nocerts -nodes
Enter Import Password: password
MAC verified OK
Удалите временный файл PKCS #12:
# rm /etc/pki/tls/private/export.p12
Установите разрешения для /etc/pki/tls/private/server.key файла, чтобы гарантировать, что только пользователь root может получить доступ к этому файлу:
# chown root:root /etc/pki/tls/private/server.key
# chmod 0600 /etc/pki/tls/private/server.key
Используйте псевдоним сертификата сервера в базе данных NSS для экспорта сертификата CA:
# certutil -d /etc/httpd/alias/ -L -n "Example Server Certificate" -a -o /etc/pki/tls/certs/server.crt
Установите разрешения для /etc/pki/tls/certs/server.crt файла, чтобы гарантировать, что только пользователь root может получить доступ к этому файлу:
# chown root:root /etc/pki/tls/certs/server.crt
# chmod 0600 /etc/pki/tls/certs/server.crt
Используйте псевдоним сертификата CA в базе данных NSS для экспорта сертификата CA:
# certutil -d /etc/httpd/alias/ -L -n "Example CA" -a -o /etc/pki/tls/certs/ca.crt
Следуйте разделу «Настройка шифрования TLS на HTTP-сервере Apache», чтобы настроить веб-сервер Apache, и:
Установите для параметра SSLCertificateKeyFile значение /etc/pki/tls/private / server.key
Установите для параметра SSLCertificateFile значение /etc/pki/tls/certs / server.crt
Установите для параметра SSLCACertificateFile значение /etc/pki/tls/certs / ca.crt
Дополнительные ресурсы
man httpd(8) — страница руководства для службы httpd, содержащая полный список ее параметров командной строки. man httpd.service(8) — страница руководства для файла модуля httpd.service, описывающая, как настроить и улучшить сервис. man httpd.conf(5) — страница руководства по настройке httpd, описывающая структуру и расположение файлов конфигурации httpd. man apachectl(8) — страница руководства для интерфейса управления HTTP-сервером Apache. Сведения о том, как настроить проверку подлинности Kerberos на HTTP-сервере Apache, см. в разделе «Использование GSS-прокси для работы Apache httpd». Использование Kerberos - это альтернативный способ принудительной авторизации клиента на HTTP-сервере Apache.
Установка и настройка NGINX#
NGINX - это высокопроизводительный и модульный сервер, который можно использовать, например, в качестве:
веб-сервера;
обратного прокси-сервера;
балансировщика нагрузки.
В этом разделе описывается, как использовать NGINX в этих сценариях.
Установка и подготовка NGINX#
SberLinux использует потоки приложений для предоставления различных версий NGINX. В этом разделе описывается, как:
выбрать поток и установить NGINX;
открыть необходимые порты в межсетевом экране;
включить и запустите nginx службу.
Используя конфигурацию по умолчанию, NGINX запускается как веб-сервер на порту 80 и предоставляет содержимое из каталога /usr/share/nginx/html/.
Веб-сервер и прокси-сервер nginx 1.22 доступны в виде потока модулей.
nginx поддерживает:
SSL_sendfile() функцию при использовании OpenSSL 3.0.
Библиотеку PCRE2.
Конвейерную обработку POP3 и IMAP в mail прокси-модуле.
Строки заголовка Auth-SSL-Protocol и Auth-SSL-Cipher, которые передаются почтовому прокси-серверу аутентификации.
Дерективы ssl_conf_command и ssl_reject_handshake.
Директиву proxy_cookie_flags с поддержкой переменных в следующих директивах: proxy_ssl_certificate, proxy_ssl_certificate_key, grpc_ssl_certificate, grpc_ssl_certificate_key uwsgi_ssl_certificate, uwsgi_ssl_certificate_key.
Директиву listen в модуле stream с поддержкой параметра fastopen, который включает режим прослушивания сокетов TCP Fast Open.
Mail директиву в max_errors прокси-модуле.
nginx всегда возвращает ошибку, если:
Используется CONNECT метод.
В запросе указываются оба заголовка, Content-Length и Transfer-Encoding.
Имя заголовка запроса содержит пробелы или управляющие символы.
Host Строка заголовка запроса содержит пробелы или управляющие символы.
nginx блокирует все запросы HTTP/1.0, содержащие Transfer-Encoding заголовок. А также устанавливает соединения HTTP/2 с использованием согласования протокола прикладного уровня (ALPN) и больше не поддерживает протокол Next Protocol Negotiation (NPN).
Чтобы установить nginx:1.22 stream, используйте следующую команду:
# yum module install nginx:1.22
Предварительные условия:
Установлен SberLinux.
Служба межсетевого экрана включена и запущена.
Процедура:
Отобразите доступные потоки модуля NGINX:
# yum module list nginx
Sberlinux for x86_64 - AppStream (RPMs)
Name Stream Profiles Summary
nginx 1.14 [d] common [d] nginx webserver
nginx 1.16 common [d] nginx webserver
...
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalle
Если необходимо установить поток, отличный от используемого по умолчанию, выберите поток:
# yum module enable nginx:stream_version
Установите nginx пакет:
# yum install nginx
Откройте порты, на которых NGINX должен предоставлять свои услуги в межсетевом экране. Например, чтобы открыть порты по умолчанию для HTTP (порт 80) и HTTPS (порт 443) firewalld, введите:
# firewall-cmd --permanent --add-port={80/tcp,443/tcp}
# firewall-cmd --reload
Включите nginx автоматический запуск службы при загрузке системы:
# systemctl enable nginx
При необходимости запустите nginx службу:
# systemctl start nginx
Если не нужно использовать конфигурацию по умолчанию, пропустите этот шаг и соответствующим образом настройте NGINX перед запуском службы.
Этапы проверки:
Используйте yum утилиту, чтобы убедиться, что nginx пакет установлен:
# yum list installed nginx
Installed Packages
nginx.x86_64 1:1.14.1-9.module+el8.0.0+4108+af250afe @sberlinux-for-x86_64-appstream-rpms
Убедитесь, что порты, на которых NGINX должен предоставлять свои услуги, открыты в межсетевом экране:
# firewall-cmd --list-ports
80/tcp 443/tcp
Убедитесь, что nginx служба включена:
# systemctl is-enabled nginx
enabled
Настройка NGINX в качестве веб-сервера, предоставляющего разный контент для разных доменов#
По умолчанию NGINX действует как веб-сервер, который предоставляет клиентам одинаковый контент для всех доменных имен, связанных с IP-адресами сервера. Эта процедура объясняет, как настроить NGINX:
для обслуживания запросов в example.ru домен с содержимым из /var/www/example.ru/ каталога; для обслуживания запросов в example.net домен с содержимым из /var/www/example.net/ каталога; для обслуживания всех других запросов, например, на IP-адрес сервера или на другие домены, связанные с IP-адресом сервера, с содержимым из /usr/share/nginx/html/ каталога.
Предварительные условия:
Клиенты и веб-сервер разрешают example.ru и example.net домен к IP-адресу веб-сервера.
Обратите внимание, что необходимо вручную добавить эти записи на свой DNS-сервер.
Процедура:
Отредактируйте файл /etc/nginx/nginx.conf:
По умолчанию файл /etc/nginx/nginx.conf уже содержит всеобъемлющую конфигурацию. Если удалили эту часть из конфигурации, повторно добавьте следующий серверный блок в http-блок в файле /etc/nginx/nginx.conf:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
}
Эти параметры настраивают следующее:
Директива listen определяет, какие IP-адреса и порты прослушивает служба. В этом случае NGINX прослушивает порт 80 как по всем адресам IPv4, так и по IPv6. Параметр default_server указывает, что NGINX использует этот серверный блок по умолчанию для запросов, соответствующих IP-адресам и портам.
Параметр server_name определяет имена хостов, за которые отвечает этот серверный блок. Установка имя_сервера в _ настраивает NGINX на принятие любого имени хоста для этого серверного блока.
Директива root задает путь к веб-контенту для этого серверного блока.
Добавьте аналогичный серверный блок для example.ru домен в http-блок:
server {
server_name example.ru;
root /var/www/example.ru/;
access_log /var/log/nginx/example.ru/access.log;
error_log /var/log/nginx/example.ru/error.log;
}
Директива access_log определяет отдельный файл журнала доступа для этого домена.
Директива error_log определяет отдельный файл журнала ошибок для этого домена. Добавьте аналогичный серверный блок для example.net домен к http-блоку:
server {
server_name example.net;
root /var/www/example.net/;
access_log /var/log/nginx/example.net/access.log;
error_log /var/log/nginx/example.net/error.log;
}
Создайте корневые каталоги для обоих доменов:
mkdir -p /var/www/example.ru/
mkdir -p /var/www/example.net/
Установите контекст httpd_sys_content_t для обоих корневых каталогов:
# semanage fcontext -a -t httpd_sys_content_t "/var/www/example.ru(/.*)?"
# restorecon -Rv /var/www/example.ru/
# semanage fcontext -a -t httpd_sys_content_t "/var/www/example.net(/.\*)?"
# restorecon -Rv /var/www/example.net/
Эти команды устанавливают контекст httpd_sys_content_t в каталогах /var/www/example.ru/ и /var/www/example.net/.
Обратите внимание, что для выполнения команд restorecon необходимо установить пакет policycoreutils-python-utils.
Создайте каталоги журналов для обоих доменов:
mkdir /var/log/nginx/example.ru/
mkdir /var/log/nginx/example.net/
Перезапустите nginx службу:
# systemctl restart nginx
Этапы проверки:
Создайте другой файл примера в корне документа каждого виртуального хоста:
# echo "Content for example.ru" /var/www/example.ru/index.html
# echo "Content for example.net" /var/www/example.net/index.html
# echo "Catch All content" /usr/share/nginx/html/index.html
В любом браузере подключитесь к http://example.ru. Веб-сервер показывает пример содержимого из /var/www/example.ru/index.html файла.
В любом браузере подключитесь к http://example.net. Веб-сервер показывает пример содержимого из /var/www/example.net/index.html файла.
В любом браузере подключитесь к http://IP_address_of_the_server. Веб-сервер показывает пример содержимого из /usr/share/nginx/html/index.html файла.
Добавление шифрования TLS на веб-сервер NGINX#
В этом разделе описывается, как включить шифрование TLS на веб-сервере NGINX для example.ru домен.
Предварительные условия:
Закрытый ключ хранится в файле /etc/pki/tls/private/example.ru.key.
Сертификат TLS хранится в файле /etc/pki/tls/certs/example.ru.crt. Если используете другой путь, адаптируйте соответствующие шаги процедуры.
Сертификат CA был добавлен к файлу сертификата TLS сервера.
Клиенты и веб-сервер преобразуют имя хоста сервера в IP-адрес веб-сервера.
Порт 443 открыт в локальном межсетевом экране.
Для получения подробной информации о создании закрытого ключа и запроса на подписание сертификата (CSR), а также о том, как запросить сертификат у центра сертификации (CA).
Процедура:
Отредактируйте файл / etc/nginx/nginx.conf и добавьте следующий серверный блок к http-блоку в конфигурации:
server {
listen 443 ssl;
server_name example.ru;
root /usr/share/nginx/html;
ssl_certificate /etc/pki/tls/certs/example.ru.crt;
ssl_certificate_key /etc/pki/tls/private/example.ru.key;
}
По соображениям безопасности настройте, чтобы только пользователь root мог получить доступ к файлу закрытого ключа:
# chown root:root /etc/pki/tls/private/example.ru.key
# chmod 600 /etc/pki/tls/private/example.ru.key
Предупреждение: Если к закрытому ключу получили доступ неавторизованные пользователи, отмените сертификат, создайте новый закрытый ключ и запросите новый сертификат. В противном случае соединение TLS больше не является безопасным.
Перезапустите nginx службу:
# systemctl restart nginx
Этапы проверки:
Используйте браузер и подключитесь к https://example.ru.
Настройка NGINX в качестве обратного прокси для HTTP-трафика#
Можно настроить веб-сервер NGINX так, чтобы он действовал как обратный прокси-сервер для HTTP-трафика. Например, можно использовать эту функциональность для пересылки запросов в определенный подкаталог на удаленном сервере. С точки зрения клиента, клиент загружает контент с хоста, к которому он обращается. Однако NGINX загружает фактическое содержимое с удаленного сервера и пересылает его клиенту.
Эта процедура объясняет, как перенаправить трафик в каталог /example на веб-сервере по URL https://example.ru.
Предварительные условия:
При необходимости шифрование TLS включено на обратном прокси-сервере.
Процедура:
Отредактируйте файл /etc/nginx/nginx.conf и добавьте следующие настройки в серверный блок, который должен обеспечивать обратный прокси:
location /example {
proxy_pass https://example.ru;
}
Блок location определяет, что NGINX передает все запросы в каталоге /example в https://example.ru.
Установите для логического параметра httpd_can_network_connect SELinux значение 1, чтобы SELinux позволил NGINX пересылку трафика:
# setsebool -P httpd_can_network_connect 1
Перезапустите службу nginx:
# systemctl restart nginx
Этапы проверки:
Используйте браузер и подключитесь к http://host_name/example, где отобразится содержание https://example.ru
Настройка NGINX в качестве балансировщика нагрузки HTTP#
Можно использовать функцию обратного прокси-сервера NGINX для балансировки нагрузки на трафик. Эта процедура описывает, как настроить NGINX в качестве балансировщика нагрузки HTTP, который отправляет запросы на разные серверы, основываясь на том, какой из них имеет наименьшее количество активных подключений. Если оба сервера недоступны, процедура также определяет третий хост по причинам резервного копирования.
Предварительные условия:
NGINX установлен.
Процедура:
Отредактируйте файл /etc/nginx/nginx.conf и добавьте следующие настройки:
http {
upstream backend {
least_conn;
server server1.example.ru;
server server2.example.ru;
server server3.example.ru backup;
}
server {
location / {
proxy_pass http://backend;
}
}
}
Директива least_conn в группе хостов с именем backend определяет, что NGINX отправляет запросы на server1.example.ru или server2.example.ru, в зависимости от того, какой хост имеет наименьшее количество активных подключений. NGINX использует server3.example.ru только в качестве резервной копии на случай, если два других хоста недоступны.
С директивой proxy_pass, установленной на http://backend, NGINX действует как обратный прокси-сервер и использует серверную группу хостов для распределения запросов на основе настроек этой группы.
Вместо метода балансировки нагрузки least_conn можно указать:
отсутствие способа использовать циклический перебор и равномерно распределять запросы по серверам;
ip_hash для отправки запросов с одного клиентского адреса на один и тот же сервер на основе хеша, вычисленного из первых трех октетов IPv4-адреса или всего IPv6-адреса клиента;
хеш для определения сервера на основе пользовательского ключа, который может быть строкой, переменной или комбинацией того и другого. Согласованный параметр настраивает, что NGINX распределяет запросы по всем серверам на основе определенного пользователем значения хешированного ключа.
случайные отправки запросов на случайно выбранный сервер.
Перезапустите службу nginx:
# systemctl restart nginx
Использование samba в качестве сервера#
samba реализует протокол Server Message Block (SMB) в SberLinux. Протокол SMB используется для доступа к ресурсам на сервере, таким как общие папки с файлами и общие принтеры. Кроме того, Samba реализует протокол удаленного вызова процедур распределенной вычислительной среды (DCE RPC), используемый Microsoft Windows.
Можно запустить samba как:
член домена Active Directory (AD) или NT4;
автономный сервер;
основной контроллер домена NT4 (PDC) или резервный контроллер домена (BDC).
Примечание: SberLinux поддерживает режимы PDC и BDC только в существующих установках с версиями Windows, которые поддерживают домены NT4. SberLinux рекомендует не настраивать новый домен samba NT4, поскольку операционные системы Microsoft, более поздние, чем Windows 7 и Windows Server 2008 R2, не поддерживают домены NT4.
SberLinux не поддерживает запуск samba в качестве контроллера домена AD (DC).
Независимо от режима установки, можно дополнительно предоставлять общий доступ к каталогам и принтерам. Это позволяет samba выступать в качестве файлового сервера и сервера печати.
Понимание различных сервисов и режимов samba#
В этом разделе описываются различные службы, включенные в samba, и различные режимы, которые можно настроить.
Сервисы samba
samba предоставляет следующие услуги:
smbd
Эта служба предоставляет услуги обмена файлами и печати с использованием протокола SMB. Кроме того, служба отвечает за блокировку ресурсов и аутентификацию подключающихся пользователей. Для аутентификации участников домена smbd требуется winbindd. Служба smb systemd запускает и останавливает демон smbd.
Чтобы использовать службу smbd, установите пакет samba.
nmbd
Эта служба предоставляет имя хоста и разрешение IP-адреса с использованием NetBIOS по протоколу IPv4. В дополнение к разрешению имен служба nmbd позволяет просматривать сеть SMB для поиска доменов, рабочих групп, хостов, общих файловых ресурсов и принтеров. Для этого служба либо сообщает эту информацию непосредственно широковещательному клиенту, либо пересылает ее в локальный или главный браузер. Служба nmb systemd запускает и останавливает демон nmbd.
Обратите внимание, что современные SMB-сети используют DNS для разрешения клиентов и IP-адресов. Для Kerberos требуется рабочая настройка DNS.
Также можно указать распознаватель DNS при использовании ipaclient роли для установки IdM-клиента с переменными ipaclient_configure_dns_resolver и ipaclient_dns_servers. Следовательно, ipaclient роль изменяет resolv.conf файл и утилиты NetworkManager и systemd-resolved для настройки DNS-распознавателя на клиенте аналогично тому, что ansible-freeipa роль ipaserver выполняет на сервере IdM. В результате настройка DNS при использовании роли ipaclient для установки IdM-клиента более эффективна.
Чтобы воспользоваться сервисом nmbd, установите пакет samba.
winbindd
Эта служба предоставляет интерфейс для коммутатора службы имен (NSS) для использования пользователей и групп домена AD или NT4 в локальной системе. Это позволяет, например, пользователям домена проходить аутентификацию в службах, размещенных на сервере samba, или в других локальных службах. Служба winbind systemd запускает и останавливает демон winbindd.
Если samba настроена в качестве участника домена, winbindd должен быть запущен перед службой smbd. В противном случае пользователи и группы домена будут недоступны для локальной системы.
Чтобы использовать службу winbindd, установите пакет samba-winbind.
Службы безопасности samba. Сценарии, когда службы samba и клиентские утилиты samba загружают и перезагружают свою конфигурацию
Параметр безопасности в разделе [global] в файле /etc/samba/smb.conf управляет тем, как samba проверяет подлинность пользователей, подключающихся к сервису. В зависимости от режима, в котором устанавливается samba, для параметра должны быть установлены разные значения:
Для участника домена AD установите security = ads
В этом режиме samba использует Kerberos для аутентификации пользователей AD.
Дополнительные сведения о настройке samba в качестве участника домена см. в разделе Настройка samba в качестве сервера-участника домена AD.
На автономном сервере установите security = user
В этом режиме samba использует локальную базу данных для аутентификации подключающихся пользователей.
Дополнительные сведения о настройке samba в качестве автономного сервера см. в разделе Настройка samba в качестве автономного сервера.
На PDC NT4 или BDC установите security = user
В этом режиме samba проверяет подлинность пользователей в локальной базе данных или базе данных LDAP.
Для участника домена NT4 установите security = domain
В этом режиме samba проверяет подлинность подключения пользователей к NT4 PDC или BDC. Нет возможности использовать этот режим для участников домена AD.
Дополнительные сведения о настройке samba в качестве участника домена см. в разделе Настройка Samba в качестве сервера-участника домена AD.
По умолчанию samba хранит списки управления доступов (ACL) в расширенном атрибуте security.NTACL. Можете настроить имя атрибута с помощью параметра acl_xattr:<security_acl_name> в файле /etc/samba/smb.conf.
Обратите внимание, что заданный атрибут не находится в защищенном месте, как security.NTACL. Следовательно, пользователи с локальным доступом к серверу смогут изменять содержимое пользовательского атрибута и компрометировать списки управления доступов.
Безопасное редактирование конфигурации samba
Ниже описано, когда службы и утилиты samba загружают и перезагружают свою конфигурацию:
Службы samba перезагружают свою конфигурацию:
Автоматически каждые 3 минуты.
По запросу вручную, например, при запуске команды smbcontrol all reload-config.
Клиентские утилиты samba считывают свою конфигурацию только при их запуске.
Обратите внимание, что для вступления в силу определенных параметров, таких как безопасность, простой перезагрузки недостаточно - требуется перезапуск smb службы.
Проверка конфигурации samba#
Службы samba автоматически перезагружают свою конфигурацию каждые 3 минуты. Эта процедура описывает, как отредактировать конфигурацию samba таким образом, чтобы службы не загружали изменения повторно до того, как проверится конфигурация с помощью testparm утилиты.
Предварительные условия:
samba установлена.
Процедура:
Создайте копию файла /etc/samba/smb.conf:
# cp /etc/samba/smb.conf /etc/samba/samba.conf.copy
Отредактируйте скопированный файл и внесите нужные изменения.
Проверьте конфигурацию в файле /etc/samba/samba.conf.copy:
# testparm -s /etc/samba/samba.conf.copy
Если testparm сообщает об ошибках, исправьте их и запустите команду снова.
Переопределите файл /etc/samba/smb.conf новой конфигурацией:
# mv /etc/samba/samba.conf.copy /etc/samba/smb.conf
Подождите, пока службы samba автоматически перезагрузят свою конфигурацию, или вручную перезагрузите конфигурацию:
# smbcontrol all reload-config
Проверка файла smb.conf с помощью утилиты testparm
Утилита testparm проверяет правильность конфигурации samba в файле /etc/samba/smb.conf. Утилита обнаруживает недопустимые параметры и значения, а также неправильные настройки, например, для сопоставления идентификаторов. Если testparm сообщает об отсутствии проблем, службы samba успешно загрузят файл /etc/samba/smb.conf. Обратите внимание, что testparm не может проверить, что настроенные службы будут доступны или будут работать должным образом.
Примечание: Рекомендуем проверять файл /etc/samba/smb.conf с помощью testparm после каждой модификации этого файла.
Предварительные условия:
samba установлена.
Файл /etc/samba/smb.conf завершает работу.
Процедура:
Запустите утилиту testparm от имени пользователя root:
# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Unknown parameter encountered: "log levell"
Processing section "[example_share]"
Loaded services file OK.
ERROR: The idmap range for the domain * (tdb) overlaps with the range of DOMAIN (ad)!
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions
# Global parameters
[global]
...
[example_share]
...
В выводе предыдущего примера сообщается о несуществующем параметре и неверной конфигурации сопоставления идентификаторов.
Если testparm сообщает о неправильных параметрах, значениях или других ошибках в конфигурации, устраните проблему и запустите утилиту снова.
Настройка samba как отдельного сервера#
Можно настроить samba как сервер, который не является членом домена. В этом режиме установки samba аутентифицирует пользователей в локальной базе данных, а не в центральном контроллере домена. Кроме того, можно включить гостевой доступ, чтобы пользователи могли подключаться к одной или нескольким службам без проверки подлинности.
Настройка конфигурации сервера для автономного сервера
В этом разделе описывается, как настроить конфигурацию сервера для автономного сервера samba.
Процедура:
Установите пакет samba:
# yum install samba
Отредактируйте файл /etc/samba/smb.conf и задайте следующие параметры:
[global]
workgroup = Example-WG
netbios name = Server
security = user
log file = /var/log/samba/%m.log
log level = 1
Эта конфигурация определяет автономный сервер с именем Server в рабочей группе Example-WG. Кроме того, эта конфигурация позволяет вести журнал на минимальном уровне (1), а файлы журнала будут храниться в каталоге /var/log/samba/. samba расширит макрос %m в параметре файла журнала до имени NetBIOS подключающихся клиентов. Это позволяет создавать индивидуальные файлы журналов для каждого клиента.
При необходимости настройте общий доступ к файлам или принтерам.
Проверьте файл /etc/samba/smb.conf:
# testparm
Если настроены общие ресурсы, требующие проверки подлинности, создайте учетные записи пользователей.
Откройте необходимые порты и перезагрузите конфигурацию межсетевого экрана с помощью утилиты firewall-cmd:
# firewall-cmd --permanent --add-service=samba
# firewall-cmd --reload
Включите и запустите smb службу:
# systemctl enable --now smb
Создание и включение локальных учетных записей пользователей
Чтобы разрешить пользователям проходить аутентификацию при подключении к общему ресурсу, необходимо создать учетные записи на хосте samba как в операционной системе, так и в базе данных samba. samba требует учетной записи операционной системы для проверки списков управления доступом (ACL) к объектам файловой системы и учетной записи samba для аутентификации подключающихся пользователей.
Если используется параметр passdb backend = tdbsam по умолчанию, samba хранит учетные записи пользователей в базе данных /var/lib/samba/private/passdb.tdb.
Процедура в этом разделе описывает, как создать локального пользователя samba с именем example.
Предварительные условия:
samba установлен и настроен как автономный сервер.
Процедура:
Создайте учетную запись операционной системы:
# useradd -M -s /sbin/nologin example
Эта команда добавляет пример учетной записи без создания домашнего каталога. Если учетная запись используется только для аутентификации в samba, назначьте команду /sbin/nologin в качестве командной строки, чтобы предотвратить локальный вход учетной записи.
Установите пароль для учетной записи операционной системы, чтобы включить его:
# passwd example
Enter new UNIX password: password
Retype new UNIX password: password
passwd: password updated successfully
samba не использует пароль, установленный в учетной записи операционной системы, для аутентификации. Однако необходимо установить пароль для включения учетной записи. Если учетная запись отключена, samba отказывает в доступе, если этот пользователь подключается.
Добавьте пользователя в базу данных samba и установите пароль для учетной записи:
# smbpasswd -a example
New SMB password: password
Retype new SMB password: password
Added user example.
Используйте этот пароль для аутентификации при использовании этой учетной записи для подключения к общему ресурсу samba.
Включите учетную запись samba:
# smbpasswd -e example
Enabled user example.
Понимание и настройка сопоставления samba ID#
Домены Windows различают пользователей и группы по уникальным идентификаторам безопасности (SID). Однако Linux требует уникальных идентификаторов UID и GID для каждого пользователя и группы. Если запущена samba как участник домена, служба winbindd отвечает за предоставление операционной системе информации о пользователях и группах домена.
Чтобы служба winbindd предоставляла уникальные идентификаторы для пользователей и групп в Linux, необходимо настроить сопоставление идентификаторов в файле /etc/samba/smb.conf для:
локальной базы данных (домен по умолчанию);
домена AD или NT4, членом которого является сервер samba;
каждого доверенного домена, из которого пользователи должны иметь доступ к ресурсам на этом сервере samba.
samba представляет различные интерфейсы сопоставления идентификаторов для конкретных конфигураций. Наиболее часто используемыми являются следующие (см. таблицу ниже):
Back end |
Use case |
|---|---|
tdb |
Thedefault domain only |
ad |
AD domains only |
rid |
AD and NT4 domains |
autorid |
AD, NT4, and thedefault domain |
Планирование диапазонов идентификаторов samba
Независимо от того, сохраняется ли UID и GID для Linux в AD или настраивается samba для их генерации, для каждой конфигурации домена требуется уникальный диапазон идентификаторов, который не должен перекрываться ни с одним из других доменов.
Предупреждение: Если будут установлены перекрывающиеся диапазоны идентификаторов, samba не сможет работать корректно. Можно назначить только один диапазон для каждого домена. Поэтому оставьте достаточно места между диапазонами доменов. Это позволяет расширить диапазон позже, если домен увеличится. Если позже домену будет назначен другой диапазон, права собственности на файлы и каталоги, ранее созданные этими пользователями и группами, будут потеряны.
Домен по умолчанию
В доменной среде можно добавлять одну конфигурацию сопоставления идентификаторов для каждого из следующих:
Домен, членом которого является сервер samba.
Каждый доверенный домен, который должен иметь доступ к серверу samba.
Однако для всех остальных объектов samba присваивает идентификаторы из домена по умолчанию. Это включает в себя:
Локальных пользователей и группы samba.
Встроенные учетные записи и группы samba, такие как BUILTIN\Administrators
Примечание: необходимо настроить домен по умолчанию, как описано в этом разделе, чтобы Samba работала правильно.
Серверная часть домена по умолчанию должна быть доступна для записи, чтобы постоянно сохранять назначенные идентификаторы.
Для домена по умолчанию можно использовать один из следующих внутренних интерфейсов:
tdb
При настройке домена по умолчанию для использования серверной части tdb задайте диапазон идентификаторов, достаточно большой, чтобы включать объекты, которые будут созданы в будущем и не будут являться частью сопоставления идентификаторов домена.
Например, установите следующее в разделе [global] в файле /etc/samba/smb.conf:
idmap config * : backend = tdb
idmap config * : range = 10000-999999
autorid
Когда настраивается домен по умолчанию для использования серверной части autorid, добавление дополнительных идентификаторов для доменов необязательно.
Например, установите следующее в разделе [global] в файле /etc/samba/smb.conf:
idmap config * : backend = autorid
idmap config * : range = 10000-999999
Использование серверной части отображения идентификатора tdb
Служба winbindd по умолчанию использует серверную часть сопоставления идентификаторов tdb с возможностью записи для хранения таблиц идентификаторов безопасности (SID), UID и GID. Сюда входят локальные пользователи, группы и встроенные участники.
Используйте этот серверный интерфейс только для домена * по умолчанию. Например:
idmap config * : backend = tdb
idmap config * : range = 10000-999999
Использование серверной части сопоставления идентификатора объявления
В этом разделе описывается, как настроить участника samba AD для использования серверной части сопоставления идентификаторов объявлений.
Серверная часть ad ID mapping реализует API, доступный только для чтения, для считывания информации об учетной записи и группе из AD. Это обеспечивает следующие преимущества:
Кроме того, все настройки пользователей и групп хранятся централизованно.
Идентификаторы пользователей и групп согласованы на всех серверах samba, которые используют этот серверный интерфейс.
Идентификаторы не хранятся в локальной базе данных, которая может быть повреждена, и поэтому права собственности на файлы не могут быть потеряны.
Примечание: Серверная часть сопоставления идентификаторов ad не поддерживает домены Active Directory с односторонним доверием. Если идет настройка участника домена в Active Directory с односторонним доверием, используйте вместо этого один из следующих интерфейсов сопоставления идентификаторов: tdb, rid или autorid.
Серверная часть ad считывает из AD следующие атрибуты (см. таблицу ниже):
D attribute name |
Object type |
Mapped to |
|---|---|---|
sAMAccountName |
User and group |
User or group name, depending on the object |
uidNumber |
User |
User ID (UID) |
gidNumber |
Group |
Group ID (GID) |
loginShell [a] |
User |
Path to the shell of the user |
unixHomeDirectory [b] |
User |
Path to the home directory of the user |
primaryGroupID [c] |
User |
Primary group ID |
[a] loginShell - оболочка входа samba, samba считывает этот атрибут только в том случае, если задан ДОМЕН конфигурации idmap:unix_nss_info = yes. [b] unixHomeDirectory - оболочка входа в samba [c] primaryGroupID - samba считывает этот атрибут только в том случае, если установлен домен конфигурации idmap:unix_primary_group = yes.
Предварительные условия:
Как пользователи, так и группы должны иметь уникальные идентификаторы, установленные в AD, и идентификаторы должны находиться в пределах диапазона, настроенного в файле /etc/samba/smb.conf. Объекты, идентификаторы которых находятся за пределами диапазона, не будут доступны на сервере Samba.
Пользователи и группы должны иметь все необходимые атрибуты, установленные в AD. Если требуемые атрибуты отсутствуют, пользователь или группа не будут доступны на сервере Samba. Требуемые атрибуты зависят от конфигурации.
Предварительные условия:
Установлена samba.
Конфигурация samba, за исключением сопоставления идентификаторов, существует в файле /etc/samba/smb.conf.
Процедура:
Отредактируйте раздел [global] в файле /etc/samba/smb.conf:
Добавьте конфигурацию сопоставления идентификаторов для домена по умолчанию
*, если он не существует. Например:
idmap config * : backend = tdb
idmap config * : range = 10000-999999
Включите серверную часть сопоставления идентификаторов объявлений для домена AD:
idmap config DOMAIN : backend = ad
Задайте диапазон идентификаторов, назначаемых пользователям и группам в домене AD. Например:
idmap config DOMAIN : range = 2000000-2999999
Примечание: Диапазон не должен перекрываться с какой-либо другой конфигурацией домена на этом сервере. Кроме того, диапазон должен быть установлен достаточно большим, чтобы включать все идентификаторы, назначенные в будущем.
Задайте значение, чтобы samba использовала схему RFC 2307 при чтении атрибутов из AD:
idmap config DOMAIN : schema_mode = rfc2307
Чтобы разрешить samba считывать оболочку входа в систему и путь к домашнему каталогу пользователей из соответствующего атрибута AD, установите:
idmap config DOMAIN : unix_nss_info = yes
В качестве альтернативы можно задать единый для всего домена путь к домашнему каталогу и оболочку входа, которая применяется ко всем пользователям. Например:
template shell = /bin/bash
template homedir = /home/%U
По умолчанию samba использует primaryGroupID атрибут объекта user в качестве основной группы пользователя в Linux. В качестве альтернативы можно настроить samba на использование значения, установленного в атрибуте gidNumber, вместо этого:
idmap config DOMAIN : unix_primary_group = yes
Проверьте /etc/samba/smb.conf файл:
# testparm
Перезагрузите конфигурацию samba:
# smbcontrol all reload-config
Использование серверной части сопоставления идентификаторов rid
В этом разделе описывается, как настроить участника домена samba для использования серверной части сопоставления идентификаторов rid.
samba может использовать относительный идентификатор (RID) SID Windows для создания идентификатора в SberLinux.
Примечание: RID - это последняя часть SID. Например, если SID пользователя равен S-1-5-21-5421822485-1151247151-421485315-30014, тогда 30014 - это соответствующий RID.
Серверная часть сопоставления идентификаторов rid реализует API, доступный только для чтения, для вычисления информации об учетной записи и группе на основе алгоритмической схемы сопоставления для доменов AD и NT4. Когда идет настройка серверной части, необходимо установить самый низкий и самый высокий RID в idmap config DOMAIN : range параметре. samba не будет сопоставлять пользователей или группы с более низким или более высоким RID, чем задано в этом параметре.
Примечание: Как серверная часть, доступная только для чтения, rid не может назначать новые идентификаторы, например, для встроенных групп. Поэтому не используйте этот серверный интерфейс для домена * по умолчанию.
Преимущества использования серверной части rid
Все пользователи и группы домена, у которых есть RID в пределах настроенного диапазона, автоматически доступны для участника домена.
Не нужно вручную назначать идентификаторы, домашние каталоги и оболочки входа.
Недостатки использования серверной части rid
Всем пользователям домена назначается одна и та же оболочка входа и домашний каталог. Однако можно использовать переменные.
Идентификаторы пользователей и групп одинаковы для всех членов домена samba, только если все они используют серверную часть rid с одинаковыми настройками диапазона идентификаторов.
Не получится исключить доступность отдельных пользователей или групп для участника домена. Исключаются только пользователи и группы за пределами настроенного диапазона.
Основываясь на формулах, которые служба winbindd использует для вычисления идентификаторов, повторяющиеся идентификаторы могут возникать в многодоменных средах, если объекты в разных доменах имеют одинаковый RID.
Предварительные условия:
samba установлена.
Конфигурация samba, за исключением сопоставления идентификаторов, существует в файле /etc/samba/smb.conf.
Процедура:
Отредактируйте раздел [global] в файле /etc/samba/smb.conf:
Добавьте конфигурацию сопоставления идентификаторов для домена по умолчанию
*, если он не существует. Например:
idmap config * : backend = tdb
idmap config * : range = 10000-999999
Включите серверную часть сопоставления идентификаторов rid для домена:
idmap config DOMAIN : backend = rid
Установите диапазон, который достаточно велик, чтобы включить все RID, назначенные в будущем. Например:
idmap config DOMAIN : range = 2000000-2999999
samba игнорирует пользователей и группы, чьи RID в этом домене не входят в диапазон.
Примечание: Диапазон не должен перекрываться с какой-либо другой конфигурацией домена на этом сервере. Кроме того, диапазон должен быть установлен достаточно большим, чтобы включать все идентификаторы, назначенные в будущем. Дополнительные сведения см. в разделе «Планирование диапазонов идентификаторов samba».
Задайте оболочку и путь к домашнему каталогу, которые будут назначены всем подключенным пользователям. Например:
template shell = /bin/bash
template homedir = /home/%U
Проверьте файл /etc/samba/smb.conf:
# testparm
Перезагрузите конфигурацию samba:
# smbcontrol all reload-config
Использование серверной части сопоставления идентификаторов autorid
В этом разделе описывается, как настроить участника домена samba для использования серверной части autorid сопоставления идентификаторов.
Серверная часть autorid работает аналогично серверной части rid сопоставления идентификаторов, но может автоматически назначать идентификаторы для разных доменов. Это позволяет использовать autorid серверную часть в следующих ситуациях:
Только для домена по умолчанию.
Для домена по умолчанию и дополнительных доменов, без необходимости создавать конфигурации сопоставления идентификаторов для каждого из дополнительных доменов.
Только для определенных доменов.
Примечание: Если используется autorid для домена по умолчанию, добавление дополнительной конфигурации сопоставления идентификаторов для доменов необязательно.
Преимущества использования серверной части autorid
Все пользователи и группы домена, чьи вычисленные UID и GID находятся в пределах настроенного диапазона, автоматически доступны для участника домена.
Не нужно вручную назначать идентификаторы, домашние каталоги и оболочки входа.
Никаких повторяющихся идентификаторов, даже если несколько объектов в многодоменной среде имеют один и тот же RID.
Недостатки использования серверной части autorid
Идентификаторы пользователей и групп не совпадают у всех членов домена samba.
Всем пользователям домена назначается одинаковая оболочка входа и домашний каталог. Однако можно использовать переменные.
Не получится исключить доступность отдельных пользователей или групп в члене домена. Исключаются только пользователи и группы, вычисляемый UID или GID которых находится за пределами настроенного диапазона.
Предварительные условия:
samba установлена.
Конфигурация samba, за исключением сопоставления идентификаторов, существует в файле /etc/samba/smb.conf.
Процедура:
Отредактируйте [global]раздел в файле /etc/samba/smb.conf:
Включите серверную часть autorid сопоставления идентификаторов
*для домена по умолчанию:
idmap config * : backend = autorid
Задайте диапазон, который достаточно велик, чтобы назначить идентификаторы для всех существующих и будущих объектов. Например:
idmap config * : range = 10000-999999
samba игнорирует пользователей и группы, чьи вычисляемые идентификаторы в этом домене не входят в диапазон.
Предупреждение: После того, как установлен диапазон и samba начнет его использовать, можно увеличить только верхний предел диапазона. Любое другое изменение диапазона может привести к назначению новых идентификаторов и к потере прав собственности на файлы.
При необходимости задайте размер диапазона. Например:
idmap config * : rangesize = 200000
samba присваивает это количество непрерывных идентификаторов для каждого объекта домена до тех пор, пока не будут приняты все идентификаторы из диапазона, заданного в idmap config * : range параметре.
Примечание: Если установлен размер диапазона, необходимо соответствующим образом адаптировать диапазон. Диапазон должен быть кратен размеру диапазона.
Задайте оболочку и путь к домашнему каталогу, которые будут назначены всем сопоставленным пользователям. Например:
template shell = /bin/bash
template homedir = /home/%U
При необходимости добавьте дополнительную конфигурацию сопоставления идентификаторов для доменов. Если конфигурация для отдельного домена недоступна, samba вычисляет идентификатор, используя внутренние настройки autorid в ранее настроенном *домене по умолчанию.
Проверьте файл /etc/samba/smb.conf:
# testparm
Перезагрузите конфигурацию samba:
# smbcontrol all reload-config
Настройка samba в качестве рядового сервера домена AD#
Если используется домен AD или NT4, используйте samba для добавления сервера SberLinux в качестве участника домена, чтобы получить следующее:
Доступ к ресурсам домена на других членах домена.
Аутентификация пользователей домена в локальных службах, таких как sshd.
Общий доступ к каталогам и принтерам, размещенным на сервере, для работы в качестве сервера файлов и печати.
Присоединение системы SberLinux к домену AD
samba Winbind - это альтернатива демону служб безопасности системы (SSSD) для подключения системы SberLinux к Active Directory (AD). В этом разделе описывается, как подключить систему SberLinux к домену AD с помощью realmd для настройки samba Winbind.
Процедура:
Если для AD требуется устаревший тип шифрования RC4 для аутентификации Kerberos, включите поддержку этих шифров в SberLinux:
# update-crypto-policies --set DEFAULT:AD-SUPPORT
Установите следующие пакеты:
# yum install realmd oddjob-mkhomedir oddjob samba-winbind-clients \samba-winbind samba-common-tools samba-winbind-krb5-locator
Чтобы предоставить общий доступ к каталогам или принтерам на члене домена, установите samba пакет:
# yum install samba
Создайте резервную копию существующего файла конфигурации Samba /etc/samba/smb.conf Samba:
# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
Подключитесь к домену. Например, чтобы присоединиться к домену с именем ad.example.ru:
# realm join --membership-software=samba --client-software=winbind ad.example.ru
Используя предыдущую команду, утилита realm автоматически совершает следующие процедуры:
Добавляет модуль winbind для поиска пользователей и групп в файл /etc/nsswitch.conf;
Обновляет файлы конфигурации подключаемого модуля аутентификации (PAM) в каталоге /etc/pam.d/;
Запускает службу winbind и позволяет службе запускаться при загрузке системы.
При необходимости задайте альтернативный серверный интерфейс сопоставления идентификаторов или индивидуальные параметры сопоставления идентификаторов в файле /etc/samba/smb.conf.
Убедитесь, что служба winbind запущена:
**# systemctl status winbind**
...
Active: active (running) since Tue 2018-11-06 19:10:40 CET; 15s ago
Примечание: Чтобы разрешить samba запрашивать информацию о пользователях домена и группах, перед запуском smb должна быть запущена служба winbind.
Если установлен пакет samba для совместного использования каталогов и принтеров, включите и запустите службу smb:
# systemctl enable --now smb
При необходимости, если проверяется подлинность локальных учетных записей в Active Directory, включите подключаемый модуль winbind_krb5_localauth.
Этапы проверки:
Отобразите сведения о пользователе рекламы, например учетную запись администратора рекламы в домене рекламы:
# getent passwd "AD\administrator"
AD\administrator:*:10000:10000::/home/administrator@AD:/bin/bash
Запросите членов группы пользователей домена в домене AD:
# getent group "AD\Domain Users"
AD\domain users:x:10000:user1,user2
При необходимости убедитесь, что можно использовать пользователей и группы домена при настройке разрешений для файлов и каталогов. Например, чтобы установить владельца /srv/samba/example.txt файл в AD\administrator и группу в AD\Domain Users:
# chown "AD\administrator":"AD\Domain Users" /srv/samba/example.txt
Убедитесь, что проверка подлинности Kerberos работает должным образом:
На части домена AD получите тикет на AD:/bin/bash:
# kinit administrator@AD.EXAMPLE.RU
Отобразите кешированный тикет Kerberos:
# klist
Ticket cache: KCM:0
Default principal: administrator@AD.EXAMPLE.COM
Valid starting Expires Service principal
01.11.2018 10:00:00 01.11.2018 20:00:00 krbtgt/AD.EXAMPLE.COM@AD.EXAMPLE.COM
renew until 08.11.2018 05:00:00
Отобразите доступные домены:
# wbinfo --all-domains
BUILTIN
SAMBA-SERVER
AD
Использование подключаемого модуля локальной авторизации для MIT Kerberos
Служба winbind предоставляет пользователям Active Directory доступ к члену домена. В определенных ситуациях администраторы хотят разрешить пользователям домена проходить аутентификацию в локальных службах, таких как SSH-сервер, которые запущены на члене домена. При использовании Kerberos для аутентификации пользователей домена включите подключаемый модуль winbind_krb5_localauth для корректного сопоставления участников Kerberos с учетными записями Active Directory через службу winbind.
Например, если для атрибута sAMAccountName пользователя Active Directory установлено значение EXAMPLE и пользователь пытается войти в систему с именем пользователя в нижнем регистре, Kerberos возвращает имя пользователя в верхнем регистре. Как следствие, записи не совпадают, и аутентификация завершается ошибкой.
Используя подключаемый модуль winbind_krb5_localauth, имена учетных записей отображаются правильно. Обратите внимание, что это относится только к аутентификации GSSAPI, а не к получению первоначального тикета, предоставляющего тикет (TGT).
Предварительные условия:
samba настроен как член Active Directory.
SberLinux проверяет подлинность попыток входа в систему с помощью Active Directory.
Служба winbind запущена.
Процедура:
Отредактируйте файл /etc/krb5.conf и добавьте следующий раздел:
[plugins]
localauth = {
module = winbind:/usr/lib64/samba/krb5/winbind_krb5_localauth.so
enable_only = winbind
}
Включение типа шифрования AES в Active Directory с помощью объекта групповой политики
В этом разделе описывается, как включить тип шифрования AES в Active Directory (AD) с помощью объекта групповой политики (GPO). Для некоторых функций SberLinux, таких, как запуск сервера samba на клиенте IdM, требуется этот тип шифрования.
Предварительные условия:
Получен AD пользователь, который может редактировать групповые политики.
Установлена консоль управления групповой политикой.
Процедура:
Откройте консоль управления групповой политикой.
Нажмите правой кнопкой мыши политику домена по умолчанию и выберите Изменить. Откроется редактор управления групповой политикой.
Перейдите в раздел Конфигурация компьютера → Политики → Настройки Windows → Параметры безопасности → Локальные политики → Параметры безопасности.
Дважды нажмите Сетевая безопасность: где настройте типы шифрования, разрешенные для политики Kerberos.
Выберите AES256_HMAC_SHA1 и, при необходимости, выберите будущие типы шифрования.
Нажмите кнопку ОК.
Закройте редактор управления групповой политикой.
Повторите действия для политики контроллера домена по умолчанию.
Подождите, пока контроллеры домена Windows (DC) автоматически не применят групповую политику. В качестве альтернативы, чтобы применить объект групповой политики вручную к контроллеру домена, введите следующую команду, используя учетную запись с правами администратора:
C:\ gpupdate /force /target:computer
Настройка общего файлового ресурса samba, использующего списки управления доступом POSIX#
Как служба Linux, samba поддерживает общие ресурсы с ACL POSIX. Они позволяют управлять разрешениями локально на сервере samba с помощью утилит, таких как chmod. Если общий ресурс хранится в файловой системе, поддерживающей расширенные атрибуты, можно определить списки управления доступом для нескольких пользователей и групп.
Добавление общего ресурса, использующего списки контроля доступа POSIX
В этом разделе описывается, как создать общий ресурс с именем example, который предоставляет содержимое каталога /srv/samba/example/ и использует списки управления доступом POSIX.
Предварительные условия:
samba была настроена в одном из следующих режимов, как:
Автономный сервер;
Член домена.
Процедура:
Создайте папку, если она не существует. Например:
# mkdir -p /srv/samba/example/
Если необходимо запустить SELinux в принудительном режиме, установите контекст samba_share_t в каталоге:
# semanage fcontext -a -t samba_share_t "/srv/samba/example(/.*)?"
# restorecon -Rv /srv/samba/example/
Установите списки управления доступом файловой системы в каталоге.
Добавьте пример общего доступа в файл /etc/samba/smb.conf. Например, чтобы добавить общий ресурс с поддержкой записи:
[example]
path = /srv/samba/example/
read only = no
Примечание: Независимо от списков управления доступом файловой системы; если не установите значение read only = no, samba совместно использует каталог в режиме только для чтения.
Проверьте файл /etc/samba/smb.conf:
# testparm
Откройте необходимые порты и перезагрузите конфигурацию межсетевого экрана с помощью утилиты firewall-cmd:
# firewall-cmd --permanent --add-service=samba
# firewall-cmd --reload
Перезапустите службу smb:
# systemctl restart smb
Настройка стандартных списков ACL Linux для общего ресурса samba, использующего списки ACL POSIX
Стандартные списки управления доступом в Linux поддерживают настройку разрешений для одного владельца, одной группы и для всех других неопределенных пользователей. Можно использовать утилиты chown, chgrp и chmod для обновления списков управления доступом. Если требуется точный контроль, то используйте более сложные списки управления доступом POSIX.
Следующая процедура устанавливает владельца каталога /srv/samba/example/ пользователем root, предоставляет права на чтение и запись группе пользователей домена и запрещает доступ всем остальным пользователям.
Предварительные условия:
Общий ресурс samba, для которого необходимо установить списки управления доступом, существует.
Процедура:
# chown root:"Domain Users" /srv/samba/example/
# chmod 2770 /srv/samba/example/
Примечание: Включение бита set-group-ID (SGID) в каталоге автоматически устанавливает группу по умолчанию для всех новых файлов и подкаталогов на группу каталога, вместо обычного поведения, когда она устанавливается в основную группу пользователя, создавшего новую запись каталога.
Настройка расширенных списков контроля доступа для общего ресурса samba, использующего списки контроля доступа POSIX
Если файловая система, в которой хранится общий каталог, поддерживает расширенные списки управления доступом, можно использовать их для установки сложных разрешений. Расширенные списки управления доступом могут содержать разрешения для нескольких пользователей и групп.
Расширенные списки управления доступом POSIX позволяют настраивать сложные списки управления доступом для нескольких пользователей и групп. Однако можно установить только следующие разрешения:
Нет доступа;
Доступ на чтение;
Доступ на запись;
Полный контроль.
Если требуются детализированные разрешения Windows, такие, как создание папки/добавление данных, настройте общий ресурс на использование списков управления доступом Windows. Смотрите раздел Настройка общего ресурса, использующего списки управления доступом Windows.
Следующая процедура показывает, как включить расширенные списки управления доступом для общего ресурса. Кроме того, он содержит пример настройки расширенных списков управления доступом.
Предварительные условия:
Общий ресурс samba, для которого можно установить списки управления доступом, существует.
Процедура:
Включите следующий параметр в разделе общего ресурса в файле /etc/samba/smb.conf, чтобы включить наследование расширенных списков управления доступом:
inherit acls = yes
Перезапустите smb службу:
# systemctl restart smb
Установите списки управления доступом в каталоге. Например:
Пример. Настройка расширенных списков управления доступом
Следующая процедура устанавливает разрешения на чтение, запись и выполнение для группы администраторов домена, разрешения на чтение и выполнение для группы пользователей домена и запрещает доступ всем остальным в каталоге /srv/samba/example/:
Отключите автоматическое предоставление разрешений основной группе учетных записей пользователей:
# setfacl -m group::--- /srv/samba/example/
# setfacl -m default:group::--- /srv/samba/example/
Основная группа каталога дополнительно сопоставляется с основной группой динамического СОЗДАТЕЛЯ. Когда используете расширенные списки управления доступом POSIX на общем ресурсе samba, этот участник добавляется автоматически, и его не получится удалить.
Установите разрешения для каталога:
Предоставьте разрешения на чтение, запись и выполнение группе администраторов домена:
# setfacl -m group:"DOMAIN\Domain Admins":rwx /srv/samba/example/
Предоставьте разрешения на чтение и выполнение группе пользователей домена:
# setfacl -m group:"DOMAIN\Domain Users":r-x /srv/samba/example/
Установите разрешения для другой записи ACL, чтобы запретить доступ пользователям, которые не соответствуют другим записям ACL:
# setfacl -R -m other::--- /srv/samba/example/
Эти настройки применимы только к этому каталогу. В Windows эти списки управления доступом отображаются в режиме только для этой папки.
Чтобы разрешить наследование разрешений, установленных на предыдущем шаге, новыми объектами файловой системы, созданными в этом каталоге:
# setfacl -m default:group:"DOMAIN\Domain Admins":rwx /srv/samba/example/
# setfacl -m default:group:"DOMAIN\Domain Users":r-x /srv/samba/example/
# setfacl -m default:other::--- /srv/samba/example/
С этими настройками режим только для этой папки для участников установлен для этой папки, вложенных папок и файлов.
samba сопоставляет разрешения, установленные в процедуре, со следующими списками управления доступом Windows (см.таблицу ниже):
Основные разрешения |
Доступ |
Применяется к |
|---|---|---|
Domain\Domain Admins |
Full control |
This folder, subfolders и files |
Domain\Domain Users |
Read & execute |
This folder, subfolders и files |
Everyone [a] |
None |
This folder, subfolders и files |
owner (Unix User\owner) [b] |
Full control |
This folder only |
primary_group (Unix User\primary_group) [c] |
None |
This folder only |
CREATOR OWNER [d] [e] |
Full control |
Subfolders и files only |
CREATOR GROUP [f] [g] |
None |
Subfolders и files only |
[a] samba сопоставляет разрешения для этого участника с другой записью ACL.
[b] samba сопоставляет владельца каталога с этой записью.
[c] samba сопоставляет основную группу каталога с этой записью.
[d] Для новых объектов файловой системы создатель автоматически наследует разрешения этого участника.
[e] Пакет samba с владельцем acl creator, настраивающим или удаляющим этих участников из списков управления доступом, которые не поддерживаются на общих ресурсах, использующих списки управления доступом POSIX.
[f] Создатель и владелец acl samba win.
[g] Для новых объектов файловой системы основная группа создателя автоматически наследует разрешения этого участника.
Установка разрешений для общего ресурса, использующего списки управления доступом POSIX#
При желании, чтобы ограничить или предоставить доступ к общему ресурсу samba, можно установить определенные параметры в разделе общего ресурса в файле /etc/samba/smb.conf.
Примечание: Разрешения на основе общего доступа определяют, может ли пользователь, группа или хост получить доступ к общему ресурсу. Эти настройки не влияют на списки управления доступом файловой системы.
Используйте настройки на основе общих ресурсов для ограничения доступа к общим ресурсам, например, для запрета доступа с определенных хостов.
Предварительные условия:
Был настроен общий доступ к спискам управления доступом POSIX.
Настройка доступа к общему ресурсу на основе пользователей и групп
Управление доступом на основе пользователей и групп позволяет предоставлять или запрещать доступ к общему ресурсу определенным пользователям и группам.
Предварительные условия:
Общий ресурс samba, для которого можно установить пользовательский или групповой доступ, существует.
Процедура:
Например, чтобы разрешить всем членам группы пользователей домена доступ к общему ресурсу, в то время как доступ запрещен для учетной записи пользователя, добавьте следующие параметры в конфигурацию общего ресурса:
valid users = +DOMAIN\"Domain Users"
invalid users = DOMAIN\user
Параметр недопустимых пользователей имеет более высокий приоритет, чем параметр допустимых пользователей. Например, если учетная запись пользователя является членом группы пользователей домена, доступ к этой учетной записи запрещен при использовании предыдущего примера.
Перезагрузите конфигурацию samba:
# smbcontrol all reload-config
Настройка доступа к общему ресурсу на основе хоста
Управление доступом на основе хоста позволяет предоставлять или запрещать доступ к общему ресурсу на основе имен хостов клиента, IP-адресов или диапазона IP-адресов.
Следующая процедура объясняет, как включить IP-адрес 127.0.0.1, диапазон IP-адресов 192.0.2.0/24 и client1.example.ru хоста для доступа к общему ресурсу и дополнительно запретить доступ для client2.example.ru хоста:
Предварительные условия:
Общий ресурс samba, для которого можно установить доступ на основе хоста, существует.
Процедура:
Добавьте следующие параметры в конфигурацию общего ресурса в файле /etc/samba/smb.conf:
hosts allow = 127.0.0.1 192.0.2.0/24 client1.example.ru
hosts deny = client2.example.ru
Параметр hosts deny имеет более высокий приоритет, чем hosts allow. Например, если client1.example.ru разрешает IP-адрес, указанный в параметре hosts allow, доступ с этого хоста запрещен.
Перезагрузите конфигурацию samba:
# smbcontrol all reload-config
Настройка общего ресурса, использующего списки управления доступом Windows#
samba поддерживает настройку списков управления доступом Windows для общих ресурсов и объектов файловой системы. Это позволяет:
Использовать детализированные списки управления доступом Windows.
Управлять разрешениями на общий доступ и списками управления доступом файловой системы с помощью Windows.
В качестве альтернативы - настроить общий ресурс на использование списков управления доступом POSIX.
Предоставление привилегии SeDiskOperatorPrivilege
Только пользователи и группы, которым предоставлена привилегия SeDiskOperatorPrivilege, могут настраивать разрешения для общих ресурсов, использующих списки управления доступом Windows.
Процедура:
Например, чтобы предоставить привилегию SeDiskOperatorPrivilege группе DOMAIN\Domain Admins:
# net rpc rights grant "DOMAIN\Domain Admins" SeDiskOperatorPrivilege -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
Successfully granted rights.
Примечание: В доменной среде предоставьте права SeDiskOperatorPrivilege группе доменов. Это позволяет централизованно управлять привилегиями путем обновления членства пользователя в группе.
Чтобы перечислить всех пользователей и группы, которым предоставлены права SeDiskOperatorPrivilege:
# net rpc rights list privileges SeDiskOperatorPrivilege -U "DOMAIN\administrator"
Enter administrator's password:
SeDiskOperatorPrivilege:
BUILTIN\Administrators
DOMAIN\Domain Admins
Включение поддержки Windows ACL
Чтобы настроить общие ресурсы, поддерживающие списки управления доступом Windows, необходимо включить эту функцию в samba.
Предварительные условия:
Общий пользовательский ресурс настроен на сервере samba.
Процедура:
Чтобы включить его глобально для всех общих ресурсов, добавьте следующие настройки в раздел [global] файла /etc/samba/smb.conf:
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
В качестве альтернативы можно включить поддержку ACL Windows для отдельных общих ресурсов, добавив вместо этого те же параметры в раздел общего ресурса.
Перезапустите службу smb:
# systemctl restart smb
Добавление общего ресурса, использующего списки управления доступом Windows
В этом разделе описывается, как создать общий ресурс с именем example, который совместно использует содержимое каталога /srv/samba/example/ и использует списки управления доступом Windows.
Процедура:
Создайте папку, если она не существует. Например:
# mkdir -p /srv/samba/example/
Если запущен SELinux в принудительном режиме, установите контекст samba_share_t в каталоге:
# semanage fcontext -a -t samba_share_t "/srv/samba/example(/.*)?"
# restorecon -Rv /srv/samba/example/
Добавьте пример общего доступа в файл /etc/samba/smb.conf. Например, добавьте общий ресурс с поддержкой записи:
[example]
path = /srv/samba/example/
read only = no
Примечание: Независимо от списков управления доступом файловой системы; если не установите значение read only = no, samba совместно использует каталог в режиме только для чтения.
Если не включена поддержка ACL Windows в [global] разделе для всех общих ресурсов, добавьте следующие параметры в [example] раздел, чтобы включить эту функцию для этого общего ресурса:
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
Проверьте файл /etc/samba/smb.conf:
# testparm
Откройте необходимые порты и перезагрузите конфигурацию межсетевого экрана с помощьюfirewall-cmd утилиты:
# firewall-cmd --permanent --add-service=samba
# firewall-cmd --reload
Перезапустите службу smb:
# systemctl restart smb
Управление разрешениями общего доступа и ACL файловой системы для общего ресурса, использующего ACL Windows
Управление разрешениями общего ресурса и списками управления доступом файловой системы общего ресурса, использующего списки управления доступом Windows Чтобы управлять разрешениями общего доступа и списками управления доступом к файловой системе на общем ресурсе samba, использующем списки управления доступом Windows, используйте приложения Windows, такие, как Управление компьютером. Дополнительные сведения см. в документации Windows. В качестве альтернативы используйте утилиту smbcacls для управления списками доступа.
Примечание: Чтобы изменить разрешения файловой системы в Windows, необходимо использовать учетную запись, которой предоставлена привилегия SeDiskOperatorPrivilege.
Управление ACL на общем ресурсе SMB с помощью smbcacls#
Утилита smbcacls может перечислять, устанавливать и удалять списки управления доступом для файлов и каталогов, хранящихся на общем ресурсе SMB. Можно использовать smbcacls для управления ACL файловой системы:
На локальном или удаленном сервере samba, использующем расширенные списки управления доступом Windows или POSIX ACL.
В SberLinux для удаленного управления списками доступа к общему ресурсу, размещенному в Windows.
Записи контроля доступа
Каждая запись ACL объекта файловой системы содержит записи управления доступом (ACE) в следующем формате:
security_principal:access_right/inheritance_information/permissions
Пример. Записи для контроля доступа
Если у группы пользователей AD\Domain есть разрешения на изменение, которые применяются к этой папке, вложенным папкам и файлам в Windows, список доступа содержит следующий ACE:
AD\Domain Users:ALLOWED/OI|CI/CHANGE
ACE содержит следующие части:
Участник безопасности
Участник безопасности - это пользователь, группа или SID, к которым применяются разрешения в списке управления доступом.
Право доступа
Право доступа определяет доступ к объекту: предоставлен или запрещен.
Значение может быть РАЗРЕШЕНО или ОТКЛОНЕНО.
Информация о наследовании
Осуществляет следующие значения, представленные в таблице ниже:
Таблица. Значения наследования
Описание |
Значение |
Сопоставляется с |
|---|---|---|
Object Inherit |
OI |
This folder and files |
Container Inherit |
CI |
This folder and subfolders |
Inherit Only |
IO |
The ACE does not apply to the current file or directory |
Inherited |
ID |
The ACE was inherited from the parent directory |
Кроме того, значения могут быть объединены следующим образом, как представлено в таблице ниже:
Таблица. Комбинации параметров наследования
Комбинации значений |
Сопоставления с Windows, котрые применяются к настройке |
|---|---|
OI |
CI |
OI |
CI |
CI |
IO |
OI |
IO |
Это значение может быть либо шестнадцатеричным значением, представляющим одно или несколько разрешений Windows, либо псевдонимом smbcacls:
Шестнадцатеричное значение, представляющее одно или несколько разрешений Windows.
В следующей таблице отображаются расширенные разрешения Windows и их соответствующее значение в шестнадцатеричном формате:
Таблица. Разрешения Windows и соответствующее им значение smbcacls в шестнадцатеричном формате
Разрешение Windows |
Шестнадцатеричное значение |
|---|---|
Full control |
0x001F01FF |
Traverse folder / execute file |
0x00100020 |
List folder / read data |
0x00100001 |
Read attributes |
0x00100080 |
Read extended attributes |
0x00100008 |
Create files / write data |
0x00100002 |
Create folders / append data |
0x00100004 |
Write attributes |
0x00100100 |
Write extended attributes |
0x00100010 |
Delete subfolders and files |
0x00100040 |
Delete |
0x00110000 |
Read permissions |
0x00120000 |
Change permissions |
0x00140000 |
Take ownership |
0x00180000 |
Несколько разрешений могут быть объединены в одно шестнадцатеричное значение с помощью побитовой операции.
Псевдоним smbcacls. В следующей таблице отображаются доступные псевдонимы:
Таблица. Существующие псевдонимы smbcacls и соответствующие им разрешения Windows
smbcacls alias |
Сопоставление с разрешением Windows |
|---|---|
R |
Read |
READ |
Read & execute |
W |
Special: |
D |
Delete |
P |
Change permissions |
O |
Take ownership |
X |
Traverse / execute |
CHANGE |
Modify |
FULL |
Full control |
Примечание: Можно комбинировать однобуквенные псевдонимы при настройке разрешений. Например, можно настроить RD на применение разрешения Windows на чтение и удаление. Однако не получится комбинировать несколько псевдонимов, состоящих из одной буквы, как и комбинировать псевдонимы и шестнадцатеричные значения.
Отображение ACL с помощью smbcacls
Чтобы отобразить списки управления доступом на общем ресурсе SMB, используйте утилиту smbcacls. Если запущен smbcacls без какого-либо параметра операции, такого как –add, утилита отображает ACL объекта filesystemobject.
Процедура:
Например, чтобы перечислить списки управления доступом корневого каталога общего ресурса //server/example:
# smbcacls //server/example / -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
REVISION:1
CONTROL:SR|PD|DI|DP
OWNER:AD\Administrators
GROUP:AD\Domain Users
ACL:AD\Administrator:ALLOWED/OI|CI/FULL
ACL:AD\Domain Users:ALLOWED/OI|CI/CHANGE
ACL:AD\Domain Guests:ALLOWED/OI|CI/0x00100021
Вывод команды отображает:
REVISION: Внутренняя редакция дескриптора безопасности Windows NT ACL
CONTROL
: Управление дескриптором безопасности
OWNER
: Имя или SID владельца дескриптора безопасности
GROUP
: имя или SID группы дескриптора безопасности
ACL. Дополнительные сведения см. в разделе Записи контроля доступа.
Расчет маски ACE
В большинстве ситуаций, когда добавляете или обновляете ACE, используете псевдонимы smbcacls, перечисленные в существующих псевдонимах smbcacls, и соответствующие им разрешения Windows.
Однако, если можно установить расширенные разрешения Windows, перечисленные в разделе Разрешения Windows, и соответствующее им значение smbcacls в шестнадцатеричном формате, необходимо использовать побитовую операцию ИЛИ для вычисления правильного значения. Можно использовать следующую команду командной строки для вычисления значения:
# echo $(printf '0x%X' $(( hex_value_1 | hex_value_2 | ... )))
Добавление, обновление и удаление ACL с помощью smbcacls
В зависимости от параметра, который передаете утилите smbcacls, можно добавлять, обновлять и удалять списки управления доступом из файла или каталога.
Добавление списка доступа
Чтобы добавить ACL в корень общего ресурса //server/example, который предоставляет разрешения на изменение для этой папки, вложенных папок и файлов группе пользователей AD\Domain:
# smbcacls //server/example / -U "DOMAIN\administrator --add ACL:"AD\Domain Users":ALLOWED/OI|CI/CHANGE
Обновление списка доступа аналогично добавлению нового списка доступа. Обновите ACL, переопределяя ACL с помощью параметра –modify с помощью существующего участника безопасности. Если smbcacls находит участника безопасности в списке ACL, утилита обновляет разрешения. В противном случае команда завершается с ошибкой:
ACL for SID principal_name not found
Например, чтобы обновить разрешения группы пользователей AD\Domain и настроить их на чтение для этой папки, вложенных папок и файлов:
# smbcacls //server/example / -U "DOMAIN\administrator --modify ACL:"AD\Domain Users":ALLOWED/OI|CI/READ
Удаление списка доступа
Чтобы удалить ACL, передайте параметр --delete с точным ACL утилите smbcacls. Например:
# smbcacls //server/example / -U "DOMAIN\administrator --delete ACL:"AD\Domain Users":ALLOWED/OI|CI/READ
Разрешение пользователям совместно использовать каталоги на сервере samba#
На сервере samba можно настроить, чтобы пользователи могли совместно использовать каталоги без прав root.
Включение функции обмена пользователями
Прежде чем пользователи смогут совместно использовать каталоги, администратор должен включить общие ресурсы пользователей в samba.
Например, чтобы разрешить только членам локальной группы примеров создавать общие ресурсы пользователей.
Процедура:
Создайте локальную группу примеров, если она не существует:
# groupadd example
Подготовьте каталог для samba для хранения определений общего доступа пользователя и правильно установите его разрешения. Например:
Создайте каталог:
# mkdir -p /var/lib/samba/usershares/
Установите разрешения на запись для группы примеров:
# chgrp example /var/lib/samba/usershares/
# chmod 1770 /var/lib/samba/usershares/
Установите фиксированный бит, чтобы запретить пользователям переименовывать или удалять файлы, хранящиеся другими пользователями в этом каталоге.
Отредактируйте файл /etc/samba/smb.conf и добавьте следующее в [global] раздел:
Задайте путь к каталогу, который настроен для хранения определений общего доступа пользователя. Например:
usershare path = /var/lib/samba/usershares/
Установите, сколько пользовательских общих ресурсов samba позволяет создавать на этом сервере. Например:
usershare max shares = 100
Если используете значение по умолчанию 0 для параметра usershare max shares, пользовательские общие ресурсы будут отключены.
При необходимости задайте список абсолютных путей к каталогам. Например, чтобы настроить, что samba разрешает общий доступ только к подкаталогам каталога /dataи /srv, установите:
usershare prefix allow list = /data /srv
Список дополнительных параметров, связанных с общим доступом пользователей, которые можно установить, см. в разделе USERSHARES на справочной странице smb.conf(5).
Проверьте файл /etc/samba/smb.conf:
# testparm
Перезагрузите конфигурацию samba:
# smbcontrol all reload-config
Пользователи могут создавать общие ресурсы пользователей.
Добавление пользовательского ресурса
После того как включена функция общего доступа к пользователям в samba, пользователи могут предоставлять общий доступ к каталогам на сервере samba без прав root, выполнив команду net usershare add.
Краткое описание команды добавления общего доступа к сети:
net usershare add share_name path [[ comment ] | [ ACLs ]] [ guest_ok=y|n ]
Примечание: Если установлены списки управления доступом при создании общего ресурса пользователя, необходимо указать параметр комментария перед списками управления доступом. Чтобы задать пустой комментарий, используйте пустую строку в двойных кавычках.
Обратите внимание, что пользователи могут разрешить гостевой доступ только к общему ресурсу пользователя, если администратор установил usershare allow guests = yes в разделе [global] в файле /etc/samba/smb.conf.
Отображение информации о существующих общих ресурсах пользователей
Пользователи могут ввести команду net usershare info на сервере samba для отображения общих ресурсов пользователей и их настроек.
Предварительные условия:
Общий пользовательский ресурс настраивается на сервере samba.
Процедура:
Для отображения всех пользовательских общих ресурсов, созданных любым пользователем:
$ net usershare info -l
[share_1]
path=/srv/samba/
comment=
usershare_acl=Everyone:R,host_name\user:F,
guest_ok=y
...
Чтобы перечислить только общие ресурсы, созданные пользователем, выполняющим команду, опустите параметр -l.
Чтобы отобразить только информацию о конкретных общих ресурсах, передайте команде название общего ресурса или подстановочные знаки. Например, для отображения информации об общих ресурсах, имя которых начинается с share_:
$ net usershare info -l share_
Список общих ресурсов пользователей
Если необходимо перечислить только доступные общие ресурсы пользователей без их настроек на сервере samba, используйте команду net usershare list.
Предварительные условия:
Общий пользовательский ресурс настраивается на сервере samba.
Процедура:
Чтобы перечислить общие ресурсы, созданные любым пользователем:
$ net usershare list -l
share_1
share_2
...
Чтобы перечислить только общие ресурсы, созданные пользователем, выполняющим команду, опустите параметр -l.
Чтобы перечислить только определенные общие ресурсы, передайте команде имя общего ресурса или подстановочные знаки. Например, чтобы перечислить только общие ресурсы, имя которых начинается с share_:
$ net usershare list -l share_
Удаление пользовательского ресурса
Чтобы удалить общий ресурс пользователя, используйте команду net usershare delete от имени пользователя, создавшего общий ресурс, или от имени пользователя root.
Предварительные условия:
Общий пользовательский ресурс настроен на сервере samba.
Процедура:
$ net usershare delete share_name
Настройка общего ресурса для разрешения доступа без аутентификации#
В определенных ситуациях можно предоставить общий доступ к каталогу, к которому пользователи могут подключаться без проверки подлинности. Чтобы настроить это, включите гостевой доступ к общему ресурсу.
Предупреждение: Общие ресурсы, не требующие аутентификации, могут представлять угрозу безопасности.
Включение гостевого доступа к общему ресурсу
Если на общем ресурсе включен гостевой доступ, samba сопоставляет гостевые подключения с учетной записью операционной системы, заданной в параметре гостевой учетной записи. Гостевые пользователи могут получить доступ к файлам на этом общем ресурсе, если выполняется хотя бы одно из следующих условий:
Учетная запись указана в списках управления доступом файловой системы.
Разрешения POSIX для других пользователей это позволяют.
Процедура:
Отредактируйте файл /etc/samba/smb.conf:
Если это первый гостевой общий ресурс, который настроен на этом сервере:
Установите для карты значение map to guest = Bad User в [global] разделе:
[global]
...
map to guest = Bad User
С помощью этого параметра samba отклоняет попытки входа в систему с использованием неправильного пароля, если только имя пользователя не существует. Если указанное имя пользователя не существует и гостевой доступ к общему ресурсу включен, samba рассматривает подключение как гостевой вход.
По умолчанию samba сопоставляет учетную запись гостя с учетной записью nobody в SberLinux. В качестве альтернативы можно создать другую учетную запись. Например:
[global]
...
guest account = user_name
Учетная запись, установленная в этом параметре, должна существовать локально на сервере samba. По соображениям безопасности SberLinux рекомендует использовать учетную запись, которой не назначена действительная оболочка.
Добавьте параметр guest ok = yes в раздел общего доступа [example]:
[example]
...
guest ok = yes
Проверьте файл /etc/samba/smb.conf:
# testparm
Перезагрузите конфигурацию samba:
# smbcontrol all reload-config
Настройка samba для клиентов macOS#
Модуль samba виртуальной файловой системы fruit (VFS) обеспечивает улучшенную совместимость с клиентами Apple server message block (SMB).
Оптимизация конфигурации samba для предоставления общего доступа к файлам для клиентов macOS
В этом разделе описывается, как настроить модуль fruit для всех общих ресурсов samba, размещенных на сервере, чтобы оптимизировать общие ресурсы samba для клиентов macOS.
Примечание: Рекомендуется включить модуль fruit глобально. Клиенты, использующие macOS, согласовывают расширения протокола Apple версии 2 блока сообщений сервера (SMB2) (AAPL), когда клиент устанавливает первое соединение с сервером. Если клиент сначала подключается к общему ресурсу без включенных расширений AAPL, клиент не использует расширения ни для какого общего ресурса сервера.
Предварительные условия:
samba настроен как файловый сервер.
Процедура:
Отредактируйте файл /etc/samba/smb.conf и включите модули fruit и streams_xattr VFS в разделе [global]:
vfs objects = fruit streams_xattr
Примечание: необходимо включить модуль fruit перед включением streams_xattr. Модуль fruit использует альтернативные потоки данных (ADS). По этой причине включите модуль streams_xattr.
Дополнительно, чтобы обеспечить поддержку macOS Time Machine в общем ресурсе, добавьте следующий параметр в конфигурацию общего ресурса в файле /etc/samba/smb.conf:
fruit:time machine = yes
Проверьте файл /etc/samba/smb.conf:
# testparm
Перезагрузите конфигурацию samba:
# smbcontrol all reload-config
Использование утилиты smbclient для доступа к общему ресурсу SMB#
Утилита smbclient позволяет получать доступ к общим файлам на сервере SMB аналогично FTP-клиенту командной строки. Можно использовать его, например, для загрузки файлов в общий ресурс и из него.
Предварительные условия:
Пакет samba-client установлен.
Как работает интерактивный режим smbclient
Например, для аутентификации в примере общего ресурса, размещенного на сервере, используя учетную запись 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 в скриптах.
Следующая процедура показывает, как подключиться к общему ресурсу SMB и загрузить файл из подкаталога.
Процедура:
Используйте следующую команду для подключения к форме, перейдите в каталог примеров, загрузите example.txt файл:
# smbclient -U DOMAIN\user_name //server_name/share_name -c "cd /example/ ; get example.txt ; exit"
Настройка samba в качестве сервера печати#
Если настроена samba в качестве сервера печати, клиенты в сети могут использовать samba для печати. Кроме того, клиенты Windows могут, если они настроены, загружать драйвер с сервера samba.
Предварительные условия:
samba была настроена в одном из следующих режимов:
Автономный сервер.
Участник домена.
Служба Samba spoolssd
Samba spoolss - это сервис, который интегрирован в службу smbd. Включите spoolss в конфигурации samba, чтобы значительно повысить производительность на серверах печати с большим количеством заданий или принтеров.
Без spoolssd служба samba разветвляет процесс smbd и инициализирует кеш printcap для каждого задания печати. В случае большого количества принтеров служба smbd может перестать отвечать на запросы в течение нескольких секунд во время инициализации кеша. Служба spoolssd позволяет запускать предварительно разветвленные процессы smbd, которые обрабатывают задания печати без каких-либо задержек. Основной процесс spoolss smbd использует небольшой объем памяти, а также разветвляет и завершает дочерние процессы.
Следующая процедура объясняет, как включить службу spoolss.
Процедура:
Отредактируйте раздел [global] в файле /etc/samba/smb.conf:
Добавьте следующие параметры:
rpc_server:spoolss = external
rpc_daemon:spoolssd = fork
При желании можно установить следующие параметры, как в таблице ниже:
Параметр |
Значение по умолчанию |
Описание |
|---|---|---|
spoolssd:prefork_min_children |
5 |
Minimum number of child processes |
spoolssd:prefork_max_children |
25 |
Maximum number of child processes |
spoolssd:prefork_spawn_rate |
5 |
Samba forks the number of new child processes set in this parameter, up to the value set in spoolssd:prefork_max_children, if a new connection is established |
spoolssd:prefork_max_allowed_clients |
100 |
Number of clients, a child process serves |
spoolssd:prefork_child_min_life |
60 |
Minimum lifetime of a child process in seconds. 60 seconds is the minimum. |
Проверьте файл /etc/samba/smb.conf:
# testparm
Перезапустите службу smb:
# systemctl restart smb
После перезапуска службы samba автоматически запускает дочерние smbd процессы:
# ps axf
...
30903 smbd
30912 \_ smbd
30913 \_ smbd
30914 \_ smbd
30915 \_ smbd
...
Включение поддержки сервера печати в samba
В этом разделе объясняется, как включить поддержку сервера печати в samba.
Процедура:
На сервере samba настройте CUPS и добавьте принтер в серверную часть CUPS. Дополнительные сведения о настройке принтеров в CUPS см. в документации, предоставленной в веб-консоли CUPS (https://print_server_host_name:631/help) на сервере печати.
Примечание: samba может пересылать задания печати в CUPS только в том случае, если CUPS установлен локально на сервере печати samba.
Отредактируйте файл /etc/samba/smb.conf:
Если необходимо включить службу spoolssd, добавьте следующие параметры в раздел [global]:
rpc_server:spoolss = external
rpc_daemon:spoolssd = fork
Чтобы настроить серверную часть печати, добавьте раздел [printers]:
[printers]
comment = All Printers
path = /var/tmp/
printable = yes
create mask = 0600
Примечание: Имя общего ресурса [printers] жестко задано и не может быть изменено.
Проверьте файл /etc/samba/smb.conf:
# testparm
Откройте необходимые порты и перезагрузите конфигурацию межсетевого экрана с помощью утилиты firewall-cmd:
# firewall-cmd --permanent --add-service=samba
# firewall-cmd --reload
Перезапустите службу smb:
# systemctl restart smb
После перезапуска службы samba автоматически предоставляет общий доступ ко всем принтерам, настроенным в серверной части CUPS. Если необходимо вручную предоставить общий доступ только к определенным принтерам, см. раздел Предоставление общего доступа к определенным принтерам вручную.
Общий доступ к определенным принтерам вручную
Если настроена samba в качестве сервера печати, по умолчанию samba предоставляет общий доступ ко всем принтерам, настроенным в серверной части CUPS. Следующая процедура объясняет, как предоставить общий доступ только к определенным принтерам.
Предварительные условия:
Сервер samba настроен как сервер печати
Процедура:
Отредактируйте файл /etc/samba/smb.conf:
В разделе [global] отключите автоматический общий доступ к принтеру, установив:
load printers = no
Добавьте раздел для каждого принтера, которым нужно поделиться. Например, чтобы предоставить общий доступ к принтеру с именем example в серверной части CUPS в качестве Example-Printer в samba, добавьте следующий раздел:
[Example-Printer]
path = /var/tmp/
printable = yes
printer name = example
Отдельные каталоги для каждого принтера не нужны. Можно задать в параметре path для принтера тот же каталог буфера обмена, что и в разделе [print$].
Проверьте /etc/samba/smb.conf файл:
# testparm
Перезагрузите конфигурацию samba:
# smbcontrol all reload-config
Настройка автоматической загрузки драйверов принтеров для клиентов Windows на серверах печати samba#
Если используется сервер печати samba для клиентов Windows, можно загрузить драйверы и предварительно настроить принтеры. Если пользователь подключается к принтеру, Windows автоматически загружает и устанавливает драйвер локально на клиенте. Пользователю не требуются права локального администратора для установки. Кроме того, Windows применяет предварительно настроенные параметры драйвера, такие как количество лотков.
Предварительные условия:
samba настроен как сервер печати
Основная информация о драйверах принтера
В этом разделе содержится общая информация о драйверах принтера.
Поддерживаемая версия модели драйвера
samba поддерживает только модель драйвера принтера версии 3, которая поддерживается в Windows 2000 и более поздних версиях, а также в Windows Server 2000 и более поздних версиях. samba не поддерживает модель драйвера версии 4, представленную в Windows 8 и Windows Server 2012. Однако эти и более поздние версии Windows также поддерживают драйверы версии 3.
Драйверы с поддержкой пакетов
samba не поддерживает драйверы с поддержкой пакетов.
Подготовка драйвера принтера к загрузке
Прежде чем загрузить драйвер на сервер печати samba:
Распакуйте драйвер, если он предоставлен в сжатом формате.
Для некоторых драйверов требуется запустить приложение установки, которое устанавливает драйвер локально на хост Windows. В определенных ситуациях программа установки извлекает отдельные файлы во временную папку операционной системы во время выполнения программы установки. Чтобы использовать файлы драйверов для загрузки:
Запустите программу установки.
Скопируйте файлы из временной папки в новое место.
Отмените установку. Обратитесь к производителю принтера за драйверами, поддерживающими загрузку на сервер печати.
Предоставление клиенту 32-разрядных и 64-разрядных драйверов для принтера
Чтобы предоставить драйвер для принтера как для 32-разрядных, так и для 64-разрядных клиентов Windows, необходимо загрузить драйвер с точно таким же именем для обеих архитектур. Например, если загружается 32-разрядный драйвер с именем Example PostScript и 64-разрядный драйвер с именем Example PostScript (v1.0), имена не совпадают. Следовательно, можно назначить принтеру только один из драйверов, и драйвер не будет доступен для обеих архитектур.
Предоставление пользователям возможности загружать и предварительно настраивать драйверы
Чтобы иметь возможность загружать и предварительно настраивать драйверы принтера, пользователю или группе необходимо предоставить привилегию SePrintOperatorPrivilege. Пользователь должен быть добавлен в группу администратора печати. SberLinux автоматически создает эту группу при установке пакета samba. Администратор печати Группе присваивается самый низкий доступный динамический системный идентификатор GID, который меньше 1000.
Процедура:
Например, чтобы предоставить привилегию SePrintOperatorPrivilege группе администраторов печати:
# net rpc rights grant "printadmin" SePrintOperatorPrivilege -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
Successfully granted rights.
Примечание: В доменной среде предоставьте SePrintOperatorPrivilegeгруппе доменов. Это позволяет централизованно управлять привилегиями путем обновления членства пользователя в группе.
Чтобы перечислить всех пользователей и группы, которым предоставлены привилегии SePrintOperatorPrivilege, выполните:
# net rpc rights list privileges SePrintOperatorPrivilege -U "DOMAIN\administrator"
Enter administrator's password:
SePrintOperatorPrivilege:
BUILTIN\Administrators
DOMAIN\printadmin
Настройка общего ресурса print$
Операционные системы Windows загружают драйверы принтера с общего ресурса с именем print$ с сервера печати. Это имя общего ресурса жестко задано в Windows и не может быть изменено.
Следующая процедура объясняет, как предоставить общий доступ к каталогу /var/lib/samba/drivers/ в качестве print$ и разрешить членам локальной группы printadmin загружать драйверы принтера.
Процедура:
Добавьте раздел [print$] в файл /etc/samba/smb.conf:
[print$]
path = /var/lib/samba/drivers/
read only = no
write list = @printadmin
force group = @printadmin
create mask = 0664
directory mask = 2775
Используйте эти настройки, когда:
Только члены группы printadmin могут загружать драйверы принтера в общий ресурс.
Группе вновь созданных файлов и каталогов будет присвоено значение printadmin.
Разрешения для новых файлов будут установлены на 664.
Разрешения для новых каталогов будут установлены на 2775.
Чтобы загружать только 64-разрядные драйверы для всех принтеров, включите этот параметр в раздел [global] в файле /etc/samba/smb.conf:
spoolss: architecture = Windows x64
Без этого параметра Windows отображает только драйверы, для которых загрузили 32-разрядную версию.
Проверьте файл /etc/samba/smb.conf:
# testparm
Перезагрузите конфигурацию samba
# smbcontrol all reload-config
Создайте группу printadmin, если она не существует:
# groupadd printadmin
Предоставьте группе printadmin привилегию SePrintOperatorPrivilege.
# net rpc rights grant "printadmin"
SePrintOperatorPrivilege
-U "DOMAIN\administrator"Enter DOMAIN\administrator's password:Successfully granted rights.
Если запускаете SELinux в принудительном режиме, установите контекст samba_share_t в каталоге:
# semanage fcontext -a -t samba_share_t "/var/lib/samba/drivers(/.)?"
# *restorecon -Rv /var/lib/samba/drivers/
Установите разрешения для каталога /var/lib/samba/drivers/:
Если используете списки управления доступом POSIX, установите:
# chgrp -R "printadmin" /var/lib/samba/drivers/
# chmod -R 2775 /var/lib/samba/drivers/
Если используете списки управления доступом Windows, установите (см. таблицу ниже):
Основное |
Доступ |
Применяется к |
|---|---|---|
CREATOR OWNER |
Full control |
Subfolders and files only |
Authenticated Users |
Read & execute, List folder contents, Read |
This folder, subfolders, and files |
printadmin |
Full control |
This folder, subfolders, and files |
Дополнительные сведения о настройке списков управления доступом в Windows см. в документации Windows.
Создание объекта групповой политики, чтобы клиенты могли доверять серверу печати samba.
По соображениям безопасности последние версии операционных систем Windows запрещают клиентам загружать драйверы принтера, не зависящие от пакетов, с ненадежного сервера. Если сервер печати является участником AD, можно создать объект групповой политики (GPO) в своем домене, чтобы доверять серверу samba.
Предварительные условия:
Сервер печати samba является членом домена AD.
Под управлением Windows, который используется для создания объекта групповой политики, должны быть установлены средства администрирования удаленного сервера Windows (RSAT).
Дополнительные сведения см. в документации Windows.
Процедура:
Войдите в систему с Windows, используя учетную запись, которой разрешено редактировать групповые политики, например пользователя AD domain Administrator.
Откройте консоль управления групповой политикой.
Нажмите правой кнопкой мыши на домене AD и выберите Create a GPO in this domain, and Link it here (Создать объект групповой политики в этом домене и связать его здесь). samba создаст новый объект групповой политики.

Рисунок. Создание объекта групповой политики в этом домене
Введите имя объекта групповой политики, например, устаревшую политику драйвера принтера, и нажмите кнопку ОК. Новый объект групповой политики будет отображаться под записью домена.
Нажмите правой кнопкой мыши на недавно созданном объекте групповой политики и выберите Edit, чтобы открыть редактор управления групповой политикой.
Перейдите в раздел Computer Configuration → Policies → Administrative Templates → Printers.
В правой части окна дважды нажмите Point and Print Restriction, чтобы отредактировать политику:
Включите политику и задайте следующие параметры:
Выберите пользователей, которые могут указывать и печатать только на эти серверы (Users can only point and print to these servers) и введите полное доменное имя (FQDN) сервера печати samba в поле рядом с этим параметром.
В разделе Security Prompts выберите Do not show warning or elevation prompt (Не показывать предупреждение или запрос на повышение прав).
Нажмите кнопку ОК.
Дважды нажмите пункт назначения пакета и серверы, одобренные для печати, чтобы отредактировать политику:
Включите политику и нажмите кнопку Show (Показать).
Введите полное доменное имя сервера печати samba.
Закройте окно Show Contents и окно свойств политики, нажав кнопку ОК.
Закройте редактор управления групповой политикой Group Policy Management Editor.
Закройте консоль управления групповой политикой Group Policy Management Console.
После того как участники домена Windows применили групповую политику, драйверы принтера автоматически загружаются с сервера samba при подключении пользователя к принтеру.
Загрузка драйверов и предварительная настройка принтеров
Используйте приложение управления печатью на клиенте Windows для загрузки драйверов и предварительной настройки принтеров, размещенных на сервере печати samba. Дополнительные сведения см. в документации Windows.
Запуск samba на сервере с включенным режимом FIPS#
В этом разделе представлен обзор ограничений запуска samba с включенным режимом FIPS.
Ограничения использования samba в режиме FIPS
Следующие режимы и функции samba работают в режиме FIPS при указанных условиях:
samba как член домена только в средах Active Directory (AD) или SberLinux Identity Management (IdM) с проверкой подлинности Kerberos, использующей шифры AES.
samba в качестве файлового сервера на члене домена Active Directory. Однако для этого требуется, чтобы клиенты использовали Kerberos для аутентификации на сервере.
Из-за повышенной безопасности FIPS следующие функции и режимы samba не работают, если включен режим FIPS:
Аутентификация NT LAN Manager (NTLM), поскольку шифры RC4 заблокированы;
Протокол серверного блока сообщений версии 1 (SMB1);
Режим автономного файлового сервера, поскольку он использует аутентификацию NTLM;
Контроллеры домена в стиле NT4;
Члены домена в стиле NT4;
Изменение пароля на сервере samba. Можно выполнять изменения пароля только с помощью Kerberos для контроллера домена Active Directory;
Следующая функция не тестируется в режиме FIPS и, следовательно, не поддерживается SberLinux:
Запуск samba в качестве сервера печати.
Использование samba в режиме FIPS
В этом разделе описывается, как включить режим FIPS на хосте SberLinux, на котором запущена samba.
Предварительные условия:
samba настроен на хосте SberLinux.
samba работает в режиме, который поддерживается в режиме FIPS.
Процедура:
Включите режим FIPS на SberLinux:
# fips-mode-setup --enable
Перезагрузите сервер:
# reboot
Используйте утилиту testparm для проверки конфигурации:
# testparm -s
Если команда отображает какие-либо ошибки или несовместимости, исправьте их, чтобы убедиться, что samba работает правильно.
Настройка производительности сервера samba#
В этой главе описывается, какие настройки могут повысить производительность samba в определенных ситуациях, а какие настройки могут оказать негативное влияние на производительность.
Предварительные условия:
samba настроен как файловый сервер или сервер печати.
Установка версии протокола SMB
Каждая новая версия SMB добавляет функции и улучшает производительность протокола. Последние операционные системы Windows и Windows Server всегда поддерживают последнюю версию протокола. Если samba также использует последнюю версию протокола, клиенты Windows, подключающиеся к samba, выигрывают от повышения производительности. В samba значение по умолчанию для протокола server max установлено на последнюю поддерживаемую стабильную версию протокола SMB.
Примечание: Чтобы всегда была включена последняя стабильная версия протокола SMB, не устанавливайте параметр server max protocol. Если параметр задается вручную, нужно изменять настройку с каждой новой версией протокола SMB, чтобы была включена последняя версия протокола.
Следующая процедура объясняет, как использовать значение по умолчанию в параметре протокола server max.
Процедура:
Удалите параметр протокола server max из раздела [global] в файле /etc/samba/smb.conf.
Перезагрузите конфигурацию samba.
# smbcontrol all reload-config
Настройка общих ресурсов с каталогами, содержащими большое количество файлов
Linux поддерживает имена файлов, чувствительные к регистру. По этой причине samba необходимо сканировать каталоги на наличие заглавных и строчных имен файлов при поиске или доступе к файлу. Можно настроить общий ресурс для создания новых файлов только в нижнем или верхнем регистре, что повышает производительность.
Предварительные условия:
samba настроен как файловый сервер
Процедура:
Переименуйте все файлы в общей папке в нижний регистр.
Примечание: Используя настройки в этой процедуре, файлы с именами, отличными от строчных, больше не будут отображаться.
Установите следующие параметры в разделе общего ресурса:
case sensitive = truedefault case = lowerpreserve case = noshort preserve case = no
Проверьте файл /etc/samba/smb.conf:
# testparm
Перезагрузите конфигурацию samba:
# smbcontrol all reload-config
После того как эти настройки применены, имена всех вновь созданных файлов на этом общем ресурсе будут написаны строчными буквами. Благодаря этим настройкам samba больше не нужно сканировать каталог на наличие прописных и строчных букв, что повышает производительность.
Настройки, которые могут негативно сказаться на производительности
По умолчанию ядро в SberLinux настроено на высокую производительность сети. Например, ядро использует механизм автоматической настройки размеров буфера. Установка параметра socket options в файле /etc/samba/smb.conf переопределяет эти настройки ядра. В результате установка этого параметра в большинстве случаев снижает производительность сети samba.
Чтобы использовать оптимизированные настройки из ядра, удалите параметр socket options из раздела [global] в /etc/samba/smb.conf.
Настройка samba для совместимости с клиентами, которым требуется версия SMB ниже версии по умолчанию.#
Samba использует разумное и безопасное значение по умолчанию для поддерживаемой ею версии минимального блока сообщений сервера (SMB).
Установка минимальной версии протокола SMB, поддерживаемой сервером samba
В Samba параметр протокола server min в файле /etc/samba/smb.confопределяет минимальную версию протокола блока сообщений сервера (SMB), поддерживаемую сервером samba. В этом разделе описывается, как изменить минимальную версию протокола SMB.
Предварительные условия:
Samba установлена и настроена.
Процедура:
Отредактируйте файл /etc/samba/smb.conf, добавьте параметр протокола сервера min и установите для параметра минимальную версию протокола SMB, которую должен поддерживать сервер. Например, чтобы установить минимальную версию протокола SMB на SMB3, добавьте:
server min protocol = SMB3
Перезапустите smb службу:
# systemctl restart smb
Часто используемые утилиты командной строки samba#
В этой главе описываются часто используемые команды при работе с сервером samba.
Использование команд net ads join и net rpc join
Используя подкоманду join утилиты net, можно присоединить samba к домену AD или NT4. Чтобы присоединиться к домену, необходимо вручную создать файл /etc/samba/smb.conf и при необходимости обновить дополнительные конфигурации, такие как PAM.
Процедура:
Вручную создайте файл /etc/samba/smb.conf со следующими настройками:
Для участника домена AD:
[global]workgroup = domain_namesecurity = adspassdb backend = tdbsamrealm = AD_REALM
Для участника домена NT4:
[global]workgroup = domain_namesecurity = userpassdb backend = tdbsam
Добавьте конфигурацию сопоставления идентификаторов для домена
*по умолчанию и для домена, к которому можно присоединиться, в раздел [global] в /etc/samba/smb.conf файле.Проверьте файл /etc/samba/smb.conf:
# testparm
Присоединитесь к домену в качестве администратора домена:
Чтобы присоединиться к рекламному домену:
# net ads join -U "DOMAIN\administrator"
Чтобы присоединиться к домену NT4:
# net rpc join -U "DOMAIN\administrator"
Добавьте источник winbind к записи базы данных passwd и group в /etc/nsswitch.conf файле:
passwd: files winbind
group: files winbind
Включите и запустите службу winbind:
# systemctl enable --now winbind
При необходимости настройте PAM с помощью утилиты authselect.
При необходимости для сред AD настройте клиент Kerberos.
Использование команды net rpc rights
В Windows можно назначить привилегии учетным записям и группам для выполнения специальных операций, таких как настройка списков доступа к общему ресурсу или загрузка драйверов принтера. На сервере samba можно использовать команду net rpc rights для управления привилегиями.
Список привилегий, которые можно установить
Чтобы перечислить все доступные привилегии и их владельцев, используйте команду список прав net rpc. Например:
# net rpc rights list -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
SeMachineAccountPrivilege **Add** machines to domain
SeTakeOwnershipPrivilege Take ownership of files or other objects
SeBackupPrivilege Back up files and directories
SeRestorePrivilege Restore files and directories
SeRemoteShutdownPrivilege Force shutdown from a remote system
SePrintOperatorPrivilege Manage printers
SeAddUsersPrivilege **Add** users and groups to the domain
SeDiskOperatorPrivilege Manage disk shares
SeSecurityPrivilege System security
Предоставление привилегий
Чтобы предоставить привилегии учетной записи или группе, используйте net rpc rights grant команду.
Например, предоставьте привилегию SePrintOperatorPrivilege группе DOMAIN\printadmin:
# net rpc rights grant "DOMAIN\printadmin" SePrintOperatorPrivilege -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
Successfully granted rights.
Аннулирование привилегий
Чтобы отозвать привилегии у учетной записи или группы, используйте net rpc rights revoke команду.
Например, чтобы отозвать привилегию SePrintOperatorPrivilege из группы DOMAIN\printadmin:
# net rpc rights remoke "DOMAIN\printadmin" SePrintOperatorPrivilege -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
Successfully revoked rights.
Использование команды net rpc share
Команда net rpc share предоставляет возможность перечислять, добавлять и удалять общие ресурсы на локальном или удаленном сервере samba или Windows.
Listing shares
Чтобы перечислить общие ресурсы на сервере SMB, используйте команду net rpc share list (список общих ресурсов). При необходимости передайте параметр -S server_name команде, чтобы перечислить общие ресурсы удаленного сервера. Например:
# net rpc share list -U "DOMAIN\administrator" -S server_name
Enter DOMAIN\administrator's password:
IPC$
share_1
share_2
...
Примечание: Общие ресурсы, размещенные на сервере samba, для которых в разделе /etc/samba/smb.confустановлено значение browseable = no, в выходных данных не отображаются.
Добавление общего ресурса
Команда добавления общего ресурса net rpc позволяет добавить общий ресурс на SMB-сервер.
Например, чтобы добавить общий ресурс с именем example на удаленном сервере Windows, который совместно использует C:\example\ каталог:
# net rpc share **Add** example="C:\example" -U "DOMAIN\administrator" -S server_name
Примечание: необходимо опустить конечную обратную косую черту в пути при указании имени каталога Windows.
Чтобы использовать команду для добавления общего ресурса на сервер samba:
Пользователь, указанный в параметре -U, должен иметь привилегию SeDiskOperatorPrivilege, предоставленную на целевом сервере.
Необходимо написать скрипт, который добавляет раздел общего доступа к файлу /etc/samba/smb.conf и перезагружает samba. Сценарий должен быть задан в параметре команды Add share в файле /etc/samba/smb.conf [global] раздела .
Удаление общего ресурса
Команда удаления общего ресурса net rpc позволяет удалить общий ресурс с сервера SMB.
Например, чтобы удалить общий ресурс с именем example с удаленного сервера Windows, выполните:
# net rpc share delete example -U "DOMAIN\administrator" -S server_name
Чтобы использовать команду для удаления общего ресурса с сервера samba:
Пользователю, указанному в параметре -U, должна быть предоставлена привилегия SeDiskOperatorPrivilege.
Должен быть написан скрипт, который удаляет раздел общего ресурса из файла /etc/samba/smb.conf и перезагружает samba. Сценарий должен быть установлен в параметре команды удаления общего доступа в файле /etc/samba/smb.conf [global] раздела.
Использование команды net user
Команда net user позволяет выполнять следующие действия с AD DC или NT4 PDC:
перечисление все учетные записи пользователей;
добавление пользователей;
удаление пользователей.
Примечание: Указание способа подключения, такого как ads для доменов AD или rpc для доменов NT4, требуется только при перечислении учетных записей пользователей домена. Другие связанные с пользователем подкоманды могут автоматически определять метод подключения.
Передайте команде параметр -U user_name, чтобы указать пользователя, которому разрешено выполнять запрошенное действие.
Список учетных записей пользователей домена
Отобразите список всех пользователей в домене AD:
# net ads user -U "DOMAIN\administrator"
Перечислите всех пользователей в домене NT4:
# net rpc user -U "DOMAIN\administrator"
Добавление учетной записи пользователя в домен
На участнике домена samba можно использовать команду net user add для добавления учетной записи пользователя в домен.
Например, добавьте учетную запись пользователя в домен.
Добавьте учетную запись:
# net user **Add** user password -U "DOMAIN\administrator"
User user added
При необходимости используйте оболочку удаленного вызова процедур (RPC), чтобы включить учетную запись в AD DC или NT4 PDC. Например:
# net rpc shell -U DOMAIN\administrator -S DC_or_PDC_name
Talking to domain DOMAIN (S-1-5-21-1424831554-512457234-5642315751)
net rpc user edit disabled user: no Set user's disabled flag from [yes] to [no]
net rpc exit
Удаление учетной записи пользователя из домена
На участнике домена samba можно использовать команду net user delete для удаления учетной записи пользователя из домена.
Например, чтобы удалить учетную запись пользователя из домена, выполните:
# net user delete user -U "DOMAIN\administrator"
User user deleted
Использование утилиты rpclient
Утилита rpcclient позволяет вручную выполнять функции удаленного вызова процедур Microsoft на стороне клиента (MS-RPC) на локальном или удаленном сервере SMB. Однако большинство функций интегрировано в отдельные утилиты, предоставляемые samba. Используйте rpcclient только для тестирования функций MS-PRC.
Предварительные условия:
Пакет samba-client установлен.
Например, можно использовать утилиту rpcclient для управления подсистемой спула принтера (SPOOLSS).
Пример. Назначение драйвера принтеру
# rpcclient server_name -U "DOMAIN\administrator" -c 'setdriver "printer_name" "driver_name"'
Enter DOMAIN\administrators password:
Successfully set printer_name to driver driver_name.
Использование приложения samba-regedit
Определенные настройки, такие как конфигурации принтера, хранятся в реестре на сервере samba. Можно использовать приложение samba-regedit на основе ncurses для редактирования реестра сервера samba.

Рисунок. Приложение samba-regedit на основе ncurses для редактирования реестра сервера Samba
Предварительные условия:
Пакет samba-client установлен.
Процедура:
Чтобы запустить приложение, введите:
# samba-regedit
Используйте следующие клавиши:
Курсор вверх и курсор вниз: Перемещайтесь по дереву реестра и значениям.
Enter: открывает ключ или редактирует значение.
Tab: Переключение между панелью ключей и значений.
Ctrl+C: закрывает приложение.
Использование утилиты smbcontrol
Утилита smbcontrol позволяет отправлять командные сообщения в smbd, nmbd, winbindd или во все эти службы. Эти управляющие сообщения предписывают службе, например, перезагрузить свою конфигурацию.
Процедура в этом разделе показывает, как перезагрузить конфигурацию служб smbd, nmbd, winbindd, отправив сообщение типа reload-config в пункт назначения all.
Предварительные условия:
Установлен samba-common-tools пакет.
Процедура:
# smbcontrol all reload-config
Использование утилиты smbpasswd
Утилита smbpasswd управляет учетными записями пользователей и паролями в локальной базе данных samba.
Предварительные условия:
Установлен пакет samba-common-tools.
Процедура:
Если запускаете команду от имени пользователя, smbpasswd изменяет пароль samba пользователя, который запускает команду. Например:
[user@server ~]$ smbpasswd
New SMB password: password
Retype new SMB password: password
Если запускаете smbpasswd от имени пользователя root, можно использовать утилиту, например, для:
создания нового пользователя:
[root@server ~]# smbpasswd -a user_name
New SMB password: password
Retype new SMB password: password
Added user user_name.
Примечание: Прежде чем добавить пользователя в базу данных samba, необходимо создать учетную запись в локальной операционной системе.
включения пользователя samba:
[root@server ~]# smbpasswd -e user_nameEnabled user user_name.
отключения пользователя samba:
[root@server ~]# smbpasswd -x user_nameDisabled user user_name
удаления пользователя:
[root@server ~]# smbpasswd -x user_name
Deleted user user_name.
Использование утилиты smbstatus
Утилита smbstatus сообщает:
о подключении по PID каждого демона smbd к серверу samba. Этот отчет включает имя пользователя, основную группу, версию протокола SMB, информацию о шифровании и подписи;
о соединении для каждого общего ресурса samba. Этот отчет включает в себя PID демона smbd, IP-адрес подключающейся машины, временную метку, когда было установлено соединение, информацию о шифровании и подписи;
о списке заблокированных файлов. Записи отчета содержат дополнительные сведения, такие как типы оппортунистических блокировок (oplock).
Предварительные условия:
Пакет samba установлен.
Служба smbd запущена.
Процедура:
# smbstatus
Samba version 4.15.2
PID Username Group Machine Protocol Version Encryption Signing
....-------------------------------------------------------------------------------------------------------------------------
963 DOMAIN\administrator DOMAIN\domain users client-pc (ipv4:192.0.2.1:57786) SMB3_02 - AES-128-CMAC
Service pid Machine Connected at Encryption Signing:
....---------------------------------------------------------------------------
example 969 192.0.2.1 Thu Nov 1 10:00:00 2018 CEST - AES-128-CMAC
Locked files:
Pid Uid DenyMode Access R/W Oplock SharePath Name Time
....--------------------------------------------------------------------------------------------------------
969 10000 DENY_WRITE 0x120089 RDONLY LEASE(RWH) /srv/samba/example file.txt Thu Nov 1 10:00:00 2018
Использование утилиты smbtar
Утилита smbtar создает резервные копии содержимого общего ресурса SMB или его подкаталога и сохраняет содержимое в архиве tar. В качестве альтернативы можно записать содержимое на ленточное устройство.
Предварительные условия:
Пакет samba-client установлен.
Процедура:
Используйте следующую команду для резервного копирования содержимого каталога demo на //server/example/ share и сохранения содержимого в архиве /root/example.tar:
# smbtar -s server -x example -u user_name -p password -t /root/example.tar
Использование утилиты wbinfo
Утилита wbinfo запрашивает и возвращает информацию, созданную и используемую winbindd службой.
Предварительные условия:
Установлен пакет samba-winbind-clients.
Процедура:
Можно использовать wbinfo для:
списка пользователей домена:
# wbinfo -u
AD\administrator
AD\guest
...
списка групп доменов:
# wbinfo -g
AD\domain computers
AD\domain admins
AD\domain users
...
отображения SID пользователя:
# wbinfo --name-to-sid="AD\administrator"
S-1-5-21-1762709870-351891212-3141221786-500 SID_USER (1)
отображения информации о доменах и доверенных лицах:
# wbinfo --trusted-domains --verbose
Domain Name DNS Domain Trust Type Transitive In Out
BUILTIN None Yes Yes Yes
server None Yes Yes Yes
DOMAIN1 domain1.example.ru None Yes Yes Yes
DOMAIN2 domain2.example.ru External No Yes Yes
принудительного изменения пароля доверенной учетной записи на контроллере домена:
# wbinfo --change-secret-at=<domain_controller>
Дополнительные ресурсы#
Справочная страница: smb.conf(5).
Каталог /usr/share/docs/samba-version/ содержит общую документацию, примеры сценариев и файлы схемы LDAP, предоставленные проектом samba.
Настройка и управление DNS-сервером BIND#
BIND - это многофункциональный DNS-сервер, который полностью соответствует стандартам DNS Internet Engineering Task Force (IETF) и проектам стандартов. Например, администраторы часто используют BIND как:
кеширование DNS-сервера в локальной сети;
авторитетный DNS-сервер для зон;
дополнительный сервер для обеспечения высокой доступности зон.
Установка BIND#
Чтобы обезопасить установку BIND, проделайте следующее:
Запустите именованную службу без изменения корневой среды. В этом случае SELinux в принудительном режиме предотвращает использование известных уязвимостей безопасности BIND. По умолчанию SberLinux использует SELinux в принудительном режиме.
Примечание: Запуск BIND на SberLinux с SELinux в принудительном режиме более безопасен, чем запуск BIND в среде с измененным root.
Запустите службу named-chroot в среде с измененным root.
Используя функцию изменения корневого каталога, администраторы могут определить, что корневой каталог процесса и его подпроцессов отличается от каталога /. Когда запускаете службу named-chroot, BIND переключает ее корневой каталог на /var/named/chroot/. Как следствие, служба использует команды mount --bind для создания файлов и каталогов, перечисленных в /etc/named-chroot. Файлы доступны в /var/named/chroot/, и процесс не имеет доступа к файлам за пределами /var/named/chroot/.
Для использования BIND:
В обычном режиме используйте именованную службу.
В среде с измененным root используйте службу named-chroot. Для этого необходимо дополнительно установить пакет named-chroot.
Настройка BIND в качестве кеширующего сервера имен#
По умолчанию DNS-сервер BIND разрешает и кеширует успешные и неудачные запросы. Затем служба отвечает на запросы к тем же записям из своего кеша. Это значительно повышает скорость поиска в DNS.
Предварительные условия:
IP-адрес сервера является статическим.
Процедура:
Установите bindbind-утилиты и пакеты:
# yum install bind bind-utils
Эти пакеты предоставляют BIND 9.11. Если требуется BIND 9.16, установите bind9.16bind9.16-utils утилиты и пакеты.
Если необходимо запустить BIND в среде с измененным root, установите bind-chroot пакет:
# yum install bind-chroot
Обратите внимание, что запуск BIND на хосте с SELinux в принудительном режиме, который установлен по умолчанию, является более безопасным.
Отредактируйте файл /etc/named.conf и внесите следующие изменения в options инструкцию:
Обновите инструкции listen-on и listen-on-v6, чтобы указать, какие интерфейсы IPv4 и IPv6 BIND должны прослушиваться:
listen-on port 53 { 127.0.0.1; 192.0.2.1; };
listen-on-v6 port 53 { ::1; 2001:db8:1::1; };
Обновите инструкцию разрешить запрос, чтобы настроить, с каких IP-адресов и диапазонов клиенты могут запрашивать этот DNS-сервер:
allow-query { localhost; 192.0.2.0/24; 2001:db8:1::/64; };
Добавьте оператор allow-recursion, чтобы определить, с каких IP-адресов и диапазонов BIND принимает рекурсивные запросы:
allow-recursion { localhost; 192.0.2.0/24; 2001:db8:1::/64; };
Предупреждение: Не разрешайте рекурсию по общедоступным IP-адресам сервера. В противном случае сервер может стать частью крупномасштабных атак по усилению DNS.
По умолчанию BIND разрешает запросы путем рекурсивного запроса от корневых серверов к авторитетному DNS-серверу. В качестве альтернативы можно настроить BIND для пересылки запросов на другие DNS-серверы, например, установленного провайдера. В этом случае добавьте инструкцию forwarders со списком IP-адресов DNS-серверов, на которые BIND должен пересылать запросы:
forwarders { 198.51.100.1; 203.0.113.5; };
В качестве запасного варианта BIND разрешает запросы рекурсивно, если серверы пересылки не отвечают. Чтобы отключить это поведение, добавьте forward only; оператор.
Проверьте синтаксис файла /etc/named.conf:
# named-checkconf
Если команда не выводит никаких выходных данных, синтаксис правильный.
Обновите правила межсетевого экрана, чтобы разрешить входящий DNS-трафик:
# firewall-cmd --permanent --add-service=dns# firewall-cmd --reload
Запустите и включите BIND:
# systemctl enable --now named
Если необходимо запустить BIND в среде с измененным root, используйте команду systemctl enable --now named-chroot для включения и запуска службы.
Проверка:
Используйте недавно настроенный DNS-сервер для разрешения домена:
# dig @localhost www.example.org
...
www.example.org. 86400 IN A 198.51.100.34
;; Query time: 917 msec
...
В этом примере предполагается, что BIND выполняется на том же хосте и отвечает на запросы в интерфейсе localhost.
После первого запроса записи BIND добавляет запись в собственный кеш.
Повторите предыдущий запрос:
# dig @localhost www.example.org
...
www.example.org. 85332 IN A 198.51.100.34
;; Query time: 1 msec
...
Из-за кешированной записи дальнейшие запросы к той же записи выполняются значительно быстрее, пока срок действия записи не истечет.
Следующие шаги:
Настройте клиентов в сети на использование этого DNS-сервера. Если DHCP-сервер предоставляет клиентам настройки DNS-сервера, соответствующим образом обновите конфигурацию DHCP-сервера.
Экспорт общих ресурсов 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 по умолчанию
Версия NFS по умолчанию в SberLinux. Клиенты 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) собирать лучшую статистику производительности.
Ниже приведены особенности NFSv4.1:
Повышает производительность и безопасность сети, а также включает поддержку PNFS на стороне клиента.
Больше не требуется отдельное TCP-соединение для обратных вызовов, что позволяет серверу NFS предоставлять делегирование, даже когда он не может связаться с клиентом: например, при вмешательстве NAT или межсетевого экрана.
Обеспечивает семантику ровно один раз (за исключением операций перезагрузки), предотвращая предыдущую проблему, из-за которой некоторые операции иногда возвращали неточный результат, если ответ был потерян и операция была отправлена дважды.
Протоколы 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.
Службы RPC с NFSv4 Протоколы монтажа и блокировки были включены в протокол NFSv4. Сервер также прослушивает хорошо известный TCP-порт 2049. Таким образом, NFSv4 не нуждается во взаимодействии со службами rpcbind, lockdи rpc-statd. Служба nfs-mountd по-прежнему требуется на сервере NFS для настройки экспорта, но не участвует в каких-либо операциях по проводам.
Форматы имени хоста NFS#
В этом разделе описываются различные форматы, которые можно использовать для указания хоста при подключении или экспорте общего ресурса NFS.
Можно указать хост в следующих форматах:
Одиночная машина
Любое из следующих:
Полное доменное имя (которое может быть разрешено сервером);
Имя хоста (которое может быть разрешено сервером);
IP-адрес.
IP-сети
Допустим любой из следующих форматов:
a.b.c.d/z, где a.b.c.d - сеть, а z - количество битов в маске сети; например, 192.168.0.0/24.
a.b.c.d/netmask, где a.b.c.d - сеть, а netmask; например, 192.168.100.8/255.255.255.0.
Сетевые группы
Формат @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 Это не позволяет пользователям root, подключенным удаленно (в отличие от локальных), иметь привилегии root; вместо этого сервер NFS присваивает им идентификатор nobody пользователя. Это эффективно "сокращает" полномочия удаленного пользователя root до самого низкого локального пользователя, предотвращая возможную несанкционированную запись на удаленный сервер. Чтобы отключить раздавливание корней, укажите no_root_squash параметр.
Чтобы удалить всех удаленных пользователей (включая root), используйте параметр 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)
В этом примере 192.168.0.3 может монтировать /another/exported/directory/ для чтения и записи, и все записи на диск являются асинхронными.
Утилита exportfs
Утилита exportfs позволяет пользователю root выборочно экспортировать или не экспортировать каталоги без перезапуска службы 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. Замените файловые системы дополнительными файловыми системами, подлежащими экспорту. Эти файловые системы должны быть отформатированы таким же образом, как они указаны в /etc/exports каталоге. Этот параметр часто используется для тестирования экспортированной файловой системы перед ее постоянным добавлением в список экспортируемых файловых систем.
-i Игнорирует /etc/exports; для определения экспортируемых файловых систем используются только параметры, заданные из командной строки.
-u Не экспортирует все общие каталоги. Команда exportfs -ua приостанавливает общий доступ к файлам NFS, сохраняя при этом работоспособность всех служб 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:
# yum 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, следуйте процедуре, описанной в разделе «Настройка сервера с поддержкой 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 через RDMA (NFSoRDMA)#
Служба удаленного прямого доступа к памяти (RDMA) автоматически работает на оборудовании с поддержкой RDMA в SberLinux.
Процедура:
Установите rdma-core пакет:
# yum install rdma-core
Убедитесь, что строки с xprtrdma и svcrdma закомментированы в /etc/rdma/modules/rdma.conf файле:
# NFS over RDMA client supportxprtrdma# NFS over RDMA server supportsvcrdma
На сервере NFS создайте каталог /mnt/nfsordma и экспортируйте его в /etc/exports файл:
# mkdir /mnt/nfsordma# echo "/mnt/nfsordma *(fsid=0,rw,async,insecure,no_root_squash)" >> /etc/exports
На клиенте NFS смонтируйте nfs-share с IP-адресом сервера (замените hh.hh.hh.hh на адрес реального компьютера):
# mount -o rdma,port=20049 hh.hh.hh.hh:/mnt/nfs-share /mnt/nfs
Перезапустите службу nfs-сервера:
# systemctl restart nfs-server
Защита 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 сервер не зависит от клиента, чтобы правильно представить, какой пользователь обращается к файлу. Вместо этого для аутентификации пользователей на сервере используется криптография, которая не позволяет вредоносному клиенту выдавать себя за пользователя, не имея учетных данных Kerberos этого пользователя. Использование механизма RPCSEC_GSS Kerberos является наиболее простым способом обеспечения безопасности подключений, поскольку после настройки Kerberos не требуется дополнительная настройка.
Настройка сервера и клиента NFS для использования Kerberos#
Kerberos - это сетевая система аутентификации, которая позволяет клиентам и серверам аутентифицироваться друг перед другом с помощью симметричного шифрования и доверенной третьей стороны, KDC. Рекомендуется использовать управление идентификацией (IdM) для настройки Kerberos.
Предварительные условия:
Установлен и настроен Центр распространения ключей Kerberos (KDC).
Процедура:
Создайте 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
Параметры безопасности NFSv4#
NFSv4 включает поддержку ACL на основе модели Microsoft Windows NT, а не модели POSIX, из-за особенностей модели Microsoft Windows NT и широкого развертывания.
Другой важной функцией безопасности NFSv4 является исключение использования протокола MOUNT для монтирования файловых систем. Протокол МОНТИРОВАНИЯ представлял угрозу безопасности из-за того, как протокол обрабатывал файловые дескрипторы.
Права доступа к файлам для смонтированного экспорта NFS#
Как только файловая система NFS смонтирована удаленным хостом либо для чтения, либо для чтения и записи, единственная защита, которой обладает каждый общий файл - это его разрешения. Если два пользователя с одинаковым значением идентификатора пользователя монтируют одну и ту же файловую систему NFS в разных клиентских системах, они могут изменять файлы друг друга. Кроме того, любой пользователь, вошедший в систему с правами root в клиентской системе, может использовать su - команду для доступа к любым файлам с общим ресурсом NFS.
По умолчанию списки контроля доступа (ACL) поддерживаются NFS в SberLinux рекомендует оставить эту функцию включенной.
По умолчанию NFS использует сжатие корня при экспорте файловой системы. Это устанавливает идентификатор пользователя любого, кто обращается к общему ресурсу NFS в качестве пользователя root на своем локальном компьютере, равным nobody пользователю. Сжатие корня контролируется параметром root_squash по умолчанию.
При экспорте общего ресурса NFS как доступного только для чтения, рассмотрите возможность использования all_squash опции. Этот параметр заставляет каждого пользователя, получающего доступ к экспортированной файловой системе, использовать идентификатор nobody пользователя.
Включение макетов pNFS SCSI в NFS#
Можно настроить сервер и клиент NFS на использование макета pNFS SCSI для доступа к данным. pNFS SCSI полезен в случаях использования, которые предполагают более длительный доступ к файлу для одного клиента.
Предварительные условия:
Клиент и сервер должны иметь возможность отправлять команды SCSI на одно и то же блочное устройство. То есть блочное устройство должно находиться на общей шине SCSI.
Блочное устройство должно содержать файловую систему XFS.
Устройство SCSI должно поддерживать постоянное резервирование SCSI, как описано в спецификации основных команд SCSI-3.
Технология pNFS#
Архитектура pNFS улучшает масштабируемость NFS. Когда сервер реализует pNFS, клиент может получать доступ к данным через несколько серверов одновременно. Это может привести к повышению производительности.
pNFS поддерживает следующие протоколы хранения или макеты на SberLinux:
Файлы;
Гибкие файлы;
SCSI.
Макеты 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 пакет:
# yum 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 макета.
Предварительные условия:
Сервер NFS настроен на экспорт файловой системы XFS через nfs SCSI макет.
Процедура:
На клиенте смонтируйте экспортированную файловую систему XFS, используя NFS версии 4.1 или выше:
# mount -t nfs -o nfsvers=4.1 host:/remote/export/local/directory
Не монтируйте файловую систему XFS напрямую без NFS.
Снятие резервирования pNFS SCSI на сервере#
Эта процедура освобождает постоянное резервирование, которое сервер NFS хранит на устройстве SCSI. Это позволяет перепрофилировать устройство SCSI, когда больше не нужно экспортировать pNFS SCSI.
Необходимо удалить резервирование с сервера. Он не может быть удален из другого ИТ-узла.
Предварительные условия:
Установите пакет sg3_utils:
# yum 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
Настройка кеширующего прокси-сервера Squid#
Squid - это прокси-сервер, который кеширует содержимое, чтобы уменьшить пропускную способность и ускорить загрузку веб-страниц. В этой главе описывается, как настроить Squid в качестве прокси-сервера для протоколов HTTP, HTTPS и FTP, а также аутентификацию и ограничение доступа.
Настройка Squid в качестве кеширующего прокси без аутентификации#
В этом разделе описывается базовая конфигурация Squid в качестве кеширующего прокси-сервера без проверки подлинности. Процедура ограничивает доступ к прокси-серверу на основе диапазонов IP-адресов.
Предварительные условия
Процедура предполагает, что /etc/squid/squid.conf файл соответствует тому, что предусмотрено squid пакетом. Если этот файл редактировался ранее, удалите файл и переустановите пакет.
Процедура
Установите squid пакет:
# yum install squid
Отредактируйте /etc/squid/squid.conf файл:
Адаптируйте localnet списки контроля доступа (ACL) в соответствии с диапазонами IP-адресов, которым должно быть разрешено использовать прокси-сервер:
acl localnet src 192.0.2.0/24
acl localnet 2001:db8:1::/64
По умолчанию /etc/squid/squid.conf файл содержит http_access allow localnet правило, позволяющее использовать прокси-сервер из всех диапазонов IP-адресов, указанных в localnet списках управления доступом. Обратите внимание, что необходимо указать все localnet списки управления доступом перед http_access allow localnet правилом.
Примечание: Удалите все существующие acl localnet записи, которые не соответствуют среде.
Следующий список управления доступом существует в конфигурации по умолчанию и определяется 443как порт, использующий протокол HTTPS:
acl SSL_ports порт 443
Если пользователи должны иметь возможность использовать протокол HTTPS также на других портах, добавьте ACL для каждого из этих портов:
acl SSL_ports port port_number
Обновите список acl Safe_ports правил, чтобы настроить, к каким портам Squid может устанавливать соединение. Например, чтобы настроить, чтобы клиенты, использующие прокси-сервер, могли получать доступ к ресурсам только через порты 21 (FTP), 80 (HTTP) и 443 (HTTPS), сохраняйте в конфигурации только следующие acl Safe_ports инструкции:
acl Safe_ports port 21acl Safe_ports port 80acl Safe_ports port 443
По умолчанию конфигурация содержит http_access deny !Safe_ports правило, определяющее отказ в доступе к портам, которые не определены в Safe_ports списках управления доступом.
Настройте тип кеша, путь к каталогу кеша, размер кеша и другие параметры, зависящие от типа кеша, в параметре cache_dir:
cache_dir ufs /var/spool/squid 10000 16 256
С этими настройками:
Squid использует ufs тип кеша.
Squid хранит свой кеш в /var/spool/squid/ каталоге.
Объем кеша увеличивается до 10000 МБ.
Squid создает 16 подкаталогов уровня 1 в /var/spool/squid/ каталоге.
Squid создает 256 подкаталогов в каждом каталоге уровня 1. Если не задали cache_dir директиву, Squid сохраняет кеш в памяти.
Если задали другой каталог кеша, чем /var/spool/squid/в cache_dir каталог:
Создайте каталог кеша:
# mkdir -p path_to_cache_directory
Настройте разрешения для каталога кеша:
# chown squid:squid path_to_cache_directory
Если запущен SELinux в enforcing режиме, задайте squid_cache_t контекст для каталога кеша:
# semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?"
# restorecon -Rv path_to_cache_directory
Если semanage утилита недоступна в системе, установите policycoreutils-python-utils пакет.
Откройте 3128 порт в межсетевом экране:
# firewall-cmd --permanent --add-port=3128/tcp
# firewall-cmd --reload
Включите и запустите squid службу:
# systemctl включить -теперь squid
Этапы проверки:
Чтобы убедиться в правильности работы прокси-сервера, загрузите веб-страницу с помощью curl утилиты:
# curl -O -L "https://www.sberlinux.com/index.html" -x "proxy.example.ru:3128"
Если curl не отображается никакой ошибки и index.html файл был загружен в текущий каталог, прокси работает.
Настройка Squid в качестве кеширующего прокси с аутентификацией LDAP#
В этом разделе описывается базовая конфигурация Squid как кеширующего прокси-сервера, который использует LDAP для аутентификации пользователей. Процедура настраивает, что только аутентифицированные пользователи могут использовать прокси-сервер.
Предварительные условия:
Процедура предполагает, что файл /etc/squid/squid.conf соответствует тому, что предусмотрено пакетом squid. Если этот файл редактировался ранее, удалите файл и переустановите пакет. Пользователь службы, такой как uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com, существует в каталоге LDAP. Squid использует эту учетную запись только для поиска пользователя, проходящего аутентификацию. Если аутентифицирующий пользователь существует, Squid привязывается как этот пользователь к каталогу для проверки подлинности.
Процедура:
Установите squid пакет:
# yum install squid
Отредактируйте файл /etc/squid/squid.conf:
Чтобы настроить вспомогательную утилиту basic_ldap_auth, добавьте следующую запись конфигурации в начало файла /etc/squid/squid.conf:
auth_param basic program /usr/lib64/squid/basic_ldap_auth -b "cn=users,cn=accounts,dc=example,dc=com" -D "uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com" -W /etc/squid/ldap_password -f "(&(objectClass=person)(uid=%s))" -ZZ -H ldap://ldap_server.example.ru:389
Ниже описаны параметры, переданные вспомогательной утилите basic_ldap_auth в приведенном выше примере:
-b base_DN задает базу поиска LDAP.
-D proxy_service_user_DN задает различимое имя (DN) учетной записи, которую Squid использует для поиска аутентифицирующего пользователя в каталоге.
-W path_to_password_file задает путь к файлу, который содержит пароль пользователя прокси-службы. Использование файла паролей предотвращает отображение пароля в списке процессов операционной системы.
-f LDAP_filter задает фильтр поиска LDAP. Squid заменяет переменную %s именем пользователя, предоставленным аутентифицирующим пользователем. Фильтр (&(objectClass=person)(uid=%s)) в примере определяет, что имя пользователя должно соответствовать значению, заданному в атрибуте uid, и что запись каталога содержит класс person объекта.
-ZZ обеспечивает принудительное соединение, зашифрованное TLS, по протоколу LDAP с помощью команды STARTTLS. Не задействуйте -ZZ в следующих ситуациях:
Сервер LDAP не поддерживает зашифрованные соединения.
Порт, указанный в URL-адресе, использует протокол LDAPS.
Параметр -H LDAP_URLзадает протокол, имя хоста или IP-адрес и порт сервера LDAP в формате URL.
Добавьте следующий ACL и правило, чтобы настроить, что Squid разрешает использовать прокси только аутентифицированным пользователям:
acl ldap-auth proxy_auth REQUIRED
http_access allow ldap-auth
Примечание: Укажите эти параметры перед http_access правилом.
Удалите следующее правило, чтобы отключить обход проверки подлинности прокси из диапазонов IP, указанных в списках управления localnet доступом:
http_access allow localnet
Следующий ACL существует в конфигурации по умолчанию и определяет 443 как порт, использующий протокол HTTPS:
acl SSL_ports port 443
Если пользователи должны иметь возможность использовать протокол HTTPS также на других портах, добавьте ACL для каждого из этих портов:
acl SSL_ports port port_number
Обновите список acl Safe_ports правил, чтобы настроить, к каким портам Squid может устанавливать соединение. Например, чтобы настроить, чтобы клиенты, использующие прокси-сервер, могли получать доступ к ресурсам только через порты 21 (FTP), 80 (HTTP) и 443 (HTTPS), сохраняйте в конфигурации только следующие acl Safe_ports инструкции:
acl Safe_ports port 21
acl Safe_ports port 80
acl Safe_ports port 443
По умолчанию конфигурация содержит http_access ! запрет. Правило Safe_ports, определяющее отказ в доступе к портам, которые не определены в списках управления Safe_ports доступом.
Настройте тип кеша, путь к каталогу кеша, размер кеша и другие параметры, зависящие от типа кеша, в cache_dir параметре:
cache_dir ufs /var/spool/squid 10000 16 256
С этими настройками:
Squid использует тип ufs кеша.
Squid хранит свой кеш в каталоге /var/spool/squid/.
Объем кеша увеличивается до 10000 МБ.
**Squid создает 16 подкаталогов уровня 1 в каталоге /var/spool/squid/.
Squid создает 256 подкаталогов в каждом каталоге уровня 1.
Если не задаете директиву cache_dir, Squid сохраняет кеш в памяти.
Если задали в параметре cache_dir каталог кеша, отличный от /var/spool/squid/ каталога:
Создайте каталог кеша:
# mkdir -p path_to_cache_directory
Настройте разрешения для каталога кеша:
# chown squid:squid path_to_cache_directory
Если запускаете SELinux в принудительном режиме, установите контекст squid_cache_t для каталога кеша:
# semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?"
# restorecon -Rv path_to_cache_directory
Если утилита semanage недоступна в системе, установите policycoreutils-python-utils пакет.
Сохраните пароль пользователя службы LDAP в файле /etc/squid/ldap_password и установите соответствующие разрешения для файла:
# echo "password" > /etc/squid/ldap_password# chown root:squid /etc/squid/ldap_password# chmod 640 /etc/squid/ldap_password
Откройте порт 3128 в межсетевом экране:
# firewall-cmd --permanent --add-port=3128/tcp# firewall-cmd --reload
Включите и запустите squid службу:
# systemctl enable --now squid
Этапы проверки:
Чтобы убедиться, что прокси работает правильно, загрузите веб-страницу с помощью curl утилиты:
# curl -O -L "https://www.sberlinux.com/index.html" -x "user_name:password@proxy.example.ru:3128"
Если curl не отображает никакой ошибки и index.html файл был загружен в текущий каталог, прокси работает.
Шаги по устранению неполадок:
Чтобы убедиться, что вспомогательная утилита работает правильно:
Вручную запустите вспомогательную утилиту с теми же настройками, которые использовали в auth_param параметре:
# /usr/lib64/squid/basic_ldap_auth -b "cn=users,cn=accounts,dc=example,dc=com" -D "uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com" -W /etc/squid/ldap_password -f "(&(objectClass=person)(uid=%s))" -ZZ -H ldap://ldap_server.example.ru:389
Введите действительное имя пользователя и пароль и нажмите Enter:
user_name password
Если вспомогательная утилита возвращает OK, аутентификация прошла успешно.
Настройка Squid в качестве кеширующего прокси с аутентификацией kerberos#
В этом разделе описывается базовая конфигурация Squid как кеширующего прокси-сервера, который проверяет подлинность пользователей в Active Directory (AD) с использованием Kerberos. Процедура настраивает, что прокси-сервер могут использовать только аутентифицированные пользователи.
Предварительные условия:
Процедура предполагает, что /etc/squid/squid.conf файл соответствует тому, что предусмотрено squid пакетом. Если этот файл редактировался ранее, удалите файл и переустановите пакет.
Сервер, на который можно установить Squid, является частью домена AD.
Процедура:
Установите следующие пакеты:
yum install squid krb5-workstation
Аутентификация в качестве администратора домена AD:
# kinit administrator@
Создайте ключевую вкладку для Squid и сохраните ее в**/etc/squid/HTTP.keytab** файле:
# export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab
# net ads keytab CREATE -U administrator
Добавьте участника HTTP службы на вкладку ключей:
# net ads keytab **Add** HTTP -U administrator
Установите владельца файла keytab для squid пользователя:
# chown squid /etc/squid/HTTP.keytab
При необходимости убедитесь, что файл keytab содержит субъект-службу HTTP для полного доменного имени (FQDN) прокси-сервера:
klist -k /etc/squid/HTTP.keytab
Keytab name: FILE:/etc/squid/HTTP.keytab
KVNO Principal
---- ---------------------------------------------------
...
2 HTTP/proxy.ad.example.ru@AD.example.ru ...
Отредактируйте /etc/squid/squid.conf файл:
Чтобы настроить negotiate_kerberos_auth вспомогательную утилиту, добавьте следующую запись конфигурации в начало /etc/squid/squid.conf:
auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -k /etc/squid/HTTP.keytab -s HTTP/
Ниже описаны параметры, переданные negotiate_kerberos_auth вспомогательной утилите в приведенном выше примере:
k file задает путь к файлу ключевой вкладки. Обратите внимание, что пользователь squid должен иметь права на чтение этого файла.
-s HTTP/host_name@kerberos_realm задает принципал Kerberos, который использует Squid. При необходимости можно включить ведение журнала, передав вспомогательной утилите один или оба следующих параметра:
-i регистрирует информационные сообщения, такие как аутентифицирующий пользователь.
-d включает ведение журнала отладки. Squid записывает отладочную информацию из вспомогательной утилиты в /var/log/squid/cache.log файл.
Добавьте следующий список управления доступом и правило, чтобы настроить Squid для использования прокси-сервера только аутентифицированным пользователям:
acl kerb-auth proxy_auth REQUIRED
http_access allow kerb-auth
Удалите следующее правило, чтобы отключить обход проверки подлинности прокси-сервера из диапазонов IP, указанных в localnet списках управления доступом:
http_access allow localnet
Следующий список управления доступом существует в конфигурации по умолчанию и определяется 443как порт, использующий протокол HTTPS:
acl SSL_ports port 443
Если пользователи должны иметь возможность использовать протокол HTTPS также на других портах, добавьте ACL для каждого из этих портов:
acl SSL_ports port port_number
Обновите список acl Safe_ports правил, чтобы настроить, к каким портам Squid может устанавливать соединение. Например, чтобы настроить, чтобы клиенты, использующие прокси-сервер, могли получать доступ к ресурсам только через порты 21 (FTP), 80 (HTTP) и 443 (HTTPS), сохраняйте в конфигурации только следующие acl Safe_ports инструкции:
acl Safe_ports port 21acl Safe_ports port 80acl Safe_ports port 443
По умолчанию конфигурация содержит http_access deny !Safe_ports правило, определяющее отказ в доступе к портам, которые не определены в Safe_ports списках управления доступом.
Настройте тип кеша, путь к каталогу кеша, размер кеша и другие параметры, зависящие от типа кеша, в cache_dir параметре:
cache_dir ufs /var/spool/squid 10000 16 256
С этими настройками:
Squid использует ufs тип кеша.
Squid хранит свой кеш в /var/spool/squid/ каталоге.
Объем кеша увеличивается до 10000 Мбайт.
Squid создает 16 подкаталогов уровня 1 в /var/spool/squid/ каталоге.
Squid создает 256 подкаталогов в каждом каталоге уровня 1. Если не задана cache_dir директива, Squid сохраняет кеш в памяти.
Если задали другой каталог кеша, чем /var/spool/squid/ в cache_dir параметре:
Создайте каталог кеша:
# mkdir -p path_to_cache_directory
Настройте разрешения для каталога кеша:
# chown squid:squid path_to_cache_directory
Если запускаете SELinux в enforcing режиме, задайте squid_cache_t контекст для каталога кеша:
# semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" # restorecon -Rv path_to_cache_directory
Если semanage утилита недоступна в системе, установите policycoreutils-python-utils пакет.
Откройте 3128 порт в межсетевом экране:
# firewall-cmd --permanent --add-port=3128/tcp # firewall-cmd --reload
Включите и запустите squid службу:
# systemctl enable --now squid
Этапы проверки:
Чтобы убедиться в правильности работы прокси-сервера, загрузите веб-страницу с помощью curl утилиты:
# curl -O -L "https://www.sberlinux.ru/index.html" --proxy-negotiate -u : -x "proxy.ad.example.ru:3128"
Если curl не отображается никакой ошибки и index.html файл существует в текущем каталоге, прокси работает.
Шаги по устранению неполадок:
Чтобы вручную протестировать проверку подлинности Kerberos:
Получите тикет Kerberos для рекламного аккаунта:
# kinit user@
При необходимости отобразите тикет:
# klist
Используйте negotiate_kerberos_auth_test утилиту для проверки подлинности:
# /usr/lib64/squid/negotiate_kerberos_auth_test proxy.ad.example.ru
Если вспомогательная утилита возвращает токен, проверка подлинности прошла успешно:
Token: YIIFtAYGKwYBBQUCoIIFqDC...
Настройка списка запрещенных доменов в Squid#
Часто администраторы хотят заблокировать доступ к определенным доменам. В этом разделе описывается, как настроить список запрещенных доменов в Squid.
Предварительные условия:
Squid настроен, и пользователи могут использовать прокси-сервер.
Процедура:
Отредактируйте файл /etc/squid/squid.conf и добавьте следующие настройки:
acl domain_deny_list dstdomain "/etc/squid/domain_deny_list.txt"http_access deny all domain_deny_list
Примечание: Добавьте эти записи перед первым оператором http_access allow, который разрешает доступ пользователям или клиентам.
Создайте /etc/squid/domain_deny_list.txt файл и добавьте домены, которые необходимо заблокировать. Например, чтобы заблокировать доступ к example.ru включая поддомены и блокировать example.net:
. example.ru
example.net
Примечание: Если сослались на /etc/squid/domain_deny_list.txt файл в конфигурации squid, этот файл не должен быть пустым. Если файл пуст, Squid не запускается.
Перезапустите squid службу:
# systemctl restart squid
Настройка службы Squid для прослушивания определенного порта или IP-адреса#
По умолчанию прокси-служба Squid прослушивает порт 3128 на всех сетевых интерфейсах. В этом разделе описывается, как изменить порт и настроить Squid для прослушивания определенного IP-адреса.
Предварительные условия:
Пакет squid установлен.
Процедура:
Отредактируйте /etc/squid/squid.conf файл:
Чтобы задать порт, на котором прослушивается Squid служба, задайте номер порта в http_port параметре. Например, чтобы установить порт на 8080, установите:
http_port 8080
Чтобы настроить, по какому IP-адресу прослушивается служба Squid, задайте IP-адрес и номер порта в параметре http_port. Например, чтобы настроить, чтобы Squid прослушивал только IP-адрес 192.0.2.1 на порту 3128, установите:
http_port 192.0.2.1:3128
Добавьте несколько параметров http_port в файл конфигурации, чтобы настроить прослушивание Squid на нескольких портах и IP-адресах:
http_port 192.0.2.1:3128
http_port 192.0.2.1:8080
Если настроили, что Squid использует другой порт по умолчанию (3128):
Откройте порт в межсетевом экране:
# firewall-cmd --permanent --add-port=port_number/tcp# firewall-cmd --reload
Если запускаете SELinux в принудительном режиме, назначьте порт определению типа порта squid_port_t:
# semanage port -a -t squid_port_t -p tcp port_number
Если утилита semanage недоступна в системе, установите policycoreutils-python-utils пакет.
Перезапустите службу squid:
# systemctl restart squid
Дополнительные ресурсы#
Смотрите файл usr/share/doc/squid-<версия>/squid.conf.documentated для получения списка всех параметров конфигурации, которые можно установить в файле /etc/squid/squid.conf, вместе с подробным описанием.
Серверы баз данных#
Введение в серверы баз данных#
Сервер базы данных - это служба, предоставляющая функции системы управления базами данных (СУБД). СУБД предоставляет утилиты для администрирования баз данных и взаимодействует с конечными пользователями, приложениями и базами данных.
Использование MariaDB#
Сервер MariaDB - это быстрый и надежный сервер баз данных с открытым исходным кодом, основанный на технологии MySQL. В этой части описывается, как установить и настроить MariaDB в системе SberLinux, как создать резервную копию данных MariaDB, как выполнить миграцию с более ранней версии MariaDB и как реплицировать базу данных с помощью кластера MariaDB Galera.
Начало работы с MariaDB
MariaDB - это реляционная база данных, которая преобразует данные в структурированную информацию и предоставляет интерфейс SQL для доступа к данным. Он включает в себя несколько механизмов хранения данных и плагинов, а также функции географической информационной системы (ГИС) и объектной нотации JavaScript (JSON).
Установка MariaDB
В SberLinux сервер MariaDB доступен в следующих версиях, каждая из которых предоставляется отдельным потоком:
MariaDB 10.3
MariaDB 10.5
Чтобы установить MariaDB, используйте следующую процедуру.
Процедура:
Установите серверные пакеты MariaDB, выбрав поток (версию) из модуля mariadb и указав профиль сервера. Например:
# yum module install mariadb:10.3/server
Запустите службу mariadb:
# systemctl start mariadb.service
Включите запуск службы mariadb при загрузке:
# systemctl enable mariadb.service
Рекомендуется: Для повышения безопасности при установке MariaDB выполните следующую команду:
$ mysql_secure_installation
Команда запускает полностью интерактивный скрипт, который запрашивает информацию о каждом шаге процесса. Скрипт позволяет повысить безопасность следующими способами:
Установкой пароля для учетных записей root;
Удалением анонимных пользователей;
Запрещением удаленных корневых входов в систему (за пределами локального хоста).
Настройка MariaDB
Чтобы настроить сервер MariaDB для работы в сети, используйте следующую процедуру.
Процедура:
Отредактируйте раздел [mysqld] в файле /etc/my.cnf.d/mariadb-server.cnf. Можно установить следующие директивы конфигурации:
bind-address - это адрес, по которому сервер прослушивает. Возможными вариантами являются:
имя хоста;
адрес IPv4;
пропуск адреса IPv6.
skip-networking - определяет, прослушивает ли сервер соединения TCP/IP. Возможными значениями являются:
0 - прослушивать всех клиентов;
1 - только для прослушивания.
port - порт, на котором MariaDB прослушивает TCP/IP-соединения.
Перезапустите службу mariadb:
# systemctl restart mariadb.service
Настройка шифрования TLS на сервере MariaDB
По умолчанию MariaDB использует незашифрованные соединения. Для обеспечения безопасных подключений включите поддержку TLS на сервере MariaDB и настройте своих клиентов на установление зашифрованных подключений.
Размещение сертификата CA, сертификата сервера и закрытого ключа на сервере MariaDB
Прежде чем появится возможность включить шифрование TLS на сервере MariaDB, сохраните сертификат центра сертификации (CA), сертификат сервера и закрытый ключ на сервере MariaDB.
Предварительные условия:
Следующие файлы в формате Privacy Enhanced Mail (PEM) были скопированы на сервер:
закрытый ключ сервера: server.example.ru.key.pem
сертификат сервера: server.example.ru.crt.pem
сертификат центра сертификации (CA): ca.crt.pem
Дополнительные сведения о создании закрытого ключа и запроса на подпись сертификата (CSR), а также о запросе сертификата у центра сертификации см. в документации центра сертификации.
Процедура:
Сохраните сертификаты центра сертификации и сервера в /etc/pki/tls/certs/ каталоге:
# mv <path>/server.example.ru.crt.pem /etc/pki/tls/certs/# mv <path>/ca.crt.pem /etc/pki/tls/certs/
Установите разрешения для центра сертификации и сертификата сервера, которые позволяют серверу MariaDB считывать файлы:
# chmod 644 /etc/pki/tls/certs/server.example.ru ru.crt.pem /etc/pki/tls/certs/ca.crt.pem
Поскольку сертификаты являются частью обмена данными до установления защищенного соединения, любой клиент может получить их без проверки подлинности. Поэтому не нужно устанавливать строгие разрешения для файлов сертификатов центра сертификации и сервера.
Сохраните закрытый ключ сервера в /etc/pki/tls/private/ каталоге:
# mv <path>/server.example.ru.key.pem /etc/pki/tls/private/
Установите безопасные разрешения для закрытого ключа сервера:
# chmod 640 /etc/pki/tls/private/server.example.ru ru.key.pem
# chgrp mysql /etc/pki/tls/private/server.example.ru ru.key.pem
Если неавторизованные пользователи имеют доступ к закрытому ключу, соединения с сервером MariaDB больше не являются безопасными.
Восстановите контекст SELinux:
# restorecon -Rv /etc/pki/tls/
Настройка TLS на сервере MariaDB
Чтобы повысить безопасность, включите поддержку TLS на сервере Marias. В результате клиенты могут передавать данные с сервера, используя шифрование TLS.
Предварительные условия:
Установлен MariaDB.
Служба mariadb запущена.
Следующие файлы в формате Privacy Enhanced Mail (PEM) существуют на сервере и доступны для чтения mysql пользователем:
Закрытый ключ сервера: /etc/pki/tls/private/server.example.ru.key.pem
Сертификат сервера: /etc/pki/tls/certs/server.example.ru.crt.pem
Сертификат центра сертификации (CA) /etc/pki/tls/certs/ca.crt.pem
Поле Отличительное имя субъекта (DN) или альтернативное имя субъекта (SAN) в сертификате сервера соответствует имени хоста сервера.
Процедура:
Создайте /etc/my.cnf.d/mariadb-server-tls.cnf файл:
Добавьте следующее содержимое для настройки путей к закрытому ключу, серверу и сертификату CA:
[mariadb]
ssl_key = /etc/pki/tls/private/server.example.ru.key.pem
ssl_cert = /etc/pki/tls/certs/server.example.ru.crt.pem
ssl_ca = /etc/pki/tls/certs/ca.crt.pem
Если есть список отзыва сертификатов (CRL), настройте сервер MariaDB для его использования:
ssl_crl = /etc/pki/tls/certs/example.crl.pem
При необходимости, если используете MariaDB 10.5.2 или более поздней версии, можно отклонять попытки подключения без шифрования. Чтобы включить эту функцию, добавьте:
require_secure_transport = on
При необходимости, если используете MariaDB 10.4.6 или более поздней версии, можно установить версии TLS, которые должен поддерживать сервер. Например, для поддержки TLS 1.2 и TLS 1.3 добавьте:
tls_version = TLSv1.2,TLSv1.3
По умолчанию сервер поддерживает TLS 1.1, TLS 1.2 и TLS 1.3.
Перезапустите mariadb службу:
# systemctl restart mariadb
Проверка:
Чтобы упростить устранение неполадок, выполните следующие действия на сервере MariaDB, прежде чем настраивать локальный клиент на использование шифрования TLS:
Убедитесь, что в MariaDB включено шифрование TLS:
# mysql -u root -p -e "SHOW GLOBAL VARIABLES LIKE 'have_ssl';"
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| have_ssl | YES |
+---------------+-----------------+
Если служба MariaDB настроена на поддержку только определенных версий TLS, отобразите tls_version переменную:
# mysql -u root -p -e "SHOW GLOBAL VARIABLES LIKE 'tls_version';"
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tls_version | TLSv1.2,TLSv1.3 |
+---------------+-----------------+
Требование зашифрованных соединений TLS для определенных учетных записей пользователей
Пользователи, имеющие доступ к конфиденциальным данным, всегда должны использовать соединение, зашифрованное TLS, чтобы избежать отправки данных в незашифрованном виде по сети.
Если не получается настроить на сервере, что для всех подключений требуется безопасный транспорт (require_secure_transport = on), настройте отдельные учетные записи пользователей так, чтобы для них требовалось шифрование TLS.
Предварительные условия:
На сервере MariaDB включена поддержка TLS.
Пользователь, которого настраиваете для требования безопасного транспорта, существует.
Процедура:
Подключитесь как администратор к MariaDB:
# mysql -u root -p -h server.example.ru
Если у администратора нет прав на удаленный доступ к серверу, выполните команду на сервере MariaDB и подключитесь к localhost.
Используйте предложение REQUIRE SSL для обеспечения того, чтобы пользователь подключался с использованием соединения, зашифрованного TLS:
MariaDB [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;
Проверка:
Подключитесь к серверу в качестве примера пользователя, используя шифрование TLS:
# mysql -u example -p -h server.example.ru --ssl...MariaDB [(none)]>
Если ошибка не отображается и есть доступ к интерактивной консоли MariaDB, соединение с помощью TLS выполнено успешно.
Проверьте подключение в качестве примера пользователя с отключенным TLS:
# mysql -u example -p -h server.example.ru --skip-sslERROR 1045 (28000): Access denied for user 'example'@'server.example.ru' (using password: YES)
Сервер отклонил попытку входа в систему, поскольку для этого пользователя требуется протокол TLS, но он отключен (–skip-ssl).
Глобальное включение шифрования TLS в клиентах MariaDB
Если сервер MariaDB поддерживает шифрование TLS, настройте своих клиентов так, чтобы они устанавливали только безопасные соединения и проверяли сертификат сервера. Эта процедура описывает, как включить поддержку TLS для всех пользователей на сервере.
Настройка клиента MariaDB для использования шифрования TLS по умолчанию
В SberLinux можно глобально настроить, чтобы клиент MariaDB использовал шифрование TLS и проверял, что общее имя (CN) в сертификате сервера совпадает с именем хоста, к которому подключается пользователь. Это предотвращает атаки типа «человек посередине».
Предварительные условия:
На сервере MariaDB включена поддержка TLS.
Процедура:
Если SberLinux не доверяет центру сертификации, выдавшему сертификат сервера:
Скопируйте сертификат CA в каталог /etc/pki/ca-trust/source/anchors/:
# cp <path>/ca.crt.pem /etc/pki/ca-trust/source/anchors/
Установите разрешения, позволяющие всем пользователям читать файл сертификата CA:
# chmod 644 /etc/pki/ca-trust/source/anchors/ca.crt.pem
Перестройте базу данных доверия центра сертификации:
# update-ca-trust
Создайте файл /etc/my.cnf.d/mariadb-client-tls.cnf со следующим содержимым:
[client-mariadb]sslssl-verify-server-cert
Эти параметры определяют, что клиент MariaDB использует шифрование TLS (ssl) и что клиент сравнивает имя хоста с CN в сертификате сервера (ssl-verify-server-cert).
Проверка:
Подключитесь к серверу, используя имя хоста, и отобразите статус сервера:
# mysql -u root -p -h server.example.ru -e status...SSL:
Cipher in use is TLS_AES_256_GCM_SHA384
Если запись SSL содержит используемый шифр is…, значит соединение зашифровано.
Обратите внимание, что пользователь, который используется в этой команде, имеет разрешения на удаленную аутентификацию.
Если имя хоста, к которому подключаетесь, не совпадает с именем хоста в сертификате TLS сервера, параметр ssl-verify-server-cert приводит к сбою подключения. Например, если подключились к localhost:
# mysql -u root -p -h localhost -e statusERROR 2026 (HY000): SSL connection error: Validation of SSL server certificate failed
Резервное копирование данных MariaDB
Существует два основных способа резервного копирования данных из базы данных MariaDB в SberLinux:
Логическое резервное копирование.
Физическое резервное копирование.
Логическое резервное копирование состоит из инструкций SQL, необходимых для восстановления данных. Этот тип резервного копирования экспортирует информацию и записи в виде обычных текстовых файлов.
Основным преимуществом логического резервного копирования перед физическим является переносимость и гибкость. Данные могут быть восстановлены на других конфигурациях оборудования, версиях MariaDB или системе управления базами данных (СУБД), что невозможно при физических резервных копиях.
Обратите внимание, что логическое резервное копирование может быть выполнено, если запущена mariadb.service служба. Логическая резервная копия не включает файлы журнала и конфигурации.
Физическая резервная копия состоит из копий файлов и каталогов, в которых хранится содержимое.
Физическое резервное копирование имеет следующие преимущества по сравнению с логическим резервным копированием:
Выход более компактный.
Резервная копия меньше по размеру.
Резервное копирование и восстановление выполняются быстрее.
Резервная копия включает в себя файлы журнала и конфигурации.
Обратите внимание, что физическое резервное копирование должно выполняться, когда mariadb.service не запущен или все таблицы в базе данных заблокированы, чтобы предотвратить изменения во время резервного копирования.
Можно использовать один из следующих подходов к резервному копированию MariaDB для резервного копирования данных из базы данных MariaDB:
Логическое резервное копирование с помощью mysqldump;
Физическое онлайн-резервное копирование с помощью утилиты Mariabackup;
Резервное копирование файловой системы;
Репликация как решение для резервного копирования.
Выполнение логического резервного копирования с помощью mysqldump
Клиент mysqldump - это утилита резервного копирования, которая может использоваться для создания dump базы данных или набора баз данных с целью резервного копирования или передачи на другой сервер баз данных. Выходные данные mysqldump обычно состоят из инструкций SQL для повторного создания структуры таблицы сервера, заполнения ее данными или и того, и другого. mysqldump также может генерировать файлы в других форматах, включая XML и текстовые форматы с разделителями, такими как CSV.
Чтобы выполнить резервное копирование mysqldump, можно использовать один из следующих вариантов:
создать резервную копию одной или нескольких выбранных баз данных;
создать резервную копию всех баз данных;
создать резервное копирование подмножества таблиц из одной базы данных.
Процедура:
Чтобы создать dump единой базы данных, запустите:
# mysqldump [options] --databases db_name > backup-file.sql
Чтобы сбросить несколько баз данных одновременно, запустите:
# mysqldump [options] --databases db_name1 [db_name2 ...] > backup-file.sql
Чтобы сбросить все базы данных, запустите:
# mysqldump [options] --all-databases > backup-file.sql
Чтобы загрузить одну или несколько сброшенных полных баз данных обратно на сервер, запустите:
# mysql < backup-file.sql
Чтобы загрузить базу данных на удаленный сервер MariaDB, запустите:
# mysql --host=remote_host < backup-file.sql
Чтобы выгрузить подмножество таблиц из одной базы данных, добавьте список выбранных таблиц в конце команды mysqldump:
# mysqldump [options] db_name [tbl_name ...] > backup-file.sql
Чтобы загрузить подмножество таблиц, выгруженных из одной базы данных, запустите:
# mysql db_name < backup-file.sql
Примечание: На данный момент должна существовать база данных db_name.
Чтобы просмотреть список опций, поддерживаемых mysqldump, запустите:
$ mysqldump --help
Выполнение физического онлайн-бэкапа с помощью утилиты Mariabackup
Mariabackup - это утилита, основанная на технологии Percona XtraBackup, которая позволяет выполнять физическое онлайн-резервное копирование таблиц InnoDB, Aria и MyISAM. Эта утилита предоставляется пакетом mariadb-backup из репозитория AppStream.
Mariabackup поддерживает полную возможность резервного копирования для сервера MariaDB, которая включает зашифрованные и сжатые данные.
Предварительные условия:
Пакет mariadb-backup установлен в системе:
# yum install mariadb-backup
Должен быть предоставлены Mariabackup учетные данные пользователя, под которым будет выполняться резервное копирование. Можно предоставить учетные данные либо в командной строке, либо с помощью файла конфигурации.
Пользователи Mariabackup должны иметь привилегии ELOAD, LOCK TABLES и EPLICATION CLIENT.
Чтобы создать резервную копию базы данных с помощью Mariabackup, воспользуйтесь следующей процедурой.
Процедура:
Чтобы создать резервную копию при вводе учетных данных в командной строке, запустите:
$ mariabackup --backup --target-dir <backup_directory> --user <backup_user> --password <backup_passwd>
Параметр target-dir определяет каталог, в котором хранятся файлы резервных копий. Если необходимо выполнить полное резервное копирование, целевой каталог должен быть пустым или не существовать.
Параметры пользователя и пароля позволяют настроить имя пользователя и пароль.
Для создания резервной копии с учетными данными, заданными в файле конфигурации:
Создайте файл конфигурации в каталоге /etc/my.cnf.d/, например, /etc/my.cnf.d/mariabackup.cnf.
Добавьте следующие строки в разделы [xtrabackup] или [mysqld] нового файла:
[xtrabackup]
user=myuser
password=mypassword
Выполните резервное копирование:
$ mariabackup --backup --target-dir <backup_directory>
Примечание: Утилита Mariabackup не считывает параметры в разделе [mariadb] файлов конфигурации. Если на сервере MariaDB указан каталог данных, отличный от каталога по умолчанию, необходимо указать этот каталог в разделах [xtrabackup] или [mysqld] файлов конфигурации, чтобы утилита Mariabackup могла найти каталог данных.
Чтобы указать каталог данных, отличный от каталога данных по умолчанию, включите следующую строку в разделы [xtrabackup] или [mysqld] файлов конфигурации MariaDB:
datadir=/var/mycustomdatadir
Восстановление данных с помощью утилиты Mariabackup
Когда резервное копирование будет завершено, можно восстановить данные из резервной копии с помощью команды mariabackup с одним из следующих вариантов:
–copy-back - функция обратного копирования позволяет сохранить исходные файлы резервных копий.
–move-back - переместить-назад перемещает файлы резервных копий в каталог данных и удаляет исходные файлы резервных копий.
Чтобы восстановить данные с помощью утилиты Mariabackup, воспользуйтесь следующей процедурой.
Предварительные условия:
Убедитесь, что служба mariadb не запущена:
# systemctl stop mariadb.service
Убедитесь, что каталог данных пуст.
Пользователи Mariabackup должны иметь привилегии RELOAD, LOCK TABLES и REPLICATION CLIENT.
Процедура:
Запустите mariabackup команду:
Чтобы восстановить данные и сохранить исходные файлы резервных копий, используйте опцию –copy-back:
$ mariabackup --copy-back --target-dir=/var/mariadb/backup/
Чтобы восстановить данные и удалить исходные файлы резервных копий, используйте опцию ** –move-back**:
$ mariabackup --move-back --target-dir=/var/mariadb/backup/
Исправьте права доступа к файлам.
При восстановлении базы данных Mariabackup сохраняет права доступа к файлам и каталогам резервной копии. Однако Mariabackup записывает файлы на диск от имени пользователя и группы, восстанавливающих базу данных. После восстановления резервной копии может потребоваться настроить владельца каталога данных так, чтобы он соответствовал пользователю и группе для сервера MariaDB, обычно mysql для обоих.
Например, чтобы рекурсивно сменить владельца файлов на пользователя и группу mysql:
# chown -R mysql:mysql /var/lib/mysql/
Запустите mariadb службу:
# systemctl start mariadb.service
Выполнение резервного копирования файловой системы
Чтобы создать резервную копию файлов данных MariaDB в файловой системе, скопируйте содержимое каталога данных MariaDB в папку для резервного копирования.
Чтобы также создать резервную копию текущей конфигурации или файлов журнала, воспользуйтесь дополнительными шагами следующей процедуры.
Процедура:
Остановите mariadb службу:
# systemctl stop mariadb.service
Скопируйте файлы данных в нужное место:
# cp -r /var/lib/mysql /backup-location
При необходимости скопируйте файлы конфигурации в нужное место:
# cp -r /etc/my.cnf /etc/my.cnf.d /backup-location/configuration
При необходимости скопируйте файлы журнала в нужное место:
# cp /var/log/mariadb/* /backup-location/logs
Запустите службу mariadb:
# systemctl start mariadb.service
При загрузке резервных копий данных из расположения резервной копии в каталог /var/lib/mysql убедитесь, что mysql:mysqlявляется владельцем всех данных в /var/lib/mysql:
# chown -R mysql:mysql /var/lib/mysql
Репликация как решение для резервного копирования
Репликация - это альтернативное решение для резервного копирования исходных серверов. Если исходный сервер реплицируется на сервер-реплику, резервные копии могут выполняться на реплике без какого-либо воздействия на источник. Источник все еще может работать, пока закрывается реплика и создается резервная копия данных из реплики.
Предупреждение: Репликация сама по себе не является достаточным решением для резервного копирования. Репликация защищает исходные серверы от аппаратных сбоев, но не обеспечивает защиту от потери данных. Рекомендуется использовать любое другое решение для резервного копирования на реплике вместе с этим методом.
Репликация MariaDB с помощью Galera
В этом разделе описывается, как реплицировать базу данных MariaDB с помощью решения Galera в Sberlinux.
Введение в кластер MariaDB Galera
Репликация Galera основана на создании синхронного кластера MariaDB Galera с несколькими исходными кодами, состоящего из нескольких серверов MariaDB. В отличие от традиционной настройки первичного источника/реплики, где реплики обычно доступны только для чтения, все узлы в кластере MariaDB Galera могут быть доступны для записи.
Интерфейс между репликацией Galera и базой данных MariaDB определяется API репликации набора записей (wsrep API).
Основными особенностями кластера MariaDB Galera являются:
синхронная репликация;
активный-активная топология с несколькими источниками;
чтение и запись на любой узел кластера;
автоматический контроль членства, отказавшие узлы удаляются из кластера;
автоматическое соединение узлов;
параллельная репликация на уровне строк;
прямые клиентские подключения: пользователи могут входить в систему на узлах кластера и работать с узлами напрямую во время выполнения репликации.
Синхронная репликация означает, что сервер реплицирует транзакцию во время фиксации, передавая набор записей, связанный с транзакцией, на каждый узел в кластере. Клиент (пользовательское приложение) подключается непосредственно к системе управления базами данных (СУБД) и испытывает поведение, аналогичное собственному MariaDB.
Синхронная репликация гарантирует, что изменение, произошедшее на одном узле кластера, произойдет на других узлах кластера одновременно.
Таким образом, синхронная репликация имеет следующие преимущества перед асинхронной репликацией:
отсутствие задержки в распространении изменений между конкретными узлами кластера;
все узлы кластера всегда согласованы;
последние изменения не теряются при сбое одного из узлов кластера;
транзакции на всех узлах кластера выполняются параллельно;
причинно-следственная связь по всему кластеру.
Компоненты для построения кластера MariaDB Galera
Чтобы создать кластер MariaDB Galera, необходимо установить в системе следующие пакеты:
mariadb-server-galera - содержит файлы поддержки и скрипты для кластера MariaDB Galera.
mariadb-server - исправляет MariaDB для включения API репликации набора записей (wsrep API). Этот API обеспечивает интерфейс между репликацией Galera и MariaDB.
galera- исправляется MariaDB вверх по течению, чтобы добавить полную поддержку MariaDB. Пакет galera содержит следующее:
Библиотека репликации Galera предоставляет всю функциональность репликации.
Утилита Galera Arbitrator может использоваться в качестве члена кластера, который участвует в голосовании в сценариях с разделенным мозгом. Однако Арбитр Galera не может участвовать в фактическом воспроизведении.
Служба Galera Systemd и скрипт-оболочка Galera, которые используются для развертывания утилиты арбитра Galera. MariaDB включает версию garbdsystemd службы SberLinux и сценарий-оболочку для galera пакета в файлах /usr/lib/systemd/system/garbd.service и /usr/sbin/garbd-wrapper, соответственно. MariaDB также предоставляет вышестоящую версию этих файлов, расположенных по адресу /usr/share/doc/galera/garb-systemd и /usr/share/doc/galera/garbd.service.
Развертывание кластера MariaDB Galera
Предварительные условия
Установите пакеты кластера MariaDB Galera, выбрав поток (версию) из mariadb модуля и указав galera профиль.
В результате устанавливаются следующие пакеты:
mariadb-server-galera;
mariadb-server;
galera.
mariadb-server-galera извлекает mariadb-servergalera пакеты и в качестве своей зависимости.
Конфигурация репликации сервера MariaDB должна быть обновлена перед первым добавлением системы в кластер. Конфигурация по умолчанию распространяется в /etc/my.cnf.d/galera.cnf файле. Перед развертыванием кластера MariaDB Galera установите wsrep_cluster_address параметр в /etc/my.cnf.d/galera.cnf файле на всех узлах, чтобы он начинался со следующей строки:
gcomm://
Для начального узла его можно задать wsrep_cluster_address в виде пустого списка:
wsrep_cluster_address="gcomm://"
Для всех остальных узлов укажите wsrep_cluster_address адрес любого узла, который уже является частью работающего кластера. Например:
wsrep_cluster_address="gcomm://00.0.0.00"
Процедура:
Загрузите первый узел нового кластера, запустив на этом узле следующую оболочку:
# galera_new_cluster
Эта оболочка гарантирует, что демон сервера MariaDB (mysqld) запускается с –wsrep-new-cluster опцией. Этот параметр предоставляет информацию об отсутствии существующего кластера для подключения. Поэтому узел создает новый UUID для идентификации нового кластера.
Примечание: Служба mariadb поддерживает метод systemd для взаимодействия с несколькими серверными процессами MariaDB. Поэтому в случаях с несколькими запущенными серверами MariaDB можно загрузить конкретный экземпляр, указав имя экземпляра в качестве суффикса:
# galera_new_cluster mariadb@node1
Подключите другие узлы к кластеру, выполнив следующую команду на каждом из узлов:
# systemctl start mariadb
В результате узел подключается к кластеру и синхронизируется с состоянием кластера.
Добавление нового узла в кластер MariaDB Galera
Чтобы добавить новый узел в кластер MariaDB Galera, используйте следующую процедуру.
Обратите внимание, что можно использовать эту процедуру для повторного подключения уже существующего узла.
Процедура:
На конкретном узле укажите адрес одному или нескольким существующим членам кластера в параметре wsrep_cluster_address в [mariadb] разделе файла конфигурации / etc/my.cnf.d/galera.cnf:
[mariadb]
wsrep_cluster_address="gcomm://192.168.0.1"
Когда новый узел подключается к одному из существующих узлов кластера, он может видеть все узлы в кластере.
Однако предпочтительно перечислять все узлы кластера в wsrep_cluster_address.
В результате любой узел может присоединиться к кластеру, подключившись к любому другому узлу кластера, даже если один или несколько узлов кластера не работают. Когда все участники соглашаются с членством, состояние кластера изменяется. Если состояние нового узла отличается от состояния кластера, новый узел запрашивает либо инкрементную передачу состояния (IST), либо передачу моментального снимка состояния (SST) для обеспечения согласованности с другими узлами.
Перезапуск кластера MariaDB Galera
Если включены все узлы одновременно, работа кластера завершается, и запущенный кластер больше не существует. Однако данные кластера все еще остаются.
Предупреждение: Если кластер не загружен и mysqld на первом узле запускается только с помощью команды systemctl start mariadb, узел пытается подключиться по крайней мере к одному из узлов, перечисленных в параметре wsrep_cluster_address в файле /etc/my.cnf.d/galera.cnf. Если в данный момент ни один из узлов не запущен, значит перезапуск завершится неудачей.
Пользователь может получить доступ к PostgreSQL данным JSON с помощью индексов. Пример такого запроса представлен ниже:
SELECT ('{ "postgres": { "release": 15 }}'::jsonb)['postgres']['release'];
PostgreSQL поддерживает многодиапазонные типы данных и функцию range_agg для агрегирования многодиапазонных типов данных. Также PostgreSQL улучшает мониторинг и наблюдаемость, при помощи следующих возможностей:
отслеживания выполнения COPY команд и операций с предварительной записью в журнал (WAL);
предоставления статистики по слотам репликации;
отслеживания запроса с помощью нескольких PostgreSQL функций, таких например, как: pg_stat_activity или EXPLAIN VERBOSE.
PostgreSQL поддерживает параллелизм запросов за счет следующих возможностей:
производительности параллельных последовательных проверок;
способности процедурного языка SQL (PL/pgSQL) выполнять параллельные запросы при использовании RETURN QUERY команды;
включения параллелизма в команде REFRESH MATERIALIZED VIEW;
стандартной MERGE команды SQL. Можно использовать MERGE для написания условных инструкций SQL, которые могут включать действия INSERT, UPDATE и DELETE в одной инструкции;
использования регулярных выражений для проверки строк: regexp_count(), regexp_instr(), regexp_like() и regexp_substr();
параметра security_invoker, который можно использовать для запроса данных с разрешениями вызывающего view, а не создателя view. Это поможет убедиться, что вызывающие службы просмотра имеют правильные разрешения для работы с базовыми данными;
повышения производительности, в частности, в средствах архивирования и резервного копирования;
поддержки LZ4 и Zstandard (zstd) алгоритмов сжатия без потерь;
алгоритмов сортировки в памяти и на диске;
файла модуля postgresql.service systemd, который гарантирует, что postgresql служба запускается после подключения к сети.
Вновь созданным пользователям необходимо явно предоставить разрешение с помощью команды: GRANT ALL ON SCHEMA public TO myuser;. Например, как представлено ниже :
postgres=# CREATE USER mydbuser;
postgres=# GRANT ALL ON SCHEMA public TO mydbuser;
postgres=# \c postgres mydbuser
postgres=$ CREATE TABLE mytable (id int);
Использование PostgreSQL#
Сервер PostgreSQL - это надежный и расширяемый сервер баз данных с открытым исходным кодом, основанный на языке SQL. В этой части описывается, как установить и настроить PostgreSQL в системе SberLinux, как создать резервную копию данных PostgreSQL и как выполнить миграцию с более ранней версии PostgreSQL
Начало работы с PostgreSQL
Сервер PostgreSQL предоставляет объектно-реляционную систему баз данных, которая позволяет управлять обширными наборами данных и большим количеством одновременных пользователей. По этим причинам серверы PostgreSQL могут использоваться в кластерах для управления большими объемами данных.
Сервер PostgreSQL включает в себя функции для обеспечения целостности данных, создания отказоустойчивых сред и создания приложений. Это позволяет пользователям расширять базу данных с помощью собственных типов данных пользователей, пользовательских функций или кода с разных языков программирования без необходимости перекомпиляции базы данных.
Установка PostgreSQL
Чтобы установить PostgreSQL, используйте следующую процедуру.
Процедура:
Установите серверные пакеты PostgreSQL, выбрав поток (версию) из модуля postgresql и указав профиль сервера. Например:
# yum module install postgresql:13/server
Суперпользователь postgres создается автоматически.
Инициализируйте кластер баз данных:
# postgresql-setup --initdb
Рекомендуется хранить данные в каталоге по умолчанию /var/lib/pgsql/data.
Запустите postgresql службу:
# systemctl start postgresql.service
Включите запуск службы postgresql при загрузке:
# systemctl enable postgresql.service
Пользователи PostgreSQL
Пользователи PostgreSQL бывают следующих типов:
Пользователь системы postgres UNIX - должен использоваться только для запуска сервера PostgreSQL и клиентских приложений, таких как pg_dump. Не используйте системного пользователя postgres для какой-либо интерактивной работы по администрированию PostgreSQL, например, для создания базы данных и управление пользователями.
Суперпользователь базы данных - суперпользователь PostgreSQL по умолчанию не связан с системным postgres пользователем. Можно ограничить доступ суперпользователя postgres в файле pg_hba.conf, в противном случае никаких других ограничений разрешений не существует. Также можно создавать других суперпользователей базы данных.
Роль с определенными правами доступа к базе данных:
Пользователь базы данных - имеет разрешение на вход по умолчанию
Группа пользователей - позволяет управлять разрешениями для группы в целом.
Роли могут владеть объектами базы данных (например, таблицами и функциями) и могут назначать привилегии объектов другим ролям с помощью команд SQL.
Стандартные привилегии управления базой данных включают SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER, CREATE, CONNECT, TEMPORARY, EXECUTE и USAGE.
Атрибуты роли - это особые привилегии, такие как LOGIN, SUPERUSER, CREATEDB и CREATEROLE.
Примечание: Рекомендуется выполнять большинство задач от имени роли, которая не является суперпользователем. Обычной практикой является создание роли с привилегиями CREATEDB и CREATEROLE и использование этой роли для всего обычного управления базами данных и ролями.
Настройка PostgreSQL
В базе данных PostgreSQL все данные и файлы конфигурации хранятся в одном каталоге, называемом кластером баз данных. Рекомендовано хранить все данные в каталоге по умолчанию /var/lib/pgsql/data/.
Конфигурация PostgreSQL состоит из следующих файлов:
postgresql.conf - используется для настройки кластера базы данных.
postgresql.auto.conf- содержит базовые настройки PostgreSQL аналогично postgresql.conf. Однако этот файл находится под управлением сервера. Он редактируется с помощью системных запросов ALTER и не может быть отредактирован вручную.
pg_ident.conf - используется для сопоставления идентификаторов пользователей из внешних механизмов аутентификации с идентификаторами пользователей PostgreSQL.
pg_hba.conf - используется для настройки аутентификации клиента для баз данных PostgreSQL.
Чтобы изменить конфигурацию PostgreSQL, используйте следующую процедуру.
Процедура:
Отредактируйте соответствующий конфигурационный файл, например, /var/lib/pgsql/data/postgresql.conf.
Перезапустите службу postgresql, чтобы изменения вступили в силу:
# systemctl restart postgresql.service
Резервное копирование данных PostgreSQL
Метод SQL dump основан на создании файла dump с помощью команд SQL. Когда dumpзагружается обратно на сервер базы данных, он воссоздает базу данных в том же состоянии, в котором она была на момент создания dump.
dump SQL обеспечивается следующими клиентскими приложениями PostgreSQL:
pg_dump сбрасывает единую базу данных без общекластерной информации о ролях или табличных пространствах;
pg_dumpall сбрасывает каждую базу данных в данном кластере и сохраняет общекластерные данные, такие как определения ролей и табличных пространств.
По умолчанию команды pg_dump и pg_dumpall записывают свои результаты в стандартный вывод. Чтобы сохранить dump в файле, перенаправьте выходные данные в файл SQL. Результирующий файл SQL может быть либо в текстовом формате, либо в других форматах, которые допускают параллелизм и более детальный контроль восстановления объекта.
Можно выполнить dump SQL с любого удаленного хоста, имеющего доступ к базе данных.
Резервное копирование данных PostgreSQL с помощью dump SQL
Преимущества и недостатки dump SQL
dump SQL имеет следующие преимущества по сравнению с другими методами резервного копирования PostgreSQL: dump SQL - это единственный метод резервного копирования PostgreSQL, который не зависит от версии сервера. Выходные данные утилиты pg_dump могут быть повторно загружены в более поздние версии PostgreSQL, что невозможно для резервного копирования на уровне файловой системы или непрерывного архивирования. dump SQL - это единственный метод, который работает при переносе базы данных на другую машинную архитектуру, например при переходе с 32-разрядного сервера на 64-разрядный. dump SQL предоставляет внутренне согласованные dump. dump представляет собой моментальный снимок базы данных на момент запуска pg_dump. Утилита pg_dump не блокирует другие операции с базой данных во время ее запуска. Недостатком dump SQL является то, что он занимает больше времени по сравнению с резервным копированием на уровне файловой системы.
Выполнение dump SQL с помощью pg_dump
Чтобы создать dump одной базы данных без информации для всего кластера, используйте pg_dump утилиту.
Предварительные условия:
Должен быть доступ на чтение ко всем таблицам, которые необходимо сбросить. Чтобы создать dump всей базы данных, необходимо выполнить команды от имени postgres суперпользователя или пользователя с правами администратора базы данных.
Процедура:
dump базы данных без информации для всего кластера:
$ pg_dump dbname > dumpfile
Чтобы указать, с каким сервером базы данных будет связываться pg_dump, используйте следующие параметры командной строки:
-h Возможность определения хоста.
Хостом по умолчанию является либо локальный хост, либо тот, который указан в переменной PGHOST среды.
-p Опция для определения порта.
Порт по умолчанию указывается PGPORT переменной среды или скомпилированным по умолчанию.
Выполнение dump SQL с помощью pg_dumpall
Чтобы создать dump каждой базы данных в данном кластере баз данных и сохранить данные всего кластера, используйте pg_dumpall утилиту.
Предварительные условия:
Необходимо запускать команды от имени postgres пользователя или пользователя с правами администратора базы данных.
Процедура:
dump всех баз данных в кластере баз данных и сохранение данных всего кластера:
$ pg_dumpall > dumpfile
Чтобы указать, с каким сервером базы данных будет связываться pg_dumpall, используйте следующие параметры командной строки:
-h Возможность определения хоста.
Хостом по умолчанию является либо локальный хост, либо тот, который указан в переменной PGHOST среды.
-pОпция для определения порта.
Порт по умолчанию указывается PGPORT переменной среды или скомпилированным по умолчанию.
-l Опция для определения базы данных по умолчанию.
Этот параметр позволяет выбрать базу данных по умолчанию, отличную от postgres базы данных, созданной автоматически во время инициализации.
Восстановление базы данных, сброшенной с помощью pg_dump
Чтобы восстановить базу данных из dump SQL, который сбросили с помощью утилиты pg_dump, выполните следующие действия.
Предварительные условия
Необходимо запускать команды от имени postgres пользователя или пользователя с правами администратора базы данных.
Процедура
Создайте новую базу данных:
$ createdb dbname
Убедитесь, что все пользователи, которые владеют объектами или были предоставлены разрешения на объекты в выгруженной базе данных, уже существуют. Если такие пользователи не существуют, при восстановлении не удается воссоздать объекты с первоначальным владельцем и разрешениями.
Запустите утилиту psql для восстановления dump текстового файла, созданного утилитой pg_dump:
$ psql dbname < dumpfile
где dumpfile находится выводом pg_dump команды. Чтобы восстановить dump нетекстового файла, pg_restore используйте утилиту:
$ pg_restore non-plain-text-file
Восстановление баз данных, сброшенных с помощью pg_dumpall
Чтобы восстановить данные из кластера баз данных, которые сброшены с помощью утилиты pg_dumpall, выполните следующие действия.
Предварительные условия:
Необходимо запускать команды от имени postgres пользователя или пользователя с правами администратора базы данных.
Процедура:
Убедитесь, что все пользователи, которые владеют объектами или им были предоставлены разрешения на объекты в выгруженных базах данных, уже существуют. Если такие пользователи не существуют, при восстановлении не удается воссоздать объекты с первоначальным владельцем и разрешениями.
Запустите утилиту psql для восстановления dump текстового файла, созданного pg_dumpall утилитой:
$ psql < dumpfile
где dumpfile находится выводом pg_dumpall команды.
Выполнение dump SQL базы данных на другом сервере
Сброс базы данных непосредственно с одного сервера на другой возможен, поскольку pg_dump и psql могут выполнять запись и чтение из каналов.
Процедура:
Чтобы выгрузить базу данных с одного сервера на другой, выполните:
$ pg_dump -h host1 dbname | psql -h host2 dbname
Обработка ошибок SQL во время восстановления
По умолчанию psql продолжает выполняться при возникновении ошибки SQL, в результате чего база данных восстанавливается только частично.
Чтобы изменить поведение по умолчанию, используйте один из следующих подходов при восстановлении dump.
Предварительные условия:
Необходимо запускать команды от имени postgres пользователя или пользователя с правами администратора базы данных.
Процедура:
Сделайте выход psql со статусом выхода 3, если возникает ошибка SQL, установив ON_ERROR_STOP переменную:
$ psql --set ON_ERROR_STOP=on dbname < dumpfile
Укажите, что весь dump восстанавливается, как одна транзакция, чтобы восстановление было завершено или отменено.
При восстановлении dump текстового файла с помощью psql утилиты, выполните:
$ psql -1
При восстановлении dump нетекстового файла с помощью pg_restore утилиты, выполните:
$ pg_restore -e
Обратите внимание, что при использовании этого подхода даже незначительная ошибка может отменить операцию восстановления, которая уже выполнялась в течение многих часов.
Резервное копирование данных PostgreSQL с помощью резервной копии на уровне файловой системы
Чтобы выполнить резервное копирование на уровне файловой системы, скопируйте файлы базы данных PostgreSQL в другое место. Например, можно использовать любой из следующих подходов:
Создайте архивный файл с помощью tar утилиты.
Скопируйте файлы в другое место с помощью rsync утилиты.
Создайте согласованный снимок каталога данных.
Преимущества и недостатки резервного копирования на уровне файловой системы
Резервное копирование на уровне файловой системы имеет следующее преимущество по сравнению с другими методами резервного копирования PostgreSQL:
Резервное копирование на уровне файловой системы обычно выполняется быстрее, чем dump SQL.
Резервное копирование на уровне файловой системы имеет следующие недостатки по сравнению с другими методами резервного копирования PostgreSQL:
Резервное копирование на уровне файловой системы зависит от архитектуры и SberLinux.
Сервер базы данных также должен быть выключен перед резервным копированием данных и восстановлением данных.
Резервное копирование и восстановление определенных отдельных файлов или таблиц невозможно. Резервные копии файловой системы работают только для полного резервного копирования и восстановления всего кластера баз данных.
Выполнение резервного копирования на уровне файловой системы
Чтобы выполнить резервное копирование на уровне файловой системы, используйте следующую процедуру.
Процедура:
Выберите местоположение кластера базы данных и инициализируйте этот кластер:
# postgresql-setup --initdb
Остановите службу postgresql:
# systemctl stop postgresql.service
Используйте любой метод для создания резервной копии файловой системы, например, tar архив:
$ tar -cf backup.tar /var/lib/pgsql/data
Запустите службу postgresql:
# systemctl start postgresql.service
Резервное копирование данных PostgreSQL путем непрерывного архивирования
PostgreSQL записывает каждое изменение, внесенное в файлы данных базы данных, в файл журнала предварительной записи (WAL), который доступен в подкаталоге pg_wal/ каталога данных кластера. Этот журнал предназначен в первую очередь для аварийного восстановления. После сбоя записи журнала, сделанные с момента последней контрольной точки, могут быть использованы для восстановления согласованности базы данных. Введение в непрерывное архивирование
Метод непрерывного архивирования, также известный как оперативное резервное копирование, объединяет файлы WAL с копией кластера баз данных в виде базовой резервной копии, выполняемой на работающем сервере, или резервной копии на уровне файловой системы.
Если требуется восстановление базы данных, можно восстановить базу данных из копии кластера баз данных, а затем воспроизвести журнал из резервных копий файлов WAL, чтобы привести систему в текущее состояние.
При использовании метода непрерывного архивирования необходимо сохранять непрерывную последовательность всех заархивированных файлов WAL, которая простирается как минимум до времени начала последней базовой резервной копии. Таким образом, идеальная частота резервного копирования базы зависит от:
объема хранилища, доступного для архивированных файлов WAL;
максимально возможной продолжительности восстановления данных в ситуациях, когда восстановление необходимо. В случаях, когда с момента последней резервной копии прошло много времени, система воспроизводит больше сегментов WAL, и восстановление, таким образом, занимает больше времени.
Примечание: Не получится использовать SQL-dump pg_dump и pg_dumpall, как части решения для непрерывного архивирования резервных копий. dump SQL создает логические резервные копии и не содержат достаточного количества информации для использования при воспроизведении WAL.
Преимущества и недостатки непрерывного архивирования
Непрерывное архивирование имеет следующие преимущества по сравнению с другими методами резервного копирования PostgreSQL:
При использовании метода непрерывного резервного копирования можно использовать базовую резервную копию, которая не является полностью согласованной, поскольку любое внутреннее несоответствие в резервной копии исправляется путем воспроизведения журнала. Таким образом, Можно выполнить базовое резервное копирование на работающем сервере PostgreSQL.
Моментальный снимок файловой системы не требуется; достаточно tar или аналогичной утилиты архивирования.
Непрерывное резервное копирование может быть достигнуто путем продолжения архивирования файлов WAL, поскольку последовательность файлов WAL для воспроизведения журнала может быть неопределенно длинной. Это особенно ценно для больших баз данных.
Непрерывное резервное копирование поддерживает восстановление на определенный момент времени. Нет необходимости воспроизводить записи WAL до конца. Воспроизведение может быть остановлено в любой момент, и база данных может быть восстановлена до своего состояния в любое время с момента создания резервной копии базы данных.
Если серия файлов WAL постоянно доступна на другой машине, которая была загружена с тем же базовым файлом резервной копии, можно восстановить другую машину с помощью почти текущей копии базы данных в любой момент.
Непрерывное архивирование имеет следующие недостатки по сравнению с другими методами резервного копирования PostgreSQL:
Метод непрерывного резервного копирования поддерживает восстановление только всего кластера баз данных, а не подмножества.
Для непрерывного резервного копирования требуется обширное архивное хранилище.
Настройка архивации WAL
Запущенный сервер PostgreSQL создает последовательность записей журнала предварительной записи (WAL). Сервер физически делит эту последовательность на файлы сегментов WAL, которым присваиваются числовые имена, отражающие их положение в последовательности WAL. Без архивирования WAL файлы сегментов используются повторно и переименовываются в сегменты с более высокими номерами.
При архивировании данных WAL содержимое каждого файла сегмента захватывается и сохраняется в новом расположении перед повторным использованием файла сегмента. Существует несколько вариантов сохранения содержимого, например, каталог, подключенный к NFS, на другом компьютере, на ленточном накопителе или компакт-диске.
Обратите внимание, что записи WAL не включают изменения в файлы конфигурации.
Чтобы включить архивирование WAL, используйте следующую процедуру.
Процедура:
В файле /var/lib/pgsql/data/postgresql.conf:
Установите для параметра конфигурации wal_level значение replica или выше.
Установите для параметра archive_mode значение on.
Укажите команду командной строки в параметре конфигурации archive_command. Можно использовать команду cp, другую команду или сценарий оболочки.
Перезапустите службу postgresql, чтобы включить изменения:
# systemctl restart postgresql.service
Протестируйте свою команду архивирования и убедитесь, что она не перезаписывает существующий файл и что в случае сбоя она возвращает ненулевой статус завершения.
Чтобы защитить данные, убедитесь, что файлы сегмента заархивированы в каталог, у которого нет группового или мирового доступа на чтение.
Примечание: Команда архивирования выполняется только для завершенных сегментов WAL. Сервер, который генерирует мало трафика WAL, может иметь значительную задержку между завершением транзакции и ее безопасной записью в архивное хранилище. Чтобы ограничить возраст неархивированных данных, Можно:
Установить параметр archive_timeout, чтобы заставить сервер переключаться на новый файл сегмента WAL с заданной частотой.
Использовать параметр pg_switch_wal для принудительного переключения сегмента, чтобы гарантировать архивацию транзакции сразу после ее завершения.
Делаем базовую резервную копию
Можно создать базовую резервную копию несколькими способами. В этом разделе описывается простейший способ выполнения резервного копирования базы данных с помощью утилиты pg_basebackup на работающем сервере PostgreSQL.
Процесс базового резервного копирования создает файл истории резервного копирования, который хранится в области архива WAL и назван в честь первого файла сегмента WAL, он нужен для базового резервного копирования.
Файл истории резервного копирования представляет собой небольшой текстовый файл, содержащий время начала и окончания, а также сегменты WAL резервной копии. Если использовали строку метки для идентификации связанного файла dump, можно использовать файл истории резервного копирования, чтобы определить, какой файл dump следует восстановить.
Примечание: Подумайте о том, чтобы сохранить несколько наборов резервных копий, чтобы быть уверенным, что сможете восстановить свои данные.
Чтобы выполнить базовое резервное копирование, используйте следующую процедуру.
Предварительные условия:
Должны быть выполнены команды от имени суперпользователя postgres, пользователя с правами администратора базы данных или другого пользователя, имеющего по крайней мере разрешения на репликацию.
Должны быть сохранены все файлы сегмента WAL, созданные во время и после базовой резервной копии.
Процедура:
Используйте утилиту pg_basebackup для выполнения резервного копирования базы.
Для создания базовой резервной копии в виде отдельных файлов (обычный формат) введите:
$ pg_basebackup -D backup_directory -Fp
Замените backup_directory на желаемое местоположение резервной копии.
Если используете табличные пространства и выполняете базовое резервное копирование на том же хосте, что и сервер, также используйте параметр –tablespace-mapping, в противном случае резервное копирование завершится неудачей при попытке записать резервную копию в то же самое местоположение.
Для создания базовой резервной копии в виде архива tar (tar и сжатый формат) введите:
$ pg_basebackup -D backup_directory -Ft -z
Замените backup_directory на желаемое местоположение резервной копии.
Чтобы восстановить такие данные, необходимо вручную извлечь файлы в нужных местах.
После завершения процесса резервного копирования базы данных безопасно заархивируйте копию кластера базы данных и файлы сегмента WAL, использованные во время резервного копирования, которые указаны в файле истории резервного копирования.
Удалите сегменты WAL, число которых меньше, чем у файлов сегмента WAL, используемых в базовой резервной копии, поскольку они старше базовой резервной копии и больше не нужны для восстановления. Чтобы указать, с каким сервером базы данных будет связываться pg_basebackup, используйте следующие параметры командной строки:
параметр -h для определения хоста.
хост по умолчанию - это локальный хост или хост, указанный переменной среды PGHOST.
Параметр -p для определения порта.
Порт по умолчанию указывается переменной среды PGPORT или скомпилированным по умолчанию.
Восстановление базы данных с помощью непрерывного резервного копирования архива
Чтобы восстановить базу данных с помощью непрерывной резервной копии, используйте следующую процедуру.
Процедура:
Остановите сервер:
# systemctl stop postgresql.service
Скопируйте необходимые данные во временное хранилище.
Предпочтительно скопировать весь каталог данных кластера и любые табличные пространства. Обратите внимание, что для этого в системе требуется достаточно свободного места для хранения двух копий существующей базы данных.
Если недостаточно места, сохраните содержимое каталога pg_wal кластера, который может содержать журналы, и они не были заархивированы до сбоя системы.
Удалите все существующие файлы и подкаталоги в каталоге данных кластера и в корневых каталогах любых используемых вами табличных пространств.
Восстановите файлы базы данных из базовой резервной копии.
Убедитесь, что:
Файлы восстанавливаются с правильным владельцем (пользователь системы базы данных, а не root).
Файлы будут восстановлены с правильными разрешениями.
Символические ссылки в подкаталоге pg_tblspc/ восстановлены правильно.
Удалите все файлы, присутствующие в подкаталоге pg_wal/.
Эти файлы были получены из базовой резервной копии и поэтому устарели. Если pg_wal/ неархивирован, создайте его заново с соответствующими разрешениями.
Скопируйте все неархивированные файлы сегмента WAL, которые сохранили на шаге 2, в pg_wal/.
Создайте файл команды восстановления recovery.conf в каталоге данных кластера и укажите команду командной строки в параметре конфигурации restore_command. Можно использовать команду cp, другую команду или сценарий оболочки. Например:
restore_command = 'cp /mnt/server/archivedir/%f "%p"'
Запустите сервер:
# systemctl start postgresql.service
Сервер перейдет в режим восстановления и продолжит чтение архивированных файлов WAL, которые ему нужны.
Если восстановление прервано из-за внешней ошибки, сервер можно перезапустить, и он продолжит восстановление. Когда процесс восстановления завершен, сервер переименовывает recovery.conf в recovery.done. Это предотвращает случайный повторный переход сервера в режим восстановления после запуска обычных операций с базой данных.
Проверьте содержимое базы данных, чтобы убедиться, что база данных восстановлена в требуемом состоянии.
Если база данных не восстановилась до требуемого состояния, вернитесь к шагу 1. Если база данных восстановилась до требуемого состояния, разрешите пользователям подключаться, восстановив конфигурацию аутентификации клиента в pg_hba.conf файле.
Переход на версию SberLinux PostgreSQL
Пользователи PostgreSQL в SberLinux могут использовать два пути миграции файлов базы данных:
Быстрое обновление с помощью pg_upgrade утилиты.
Сброс и восстановление обновления.
Метод быстрого обновления выполняется быстрее, чем процесс dump и восстановления. Однако в некоторых случаях быстрое обновление не работает, и можно использовать только процесс dump и восстановления. Такие случаи включают:
Обновления кросс-архитектуры.
Системы, использующие расширения plpython или plpython2.
Быстрое обновление не поддерживается при переходе с версий PostgreSQL из коллекций программного обеспечения Linux.
В качестве предварительного условия для перехода на более позднюю версию PostgreSQL создайте резервные копии всех баз данных PostgreSQL.
Сброс баз данных и выполнение резервного копирования файлов SQL требуется для процесса dump и восстановления и рекомендуется для метода быстрого обновления.
Перед переходом на более позднюю версию PostgreSQL ознакомьтесь с примечаниями по совместимости для версии PostgreSQL, а также для всех пропущенных версий PostgreSQL между той, откуда выполняете миграцию, и целевой версией.
Быстрое обновление с помощью утилиты pg_upgrade
Во время быстрого обновления необходимо скопировать двоичные файлы данных в каталог /var/lib/pgsql/data/ и использовать утилиту pg_upgrade.
Следующая процедура описывает переход с системной версии Postgresql 9.2 на SberLinux на версию PostgreSQL 8 с использованием метода быстрого обновления.
Предварительные условия:
Перед выполнением обновления создайте резервную копию всех данных, хранящихся в базах данных PostgreSQL. По умолчанию все данные хранятся в /var/lib/pgsql/data/ каталоге.
Процедура:
В системе SberLinux включите поток (версию), на который необходимо перейти:
# yum module enable postgresql:stream
Замените stream выбранной версией сервера PostgreSQL.
Можно пропустить этот шаг, если хотите использовать поток по умолчанию, который предоставляет PostgreSQL 10.
В системе SberLinux установите пакеты postgresql-server и postgresql-upgrade:
# yum install postgresql-server postgresql-upgrade
Проверьте следующие пункты:
Базовая конфигурация: В системе SberLinux проверьте, использует ли сервер каталог по умолчанию /var/lib/pgsql/data и правильно ли инициализирована и включена база данных. Кроме того, файлы данных должны храниться по тому же пути, который указан в /usr/lib/systemd/system/postgresql.service файле.
Серверы PostgreSQL: В системе может работать несколько серверов PostgreSQL. Убедитесь, что каталоги данных для всех этих серверов обрабатываются независимо.
Серверные модули PostgreSQL: Убедитесь, что серверные модули PostgreSQL установлены в системе SberLinux.
Убедитесь, что служба postgresql не запущена во время копирования данных в исходной и целевой системах.
# systemctl stop postgresql.service
Скопируйте файлы базы данных из исходного местоположения в каталог /var/lib/pgsql/data/ в системе SberLinux.
Выполните процесс обновления, выполнив следующую команду от имени пользователя PostgreSQL:
# postgresql-setup --upgrade
Это запускает процесс pg_upgrade в фоновом режиме.
В случае сбоя postgresql-setup выдает информативное сообщение об ошибке.
Скопируйте предыдущую конфигурацию из /var/lib/pgsql/data-old в новый кластер.
Обратите внимание, что при быстром обновлении предыдущая конфигурация не используется повторно в более новом стеке данных, и конфигурация создается с нуля. Если необходимо объединить старую и новую конфигурации вручную, используйте файлы *.conf в каталогах данных.
Запустите новый сервер PostgreSQL:
# systemctl start postgresql.service
Запустите analyze_new_cluster.sh скрипт, расположенный в домашнем каталоге PostgreSQL:
su postgres -c '~/analyze_new_cluster.sh '
Если необходимо, чтобы новый сервер PostgreSQL автоматически запускался при загрузке, запустите:
# systemctl enable postgresql.service
dump и восстановление обновления
При использовании обновления dump и восстановления необходимо сбросить все содержимое баз данных в файл dump SQL-файла.
Обратите внимание, что обновление dump и восстановления выполняется медленнее, чем метод быстрого обновления, и может потребоваться некоторое ручное исправление в сгенерированном файле SQL.
В системе SberLinux данные PostgreSQL по умолчанию хранятся в каталоге /var/lib/pgsql/data/. В случае версий PostgreSQL для коллекций программного обеспечения Linux каталог данных по умолчанию - /var/opt/rh/collection_name/lib/pgsql/data/ (за исключением postgresql92, который использует каталог /opt/rh/postgresql92/root/var/lib/pgsql/data/).
Чтобы выполнить dump и восстановить обновление, измените пользователя на root.
Следующая процедура описывает переход с системной версии Postgresql 9.2 на SberLinux на версию PostgreSQL 8.
Процедура:
В системе SberLinux запустите сервер PostgreSQL 9.2:
# systemctl start postgresql.service
В системе SberLinux сбросьте содержимое всех баз данных в файл pgdump_file.sql-файл:
su - postgres -c "pg_dumpall > ~/pgdump_file.sql"
Убедитесь, что базы данных были сброшены правильно:
su - postgres -c 'less "$HOME/pgdump_file.sql"'
В результате отображается путь к сброшенному sql-файлу: /var/lib/pgsql/pgdump_file.sql.
В системе SberLinux включите поток (версию), на который необходимо перейти:
# yum module enable postgresql:stream
Замените stream выбранной версией сервера PostgreSQL.
Можно пропустить этот шаг, если хотите использовать поток по умолчанию, который предоставляет PostgreSQL 10.
В системе SberLinux установите пакет postgresql-server:
# yum install postgresql-server
В системе SberLinux инициализируйте каталог данных для нового сервера PostgreSQL:
# postgresql-setup --initdb
В системе SberLinux скопируйте файл pgdump_file.sql в домашний каталог PostgreSQL и проверьте, что файл был скопирован правильно:
su - postgres -c 'test -e "$HOME/pgdump_file.sql" && echo exists'
Скопируйте файлы конфигурации из системы SberLinux:
su - postgres -c 'ls -1 $PGDATA/*.conf'
Файлы конфигурации, которые будут скопированы, представлены ниже:
/var/lib/pgsql/data/pg_hba.conf
/var/lib/pgsql/data/pg_ident.conf
/var/lib/pgsql/data/postgresql.conf
В системе SberLinux запустите новый сервер PostgreSQL:
# systemctl start postgresql.service
В системе SberLinux импортируйте данные из сброшенного sql-файла:
su - postgres -c 'psql -f ~/pgdump_file.sql postgres'
Введение в протоколы электронной почты#
Сообщение электронной почты доставляется с использованием архитектуры клиент/сервер. Программа почтового клиента создает сообщение электронной почты, которое отправляется на сервер. Сообщение пересылается сервером на почтовый сервер получателя, который затем пересылается почтовому клиенту получателя.
Наиболее часто используемые протоколы при передаче электронной почты классифицируются как:
Протокол транспортировки почты (Mail Transport Protocol).
SMTP
Протокол доступа к почте (Mail Access Protocol).
POP
IMAP
В этой главе описываются протоколы SMTP, POP и IMAP.
SMTP#
Простой протокол передачи почты (SMTP) управляет доставкой почты из клиентского приложения на сервер и с исходного сервера на сервер назначения. В SberLinux пользователь может настроить SMTP-сервер на локальном компьютере для администрирования доставки почты. Можно настроить удаленные SMTP-серверы для исходящей почты.
В SberLinux SMTP по умолчанию защищен TLS. Можно ввести ограничения на ретрансляцию, которые не позволят случайным пользователям в Интернете отправлять электронную почту через SMTP-сервер на другие серверы.
Программы SMTP, Sendmail и Postfix доступны через репозитории AppStream и Base OS соответственно.
POP#
Протокол почтового отделения (POP) используется приложениями почтового клиента для получения электронной почты с почтовых серверов. На POP-сервере электронные письма загружаются приложениями почтового клиента. POP совместим со стандартами обмена сообщениями в Интернете, такими как многоцелевые расширения интернет-почты (MIME). Dovecot является POP-сервером по умолчанию и предоставляется пакетом dovecot.
Шифрование Secure Socket Layer (SSL) повышает безопасность за счет аутентификации клиента и сеансов передачи данных в POP.
Чтобы включить SSL-шифрование, используйте:
службу POP3
приложение stunnel
команду starttls
IMAP#
Для организации и хранения электронной почты клиентские приложения протокола доступа к сообщениям Интернета (IMAP) создают, переименовывают или удаляют почтовые каталоги на сервере. IMAP оказывается полезным для пользователей, получающих доступ к своей электронной почте с нескольких компьютеров. Клиентские приложения IMAP кешируют копии сообщений локально, это позволяет пользователям просматривать ранее прочитанные сообщения, не подключаясь к серверу IMAP. IMAP совместим со стандартами обмена сообщениями в Интернете, такими как многоцелевые расширения интернет-почты (MIME).
Для повышения безопасности сервера IMAP можно использовать шифрование Secure Socket Layer (SSL) для аутентификации клиента и сеансов передачи данных. Включите службу imaps или используйте программу stunnel для дополнительной безопасности.
В SberLinux Dovecot является сервером IMAP по умолчанию и предоставляется dovecot пакетом.
Агент почтового транспорта#
Почтовый транспортный агент (MTA) транспортирует сообщения электронной почты между хостами с помощью SMTP. Доставка сообщений электронной почты может включать в себя несколько MTA при достижении пункта назначения. В процессе доставки сообщений использование MTA зависит от MTA или конфигурации доступа в сети.
Sendmail и Postfix - это два MTA, предлагаемых SberLinux.
Отправить почту#
Sendmail доступен через репозиторий AppStream. Sendmail не является агентом пользователя сообщений (MUA). Не получится просматривать входящую почту и управлять ею через пользовательский интерфейс, но она может работать как SMTP-клиент. В sendmail.mc пакет помогает перенастроить отправленную почту.
Установка Sendmail#
Чтобы установить Sendmail, выполните следующие действия:
Процедура:
Обновите все установленные пакеты до последней версии, чтобы все зависимые пакеты были обновлены.
# yum update
Установите Sendmail пакет.
# yum install sendmail
Используйте команду sendmail для отправки электронной почты через командную строку.
For Example:
# echo "This is a test email" | sendmail -s "Test Email"
example@receipientemail.ru
Проверка:
Убедитесь, что sendmail установлен.
$ rpm -qa | grep sendmail
Postfix#
Агент передачи Postfix обрабатывает все процессы, связанные с доставкой почты. Postfix доступен через репозиторий базовой ОС. Однако подпакеты postfix-mysql или postfix-ldap создаются из исходного кода postfix RPM, доступного через репозиторий Appstream.
Файлы конфигурации Postfix хранятся в каталоге /etc/postfix/.
Ниже приведен список часто используемых файлов:
access — используется для контроля доступа и указывает хосты, которым разрешено подключаться к Postfix.
main.cf — глобальный файл конфигурации Postfix, в котором указано множество параметров конфигурации.
master.cf — определяет взаимодействие Postfix с различными процессами для выполнения доставки почты.
transport — сопоставляет адреса электронной почты с узлами ретрансляции. Файл псевдонимов представляет собой настраиваемый список, требуемый почтовым протоколом, который описывает псевдонимы идентификаторов пользователей. Он находится в каталоге /etc и совместно используется Postfix и Sendmail.
Установка Postfix#
Если пакет почтового сервера не выбран во время установки системы, Postfix по умолчанию будет недоступен. Выполните следующие действия для установки Postfix:
Предварительные условия
Система зарегистрирована.
Отключен и удален Sendmail.
Чтобы отключить и удалить Sendmail, введите:
# yum remove sendmail
Настройка межсетевого экрана для отправки и получения электронных писем:
Процедура:
Установите postfix службу.
# yum install postfix
Чтобы запустить и включить postfix службу:
# systemctl start postfix
# systemctl enable postfix
Проверка:
Проверьте, запущена ли postfix служба.
$ rpm -qa | grep postfix
Перезапустите службу postfix в следующих сценариях:
если вывод остановлен/ожидает или не выполняется;
после изменения каких-либо параметров в файлах конфигурации в каталоге /etc/postfix/, чтобы эти изменения вступили в силу.
# service postfix restart
Настройка Postfix#
main.cf является глобальным файлом конфигурации Postfix и задает множество параметров конфигурации.
Процедура:
Ниже приведены несколько параметров, которые можно добавить в файл /etc/postfix/main.cf для настройки Postfix:
myhostname: - замените host.domain.tld на имя хоста почтового сервера.
myhostname = mail.example.ru
mydomain: - замените домен .tld на почтовый сервер домена.
mydomain = example.ru
Примечание: При правильных настройках DNS параметры myhostname и mydomain должны быть автоматически определены и установлены без вмешательства пользователя.
mail_spool_directory:- позволяет указать местоположение файлов почтового ящика.
mail_spool_directory = /var/mail
mynetworks: - добавьте список допустимых и доверенных удаленных SMTP-серверов. Этот параметр должен включать только IP-адреса локальной сети или сетей, разделенных запятыми или пробелами. Добавление адресов локальной сети позволяет избежать несанкционированного доступа к почтовым серверам.
Раскомментируйте строку inet_interfaces = all. Опция all позволяет сделать Postfix доступным из Интернета. С настройкой по умолчанию localhost Postfix будет получать электронные письма только с локального компьютера.
Перезапустите службу postfix.
# systemctl reload postfix
Проверка:
Проверьте сообщения электронной почты между локальными пользователями в системе:
# echo "This is a test message" | mail -s <SUBJECT> <name@mydomain.ru>
Нажмите Ctrl+D, чтобы отправить сообщение.
Чтобы убедиться, что открытая ретрансляция не активна на новом почтовом сервере, отправьте электронное письмо с почтового сервера в домен, на который новый почтовый сервер не принимает почту:
hello mydomain.ru
mail from: name@mydomain.ru
rcpt to: name@notmydomain.ru
554 Relay access denied - the server is not going to relay.
250 OK or similar- the server is going to relay.
The 'rcpt to' option should only accept mail addressed to addresses @mydomain.ru
Примечание: В случае ошибок проверьте файл `/var/log/maillog.
Для автоматической настройки почтовых клиентов и балансировки нагрузки на серверы возможно использование DNS-записей SRV. Для предотвращения сбоев в доставке почты, вызванных временными проблемами с DNS или неправильно настроенными записями SRV, используйте следующие параметры:
use_srv_lookup - включение проверки DNS-записей SRV. По умолчанию значение параметра не указано. Чтобы определить хост и порт почтового шлюза, укажите в глобальном файле конфигурации main.cf:
use_srv_lookup = submission relayhost = example.ru:submissionSMTP-клиент запросит SRV-запись хоста _submission._tcp.example.ru
allow_srv_lookup_fallback - если поиск DNS-записей SRV не удался или запись SRV не существует, Postfix возвращается к поиску по IP-адресам, как если бы поиск DNS-записей SRV не был включен. По умолчанию значение параметра no.
ignore_srv_lookup_error - поиск DNS-записей SRV продолжает функционировать при возникновении ошибок или в случае недоступности записей SRV. По умолчанию значение параметра no.
Установка и настройка Dovecot для IMAP и POP3#
Процессы imap-login и pop3-login, которые реализуют протоколы IMAP и POP3, запускаются демоном master dovecot, включенным в пакет Dovecot. Использование IMAP и POP настраивается через /etc/dovecot/dovecot.conf; по умолчанию dovecot запускает IMAP и POP3 вместе с их защищенными версиями с использованием SSL.
Процедура:
Чтобы установить и настроить dovecot для использования IMAP, выполните следующие действия:
Установите Dovecot службу.
# yum install dovecot
Включите и запустите Dovecot службу.
# systemctl enable dovecot
# systemctl start dovecot
dovecot. conf - это основной конфигурационный файл. Выполните следующие действия, чтобы добавить несколько параметров в /etc/dovecot/dovecot.conf файл:
listen позволяет установить IP-адреса для прослушивания сервисов. Для адресов IPv4 используйте звездочку (*), а для адресов IPV6 - двоеточие (: :)
For example:
listen = *, : :
protocols позволяет указать тип протокола.
For example:
protocols = imap, pop3
mail_location задает местоположение почты отправителя. По умолчанию этот параметр пуст, так как Dovecot автоматически находит почту. Ниже приведен формат параметра mail_location: почтовый ящик-формат:
- <path> [ : key = <value> ... ]Внесите изменения в действие для текущей сессии:
# systemctl restart dovecot
Проверка:
Проверьте статус Dovecot:
# doveadm instance list
Примечание: Чтобы проверить журналы, выполните следующую команду:
# journalctl -u dovecot -b
Защита Dovecot#
Dovecot содержит самозаверяющие SSL-сертификаты в файле /etc/dovecot/conf.d/10-ssl.conf. Поскольку у Dovecot нет сертификатов CA, при подключении к сервису поступает предупреждающее сообщение. Убедитесь, что порты SMTP, IMAP, SSL/TLS IMAP открыты по умолчанию и POP3, используя следующую команду:
# firewall-cmd --permanent --add-port=110/tcp --add-port=995/tcp
# firewall-cmd --permanent --add-port=143/tcp --add-port=993/tcp
# firewall-cmd --reload
Примечание: Чтобы проверить журналы на наличие проблем, связанных с Dovecot, используйте следующую команду journalctl:
# journalctl -u dovecot -b
Настройка межсетевого экрана для отправки и получения электронной почты#
Настройте межсетевой экран для отправки и получения электронных писем, выполнив следующие действия:
Процедура:
Чтобы добавить услугу, введите:
# firewall-cmd --permanent --add-service=servicename
Замените имя службы на любую из служб в каталоге /etc/services. Например, smtp, отправка.
Перезагрузите службу, чтобы изменения вступили в силу:
# systemctl reload firewalld
Защита электронной почты с помощью SSL#
Можно обезопасить общение по электронной почте с помощью самоподписанной сертификации. Сертификация SSL может быть выполнена 2 способами:
1 обратившись в центр сертификации (CA) за сертификатом SSL; 2 путем создания самозаверяющего сертификата.
Процедура:
Выполните следующие действия, чтобы создать самозаверяющий SSL-сертификат для IMAP или POP.
Отредактируйте параметры сертификата в файле /etc/pki/dovecot/dovecot-openssl.cnf по своему усмотрению и введите следующую команду:
# rm -f certs/dovecot.pem private/dovecot.pem# /usr/libexec/dovecot/mkcert.sh
Убедитесь, что есть следующие конфигурации в /etc/dovecot/conf.d/10-ssl.conf файле:
ssl_cert = </etc/pki/dovecot/certs/dovecot.pemssl_key = </etc/pki/dovecot/private/dovecot.pem
Выполните следующую команду, чтобы перезапустить демон dovecot:
# systemctl restart dovecot
Настройка печати#
Печать в SberLinux основана на общей системе печати Unix (CUPS).
В этой документации описывается, как настроить систему для работы в качестве сервера CUPS.
Активация услуги cups#
В этом разделе описывается, как активировать службу cups в системе.
Предварительные условия:
Пакет cups, который доступен в репозитории Appstream, должен быть установлен в системе:
# yum install cups
Процедура:
Запустите cups службу:
# systemctl start cups
Настройте службу cups для автоматического запуска во время загрузки:
# systemctl enable cups
При необходимости проверьте статус cups службы:
$ systemctl status cups
Инструменты настройки печати#
Для выполнения различных задач, связанных с печатью, можно выбрать один из следующих инструментов:
Веб-пользовательский интерфейс CUPS (UI)
Задачи, которые можно выполнить с помощью упомянутых выше инструментов, включают:
добавление и настройка нового принтера;
поддержание конфигурации принтера;
управление классами принтеров.
Доступ и настройка веб-интерфейса CUPS#
В этом разделе описывается доступ к веб-пользовательскому интерфейсу CUPS (web UI) и его настройка для управления печатью через этот интерфейс.
Процедура:
Разрешите серверу CUPS прослушивать соединения из сети, установив порт 631 в /etc/cups/cupsd.conf файле:
#Listen localhost:631Port 631
Предупреждение: Включение прослушивания сервером CUPS порта 631 открывает этот порт для любого адреса, доступного серверу. Поэтому используйте этот параметр только в локальных сетях, которые недоступны из внешней сети. Не рекомендуется настраивать CUPS server на общедоступном сервере.
Разрешите системе получить доступ к серверу CUPS, включив следующую директиву в /etc/cups/cupsd.conf файл:
<Location />Allow from <your_ip_address>Order allow,deny</Location>
Где <your_ip_address> - это реальный IP-адрес системы. Также можно использовать регулярные выражения для подсетей.
Предупреждение: Конфигурация CUPS предлагает директиву Allow from all в тегах <Location>, но не рекомендуется использовать эту директиву только в доверенных сетях. Настройка Allow from all обеспечивает доступ для всех пользователей, которые могут подключаться к серверу через порт 631. Если задаете директиве порта значение 631, а сервер доступен из внешней сети, любой пользователь Интернета может получить доступ к службе CUPS в системе.
Перезапустите cups.service службу:
# systemctl restart cups
Откройте свой браузер и перейдите по адресу http://<IP_address_of_the_CUPS_server>:631/.

Рисунок. Введение в пользовательский интерфейс cups
Доступны все меню, за исключением меню администрирования.
Если нажмете на меню администрирования, получите запрещенное сообщение:

Рисунок. Запрещенное сообщение
Получение административного доступа к веб-интерфейсу CUPS#
В этом разделе описывается, как получить административный доступ к веб-интерфейсу CUPS.
Процедура:
Чтобы иметь возможность получить доступ к меню администрирования в веб-интерфейсе CUPS, включите следующие строки в файл /etc/cups/cupsd.conf:
<Location /admin>Allow from <your_ip_address>Order allow,deny</Location>
Примечание: Замените <your_ip_address> реальным IP-адресом системы.
Чтобы иметь доступ к файлам конфигурации в веб-интерфейсе CUPS, включите следующее в файл /etc/cups/cupsd.conf:
<Location /admin/conf>AuthType DefaultRequire user @SYSTEMAllow from <your_ip_address>Order allow,deny</Location>
Примечание: Замените <your_ip_address> реальным IP-адресом системы.
Чтобы иметь доступ к файлам журнала в веб-интерфейсе CUPS, включите следующее в файл /etc/cups/cupsd.conf:
<Location /admin/log>AuthType DefaultRequire user @SYSTEMAllow from <your_ip_address>Order allow,deny</Location>
Примечание: Замените <your_ip_address> реальным IP-адресом системы.
Чтобы указать использование шифрования для аутентифицированных запросов в веб-интерфейсе CUPS, включите DefaultEncryption в файл /etc/cups/cupsd.conf:
DefaultEncryption IfRequested
С помощью этого параметра можно получить окно аутентификации для ввода имени пользователя, которому разрешено добавлять принтеры, при попытке доступа к меню администрирования. Однако существуют и другие варианты того, как установить DefaultEncryption. Для получения более подробной информации смотрите справочную страницу cupsd.conf.
Перезапустите службу cups:
# systemctl restart cups
Предупреждение: Если не перезапустите службу cups, изменения в /etc/cups/cupsd.conf применяться не будут. Следовательно, не получите административный доступ к веб-интерфейсу CUPS.
Настройка бездрайверной печати#
Как администратор, можно настроить печать без драйвера для использования принтеров или удаленных очередей CUPS без какого-либо специального программного обеспечения.
SberLinux обеспечивает поддержку печати без драйверов для следующих стандартов без драйверов:
IPP Everywhere model поддерживает стандарты AirPrint, IPP Everywhere и Wi-Fi Direct.
Driverless model в cups-filters поддерживает те же стандарты, что и CUPS, и, кроме того, формат документа PCLm.
Эти стандарты используют Internet Printing Protocol (IPP) 2.0 или более поздней версии для передачи настроек принтера и устраняют необходимость установки специальных драйверов для конкретных принтеров. Чтобы использовать принтер без определенного драйвера, необходимо иметь принтер, поддерживающий один из стандартов без драйверов. Чтобы определить, поддерживает ли принтер стандарт без драйверов, выберите один из следующих вариантов:
Обратитесь к спецификации принтера и найдите стандартную поддержку без драйверов или обратитесь к своему поставщику.
Ищите сертифицированные принтеры.
Определите поддержку без драйверов на основе атрибутов принтера с помощью команды ipptool.
Чтобы установить очередь печати на клиенте с моделью IPP Everywhere, которая указывает на очередь на сервере печати, необходимо иметь как удаленный сервер печати, так и клиент с установкой SberLinux.
Примечание: Можно проверить поддержку без драйверов на основе атрибутов сервера печати с помощью команды ipptool.
Определение атрибутов принтера с помощью ipptool
Чтобы определить, поддерживает ли принтер или сервер печати стандарт без драйверов, можно проверить атрибуты принтера с помощью команды *ipptool доступной в пакете ipptool.
Процедура:
Отобразите атрибуты принтера или сервера печати:
$ ipptool -tv <URI> get-printer-attributes.test
Примечание: Замените <URI> на URI принтера, например ipp://<hostname_or_IP_address>:631/ipp/printing for printers или ipp://<hostname_or_IP_address>:631/printers/<remote_print_queue> для удаленных очередей печати с серверов печати.
Принтер или сервер печати поддерживают печать без драйвера, если:
атрибут, поддерживаемый версией IPP, содержит версию 2.0 или выше для протокола IPP 2.0;
атрибут, поддерживаемый форматом документа, содержит один из поддерживаемых форматов документов, перечисленных в стандартах печати без драйверов.
Добавление принтера без драйверов в веб-интерфейсе CUPS
Можно добавить принтер без драйверов в веб-интерфейс CUPS и использовать его для печати непосредственно из приложения на сетевых принтерах или серверах печати с использованием CUPS, без установки каких-либо специальных драйверов или программного обеспечения для конкретных принтеров.
Предварительные условия:
Существует административный доступ к веб-интерфейсу CUPS.
Принтер или сервер печати имеет стандартную реализацию IPP Everywhere.
Открыт порт IPP: порт 631 для IPP или порт 443 для безопасной печати с помощью IPPS.
Включена связь ipp и ipp-клиента в межсетевом экране сервера печати.
Если пунктом назначения является другой сервер CUPS, разрешите удаленный доступ на удаленном сервере или, если используете сетевой принтер, откройте веб-интерфейс пользователя, найдите параметры, связанные с IPP: IPP или AirPrint, и включите эти параметры.
Процедура:
Запустите веб-интерфейс CUPS.
В браузере перейдите на localhost:631 и выберите вкладку Administration.
В разделе Printers нажмите кнопку Add printer.

Рисунок. Добавить принтер в cups ui 2
Аутентифицируйтесь с помощью имени пользователя и пароля.

Рисунок. Добавить принтер в cups ui auth n
Примечание: Чтобы добавить новый принтер с помощью веб-интерфейса CUPS, необходимо пройти аутентификацию как пользователь, который принадлежит к группе, определенной директивой SystemGroup в /etc/cups/cups-files. Группами по умолчанию являются:
root
sys
wheel
На вкладке Administrator в разделе Add Printer выберите один из вариантов:
Internet Printing Protocol (ipp);
Internet Printing Protocol (ipps) и нажмите кнопку Continue.
В поле Connection введите URI устройства и нажмите кнопку Continue.
Примечание: URI состоит из следующих частей:
протокол ipp:// или ipps:// если принтер или сервер печати поддерживают шифрование:
имени хоста или IP-адрес принтера;
порта;
части ресурса /ipp/print для принтеров или
/printers/<remote_queue_name>для удаленных очередей CUPS.
Например: ipp://myprinter.mydomain:631/ipp/print или ipp://myserver.mydomain:631/printers/myqueue.
Добавьте сведения о новом принтере: название, описание и местоположение. Чтобы настроить общий доступ к принтеру по сети, установите флажок возле раздела Share this printer.
Примечание: Имя - единственное обязательное поле, остальные поля необязательны.
В раскрывающемся меню Make выберите производителя принтера и нажмите Continue.
Чтобы продолжить установку принтера без драйвера, в выпадающем меню выберите IPP Everywhere и нажмите Add Printer.
После добавления нового принтера можно установить параметры печати по умолчанию по выбору.

Рисунок. Веб-интерфейс cups устанавливает значения по умолчанию n2
Последнее окно подтверждает, что установлен принтер без драйвера и он готов к использованию.
Добавление принтера с классическим драйвером в веб-интерфейсе CUPS#
В этом разделе описывается, как добавить новый принтер с помощью веб-интерфейса пользователя CUPS.
Предварительные условия:
Существует административный доступ к веб-интерфейсу CUPS.
Процедура:
Запустите веб-интерфейс CUPS.
В браузере перейдите на localhost:631 и выберите вкладку Administration.
В разделе Printers нажмите кнопку Add printer.

Рисунок. Добавить принтер в cups ui 2
Аутентифицируйтесь по имени пользователя и паролю:

Рисунок. Добавить принтер в cups ui auth n
Примечание: Чтобы добавлять новый принтер с помощью веб-интерфейса CUPS, необходимо пройти аутентификацию как пользователь, который принадлежит к группам, определенным директивой SystemGroup в /etc/cups/cups-files.
Группы по умолчанию:
root
sys
wheel
Если подключен локальный принтер или CUPS находит доступный сетевой принтер, выберите принтер. Если ни локальный, ни сетевой принтер не доступны, выберите один из типов принтеров из других сетевых принтеров (Other Network Printers), например APP Socket/HP Jet direct, введите IP-адрес принтера, а затем нажмите Continue.
Если выбран, например, APP Socket/HP Jet direct, как показано выше, введите IP-адрес принтера, а затем нажмите Continue.
Можно добавить дополнительные сведения о новом принтере, такие как название, описание и местоположение. Чтобы настроить общий доступ к принтеру по сети, установите флажок Share This Printer.
Выберите производителя принтера, а затем нажмите Continue.
При необходимости можно предоставить файл описания принтера postscript (PPD), который будет использоваться в качестве драйвера для принтера, нажав внизу кнопку Browse….
Выберите модель принтера, а затем нажмите кнопку Add Printer.
После добавления принтера в следующем окне можно задать параметры печати по умолчанию.

Рисунок. Веб-интерфейс cups устанавливает значения по умолчанию n2
После нажатия кнопки Set Default Options получите подтверждение того, что новый принтер был успешно добавлен.

Рисунок. Добавить принтер в cups ui окончательное подтверждение
Этапы проверки:
Распечатайте тестовую страницу:
Перейдите в меню Printers и выберите Maintenance → Print Test Page.
Настройка принтера в веб-интерфейсе CUPS#
В этом разделе описывается, как настроить новый принтер и как поддерживать конфигурацию принтера с помощью веб-интерфейса CUPS.
Предварительные условия:
Существует административный доступ к веб-интерфейсу CUPS, как описано в разделе Получение административного доступа к веб-интерфейсу CUPS.
Процедура:
Нажмите меню Printers, чтобы просмотреть доступные принтеры, которые можно настроить.
Выберите один принтер, который нужно настроить.
Выполните выбранную вами задачу, используя одно из доступных меню:
Выберите Maintenance в первом выпадающем меню.
Выберите Administration во втором выпадающем меню.
Также можно проверить выполненные задания печати или все активные задания печати, нажав кнопки Show Completed Jobs или Show All Jobs.
Этапы проверки:
Распечатайте тестовую страницу:
Перейдите в меню Printers и выберите Maintenance → Print Test Page.
Настройка параметров печати с помощью веб-интерфейса CUPS#
В этом разделе описывается, как настроить общие параметры печати, такие как размер и тип носителя, качество печати или цветовой режим, в веб-интерфейсе CUPS.
Предварительные условия:
Существует административный доступ к веб-интерфейсу CUPS.
Процедура:
Перейдите в меню администрирования и выберите Maintenance → Set Default Options.

Рисунок. Веб-интерфейс cups устанавливает значения по умолчанию n1
Установите параметры печати.

Рисунок. Веб-интерфейс cups устанавливает значения по умолчанию n2
Установка сертификатов для сервера печати#
Чтобы установить сертификаты для сервера печати, можно выбрать один из следующих вариантов:
автоматическую установку с использованием самозаверяющего сертификата;
установку вручную с использованием сертификата и закрытого ключа, сгенерированного центром сертификации.
Предварительные условия:
Для демона cupsd на сервере:
Установите следующую директиву в /etc/cups/cupsd.conf файле:
Encryption Required
Перезапустите cups службу:
$ sudo systemctl restart cups
Автоматическая установка с использованием самозаверяющего сертификата
С помощью этой опции CUPS автоматически генерирует сертификат и ключ.
Примечание: Самозаверяющий сертификат не обеспечивает такой надежной защиты, как сертификаты, созданные центрами сертификации Identity Management (IdM), Active Directory (AD), но его можно использовать для серверов печати, расположенных в защищенной локальной сети.
Процедура:
Чтобы получить доступ к веб-интерфейсу CUPS, откройте свой браузер и перейдите по ссылке
https://<server>:631.
Где <server> - это либо IP-адрес сервера, либо имя хоста сервера.
Примечание: Когда CUPS подключается к системе в первый раз, браузер показывает предупреждение о том, что самозаверяющий сертификат представляет потенциальную угрозу безопасности.
Чтобы подтвердить, что продолжить безопасно, нажмите кнопку Advanced…

Рисунок. Предупреждение о сертификате пользовательского интерфейса cups
Нажмите кнопку Accept the Risk and Continue.
CUPS начнет использовать самогенерированный сертификат и ключ.
Примечание: Когда получен доступ к веб-интерфейсу CUPS после автоматической установки, браузер отображает значок предупреждения в адресной строке. Это связано с тем, что добавлено исключение безопасности, подтвердив предупреждение об угрозе безопасности. Если необходимо удалить этот предупреждающий значок навсегда, выполните установку вручную с помощью сертификата и закрытого ключа, сгенерированного центром сертификации.
Установка вручную с использованием сертификата и закрытого ключа, сгенерированного центром сертификации
Для серверов печати, расположенных в общедоступной сети, или для постоянного удаления предупреждения в браузере импортируйте сертификат и ключ вручную.
Предварительные условия:
Существуют файлы сертификатов и закрытых ключей, созданные IdM, AD.
Процедура:
Скопируйте файлы .crt и .keyв каталог /etc/cups/ssl системы, в которой необходимо использовать веб-интерфейс CUPS.
Переименуйте скопированные файлы в
<hostname>.crtи<hostname>.key.
Замените <hostname> именем хоста системы, к которой необходимо подключить веб-интерфейс CUPS.
Установите следующие разрешения для переименованных файлов:
* # chmod 644 /etc/cups/ssl/<hostname>.crt
* # chmod 644 /etc/cups/ssl/<hostname>.key
* # chown root:root /etc/cups/ssl/<hostname>.crt
* # chown root:root /etc/cups/ssl/<hostname>.key
Перезапустите cups службу:
# systemctl restart cupsd
Использование samba для печати на сервер печати Windows с проверкой подлинности Kerberos#
С помощью оболочки samba-krb5-printing пользователи Active Directory (AD), вошедшие в SberLinux, могут пройти аутентификацию в Active Directory (AD) с помощью Kerberos, а затем выполнить печать на локальном сервере печати CUPS, который перенаправляет задание печати на сервер печати Windows.
Преимущество этой конфигурации заключается в том, что администратору CUPS в SberLinux не нужно сохранять фиксированное имя пользователя и пароль в конфигурации. CUPS аутентифицируется в AD с помощью тикета Kerberos пользователя, отправившего задание на печать.
В этом разделе описывается, как настроить CUPS для этого сценария.
Предварительные условия:
Принтер, который нужно добавить в локальный экземпляр CUPS, является общим на сервере печати AD.
Получено присоединение к хостингу SberLinux в качестве участника AD.
CUPS установлен и служба cups запущена.
Файл описания принтера PostScript (PPD) для принтера хранится в каталоге /usr/share/cups/model/.
Процедура:
Установите пакеты samba-krb5-printing, samba-client и krb5-workstation:
# yum install samba-krb5-printing samba-client krb5-workstation
При необходимости аутентифицируйтесь как администратор домена и отобразите список принтеров, которые совместно используются на сервере печати Windows:
# smbclient -L win_print_srv.ad.example.ru -U administrator@AD_KERBEROS_REALM --use-kerberos=required
Sharename Type Comment
--------- ---- -------
...
Example Printer Example
...
При необходимости отобразите список моделей CUPS, чтобы определить название PPD принтера:
lpinfo -m
...
samsung.ppd Samsung M267x 287x SeriesPXL
...
Потребуется имя файла PPD при добавлении принтера на следующем шаге.
Добавьте принтер в CUPS:
# lpadmin -p "example_printer" -v smb://win_print_srv.ad.example.ru/Example -m samsung.ppd -o auth-info-required=negotiate -E
Команда использует следующие параметры:
-p имя_принтера задает имя принтера в CUPS.
-v URI_to_Windows_printer задает URI для принтера Windows. Используйте следующий формат: smb://host_name/printer_share_name.
-m PPD_file задает файл PPD, используемый принтером.
-o auth-info-required=negotiate настраивает CUPS на использование аутентификации Kerberos при пересылке заданий печати на удаленный сервер.
-E включает принтер, и CUPS принимает задания для принтера.
Этапы проверки:
Войдите на хост SberLinux как пользователь домена AD.
Аутентифицируйтесь как пользователь домена AD:
# kinit domain_user_name@AD_KERBEROS_REALM
Распечатайте файл на принтере, который был добавлен на локальный сервер печати CUPS:
# lp -d example_printer file
Работа с логами CUPS#
Типы журналов CUPS
CUPS предлагает три различных вида CUPS logs:
Error log (Журнал ошибок) - хранит сообщения об ошибках, предупреждения и отладочные сообщения.
Access log (Журнал доступа) - хранит сообщения о том, сколько раз осуществлялся доступ к клиентам CUPS и веб-интерфейсу.
Page log (Журнал страниц) - хранит сообщения об общем количестве страниц, напечатанных для каждого задания печати.
Доступ ко всем журналам CUPS
Можно перечислить все журналы CUPS, доступные в systemd-journald.
Процедура:
Отфильтруйте CUPS logs:
$ journalctl -u cups
Доступ к журналам CUPS для определенного задания на печать
Если нужно найти журнал CUPS для определенного задания печати, можно сделать это, отфильтровав журналы по номеру задания печати.
Процедура:
Отфильтруйте журналы для конкретного задания печати:
$ journalctl -u - JID=N
Где N- номер задания на печать.
Доступ к журналам CUPS за определенный период времени
Если нужно получить доступ к журналам CUPS в течение определенного периода времени, можно отфильтровать журналы в systemd-journald.
Процедура:
Фильтровать журналы в течение указанного периода времени:
$ journalctl -u cups --since=YYYY-MM-DD --until=YYYY-MM-DD
Где YYYY - год, ММ - месяц, а DD - день.
Настройка расположения журнала CUPS
В этом разделе описывается, как настроить расположение журналов CUPS.
В SberLinux журналы CUPS по умолчанию регистрируются в systemd-journald, что обеспечивается следующей настройкой по умолчанию в /etc/cups/cups-files.conf файле:
ErrorLog syslog
Примечание: Рекомендуется сохранять расположение журналов CUPS по умолчанию.
Если необходимо отправить журналы в другое место, необходимо изменить настройки в файле /etc/cups/cups-files.conf следующим образом:
ErrorLog <your_required_location>
Предупреждение: Если измените расположение журнала CUPS по умолчанию, могут возникнуть проблемы с SELinux.