Разграничение доступа к данным
Описание
Разграничение доступа к данным в СУБД Pangolin происходит путем настройки ролевой модели.
Ролевая модель – это основополагающий документ, четко определяющий необходимый набор прав доступа ко всем элементам информационной системы для всех ее пользователей. На основании данных, заложенных в ролевую модель, становится возможным назначать права доступа сотрудникам и проводить аудит. Ключевое преимущество ролевого управления – это гибкая управляемость полномочиями и четкое их разграничение, что существенно упрощает выдачу прав и усиливает безопасность информационных систем.
В общем случае, роль – это набор полномочий, который необходим пользователю или группе пользователей для выполнения определенных производственных задач. Каждый сотрудник может иметь одну или несколько ролей, а каждая роль может содержать от одного до множества полномочий, которые разрешены пользователю в рамках этой роли. Роли могут быть привязаны к определенным должностям, подразделениям или функциональным обязанностям работников.
Ролевая модель в скриптах автоматизации
В скриптах автоматизации Pangolin существует ролевая модель, которая была разработана в версии 5.4.0. Ее использование является опциональной возможностью при развертывании СУБД. В данном разделе она рассматривается детально.
Дополнительно в версии 6.2.0 была разработана возможность переназначение прав на определенные файлы, службы и директории таким образом, чтобы непривилегированные пользователи могли управлять ими без необходимости повышения прав. Функциональность разработана для удобства сопровождения СУБД в процессе эксплуатации. Подробнее об этом в подразделе «Управление».
Структура ролей
Для обеспечения контроля доступа к защищаемым элементам системы применяется система разграничения доступа, основанная на ролях. Здесь и ниже под ролевой моделью понимается стандартная ролевая модель СУБД Pangolin, устанавливаемая ранее скриптами автоматизации.
Конфигурирование ролевой модели вынесено из скриптов. Ее конфигурирование опционально и может быть выполнено с помощью скриптов конфигурирования ролевой модели (подробнее смотрите раздел «Настройка»), включенных в состав дистрибутива. При необходимости данные скрипты могут быть модифицированы (например, в случае, если в какой-либо функциональности нет необходимости), либо заменены альтернативной ролевой моделью.
В рамках структуры ролей рассматриваются следующие типы:
- административные, использующиеся для системного управления кластером и прикладного администрирования данных;
- прикладные, предназначенные для пользователей, отвечающих за наполнение БД данными;
- специальные, создающиеся для соответствия принятым в организации подходам к аудиту, мониторингу, резервному копированию, восстановлению и др.
При настройке ролевой модели создаются следующие групповые роли:
| Групповая роль | Назначение |
|---|---|
db_admin | Административная роль, обладающая привилегией superuser. Владелец TABLESPACE, DATABASE. Выдается администраторам для управления СУБД |
as_admin | Административная роль — владелец схемы. Выдается администраторам АС. Используется для создания новых объектов в БД (таблиц, функций, последовательностей) и их изменения. Является владельцем пользовательской схемы. Также выдается доменным или локальным ТУЗ для инструментов автоматизации |
as_TUZ | Прикладная роль для доступа к пользовательским данным. Имеет привилегии для совершения DML-операций с объектами схемы. Работает в пуле соединений с БД, а также подключается через Pangolin Pooler |
as_admin_read | Административная роль, отличающаяся от as_admin тем, что предназначена только для просмотра |
all-sa-pam-group | Выдается учетным записям, используемым для доступа через PAM (Privileged Access Management). Используется исключительно для организации аутентификации, конфигурирования pg_hba.conf |
Дополнительно создаются следующие специальные инфраструктурные ТУЗ:
| Инфраструктурная роль | Назначение |
|---|---|
backup_user | ТУЗ с локальной аутентификации для интеграции с СРК |
zabbix_oasubd | ТУЗ с локальной аутентификацией для интеграции с системой мониторинга |
auditor | ТУЗ с локальной аутентификацией для проведения аудита безопасности |
pgbouncer | ТУЗ с локальной аутентификацией для подключения локальной службы Pangolin Pooler |
patroni | ТУЗ с локальной аутентификацией для подключения локальной службы Pangolin Manager |
all-sa-pam19002 | ТУЗ с внешней аутентификацией для подключения через АС PAM администраторов БД |
all-sa-pam19002_ro | ТУЗ с внешней аутентификацией для подключения через АС PAM администраторов систем с привилегиями только на чтение |
Рекомендации по работе с УЗ для администраторов:
- ежедневные задачи администрирования силами администраторов «вручную» должны осуществляться только под персонализированными УЗ;
- права доступа для каждой УЗ/ТУЗ должны быть минимизированы, исходя из использования;
- в руководство должно включаться рекомендуемое минимальное типовое конфигурирование ролевой модели (РМ);
- при развертывании нового экземпляра СУБД Pangolin, минимальная рекомендуемая типовая РМ должна конфигурироваться автоматически.
Матрица несовместимости ролей
В таблице используются обозначения уровней совместимости:
Н- не совместимо;Н/Ж- нежелательно;С- совместимо.
sec_admin_role (администратор безопасности) | superuser (администратор БД, включая postgres) | Роли RBAC Pangolin | |
|---|---|---|---|
sec_admin_role (администратор безопасности) | Н | Н | |
superuser (администратор БД, включая postgres) | Н | С | |
| Роли RBAC Pangolin | Н | С |
Групповая рольsec_admin_role относится к средствам защиты информации (СЗИ) и создается при запуске утилиты инициализации каталога безопасности. Подробнее в разделе «Защита данных от привилегированных пользователей» подразделе «Утилита инициализации каталога безопасности».
Операции, которые не должны выполняться одним лицом
Следующие операции имеют критическое значение для безопасности, поэтому не могут быть выполнены одним лицом:
-
Выполнение общих настроек, влияющих на возможность несанкционированного доступа к передаваемой или хранимой информации:
- настройки защиты сетевых соединений;
- настройки состава загружаемых модулей расширения;
- настройки состава доверенных серверов аутентификации;
- настройки включения прозрачного защитного преобразования данных (TDE).
-
Управление доступом к объектам баз данных, содержащих конфиденциальную или секретную информацию.
Имеется опасность свободного использования расширения pageinspect и схожих с ним на БД с включенной защитой от привилегированных пользователей, в связи с тем что pageinspect позволяет посмотреть рассекреченные данные и не учитывает защиту от привилегированных пользователей.
Связь ролей с объектами БД
При настройке ролевой модели создаются стандартные объекты БД и назначается привилегии для их использования. Такими объектами являются:
- пользовательское табличное пространство — создается на уровне кластера;
- пользовательская база данных — уровень кластера;
- пользовательская схема — уровень определенной базы данных.
Табличное пространство создается в директории /pgdata/{version}/tablespaces/ (может различаться в зависимости от мажорной версии). Владельцем табличного пространства является db_admin, а права на доступ выдаются роли as_admin.
В дополнение к стандартным базам данных ядра PostgreSQL (template0, template1, postgres) создается пользовательская БД. Владелец данной БД — db_admin. Права на использование (USAGE) и логин на данную БД есть по умолчанию у всех вновь создаваемых ролей.
Схема и объекты схемы
Владельцем пользовательской схемы является as_admin. Права на использование схемы выдаются роли as_TUZ.
Для использования схемы предоставляются две привилегии: USAGE и CREATE. Для создания новых объектов в схеме нужна привилегия CREATE. Для обращения к объектам схемы (при условии, что есть права на них) нужна привилегия USAGE. Привилегия CREATE есть только у роли as_admin.
Внутри схемы хранятся объекты БД (таблицы, индексы, функции, и другие). Для каждого типа объекта существует свой набор привилегий. Владельцем объекта становится роль, активная в момент выдачи SQL-запроса на его создание. Так как требуется, чтобы владельцем объектов БД была групповая роль as_admin, то для обеспечения данного условия используются следующие механизмы:
-
При создании объектов администратор, выполняющий данную задачу, должен выдавать команду
SET ROLE as_admin. Для автоматизации некоторых задач, а также в случае, когда другие роли данной УЗ не используются, можно один раз настроить УЗ для работы в ролиas_admin, выдавALTER ROLE <rolename> SET ROLE as_admin. В дальнейшем данная УЗ всегда будет работать какas_admin. -
Владельцем объектов может быть только групповая роль, поэтому в УЗ администраторов, имеющих права на создание объектов отключена опция
INHERIT. Для конечных пользователей БД (ТУЗ) отключатьINHERITне требуется — они не имеют привилегий на создание объектов, но зато автоматически наследуют все другие необходимые привилегии.Роль
as_admin, которая имеет привилегию на создание объектов, нельзя унаследовать (она имеет свойствоNOINHERIT). Это связано с тем, что на момент инсталляции неизвестно, какие пользователи будут работать с БД в дальнейшем и какие привилегии им будут назначены. Групповые роли позволяют систематизировать пользовательскую структуру. А для того, чтобы владельцем объекта становилась именно рольas_admin, необходимо явно переключаться на нее с помощью запроса:SET ROLE as_admin. -
После создания объекта роль
as_adminпредоставляет необходимую привилегию роли, использующей объект (это в первую очередьas_TUZ). Данный процесс можно облегчить, если назначитьdefault privilegesсоздающей роли (as_admin). С помощьюdefault privilegesправа заранее предоставляются на объекты, которые будут создаваться в будущем в данной схеме.
Настройка
Установка ролевой модели configure_roles
Для упрощения развертывания ролевой модели выполнено добавление настройки configure_roles в рамках инструмента Pangolin Installer. Выполнение данной роли предполагается после развертывания СУБД Pangolin. В данном случае будет выполнена настройка ролевой модели, пользовательской БД и расширений после чистой установки Pangolin.
Выполните шаги:
-
Произведите проверку наличия установленного пакета
pangolin-installer-venv-controllerверсии продукта для которой планируется настройка СЗИ:dnf list installed | grep pangolin-installer-venv-controllerВ случае отсутствия данного пакета произведите его установку:
dnf install -y pangolin-installer-venv-controller -
Активируйте виртуальное окружение для запуска скрипта:
source /opt/pangolin-installer/bin/activate -
Перейдите в каталог
installerраспакованного дистрибутива:cd <distrib_path>/installerГде
distrib_path- абсолютный путь до распакованного дистрибутива. -
Запустите настройку ролевой модели, для этого выполните следующую команду:
Внимание!Перед запуском настройки ролевой модели с помощью инструмента Pangolin Installer убедитесь, что в конфигурационном файле
config.ymlуказан пароль от СУБД в параметреpostgres_db_pass.pangolin-installer terminal -c <path_to_config>/config.yml -a configure_rolesГде
<path_to_config>- полный путь к конфигурационному файлуconfig.yml.
Управление
Переназначение прав для непривилегированных пользователей
В СУБД Pangolin возможно переназначение прав на определенные файлы, службы и директории таким образом, чтобы непривилегированные пользователи могли управлять ими без необходимости повышения прав.
Реализованный механизм переназначения прав также позволяет непривилегированному пользователю восстанавливать ряд компонентов в случае неудачного обновления.
Процесс отказа от использования пользователя root в эксплуатации направлен на снижение зависимости системы от привилегированного доступа. Это позволит сократить количество операций, требующих вмешательства администратора, и упростит работу системы в целом.
Особенности реализации
После внедрения возможности переназначения прав, объем команд, указанных в файле sudoers, будет сокращен, так как часть функциональностей перестанет требовать выполнения от имени привилегированного пользователя. Таким образом, эксплуатация системы станет более безопасной и удобной, а риск ошибок при использовании привилегированных учетных записей снизится.
В текущей реализации установки Pangolin все юнит-файлы компонентов размещаются по пути /lib/systemd/system/. Это означает, что без использования прав суперпользователя редактировать или восстанавливать данные файлы невозможно. При ручном восстановлении стенда после неудачного обновления некоторые операции также требуют прав администратора, что может вызывать дополнительные сложности и повышать вероятность ошибок.
В рамках новой функциональности предполагается изменить пути расположения сервисных файлов (/home/user_name/.config/systemd/user/), а так же владельцев (owner:group) для ряда файлов, которые ранее требовали доступа от имени привилегированного пользователя. После этих изменений восстановление и обслуживание сервисных файлов станет возможным без необходимости использования root, что повысит гибкость, безопасность и удобство эксплуатации системы.
Целью реализации данной функциональности является уменьшение использования привилегированного пользователя при работе с функциональностями СУБД Pangolin, а так же манипуляций при эксплуатации.
Настройка
Параметр systemctl_unit_on_user конфигурационного файла утилиты установки отвечает за расположение unit-файлов компонентов Pangolin в пользовательской директории postgres и kmadmin_pg. Если данный параметр будет включен, то установка unit-файлов компонентов производится в директорию /home/user_name/.config/systemd/user. В случае, когда параметр выключен, установка производится в системную директорию сервисов /lib/systemd/system/, а для редактирования и управления файлами необходимы права привилегированного пользователя.
После создания пользователей kmadmin_pg и postgres необходимо выполнить команды:
loginctl enable-linger postgres
loginctl enable-linger kmadmin_pg
Запуск будет осуществляться за счет добавления в .bash_profile пользовательских окружений postgres и kmadmin_pg следующих переменных:
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
Для запуска/остановки/перезагрузки службы при вызове systemctl утилиты требуется дополнительный аргумент --user:
systemctl --user start pangolin-dbms
systemctl --user stop pangolin-dbms
systemctl --user restart pangolin-dbms
В зависимости от включения функциональности видоизменяется unit-файл компонентов.
Пример включенной функциональности с расположением unit-файла в пользовательском каталоге:
[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target
[Service]
Type=simple
# Read in configuration file if it exists, otherwise proceed
Environment="PG_LICENSE_PATH=/opt/pangolin-license"
Environment="PG_LD_LIBRARY_PATH=/opt/pangolin-dbms/lib"
Environment="PG_PLUGINS_PATH=/opt/pangolin-dbms/lib"
Environment="PATRONI_PLUGINS_PATH=/opt/pangolin-manager/lib/postgresql_se_libs"
Environment="LD_LIBRARY_PATH=/opt/pangolin-manager/lib/postgresql_se_libs"
Environment="PYTHONPATH=/opt/pangolin-manager/lib/python3/site-packages:/opt/pangolin-manager/lib64/python3/site-packages:/opt/pangolin-manager/lib/python3.6/site-packages:/opt/pangolin-manager/lib64/python3.6/site-packages"
LimitNOFILE=65536
# Pre-commands to start watchdog device
# Uncomment if watchdog is part of your patroni setup
PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir -p /run/user/1004/postgresql
ExecStartPre=/bin/chown -R postgres:postgres /run/user/1004/postgresql
ExecStartPre=-/bin/mkdir -p /run/user/1004/pangolin-dbms
ExecStartPre=/bin/chown -R postgres:postgres /run/user/1004/pangolin-dbms
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/opt/pangolin-manager
ExecStart=/opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
Restart=on-failure
KillMode=process
# Disable restart limits
StartLimitInterval=0
[Install]
WantedBy=default.target
Пример файла sudoerc при включенной функциональности:
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl daemon-reload
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl stop rsyslog
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl start rsyslog
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart rsyslog
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status rsyslog
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status rsyslog -l
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status rsyslog --no-pager --full
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl enable rsyslog
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl disable rsyslog
postgres ALL=(ALL) NOPASSWD: /bin/journalctl -u rsyslog
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl stop etcd
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl start etcd
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart etcd
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status etcd
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status etcd -l
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status etcd --no-pager --full
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl enable etcd
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl disable etcd
postgres ALL=(ALL) NOPASSWD: /bin/journalctl -u etcd
Файл sudoerc при выключенной функциональности:
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl daemon-reload
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl stop rsyslog
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl start rsyslog
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart rsyslog
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status rsyslog
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status rsyslog -l
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status rsyslog --no-pager --full
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl enable rsyslog
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl disable rsyslog
postgres ALL=(ALL) NOPASSWD: /bin/journalctl -u rsyslog
postgres ALL=(ALL) NOPASSWD: /bin/journalctl -u pangolin-certs-rotate
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl stop pangolin-certs-rotate
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload pangolin-certs-rotate
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl start pangolin-certs-rotate
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart pangolin-certs-rotate
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status pangolin-certs-rotate
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status pangolin-certs-rotate --no-pager --full
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl enable pangolin-certs-rotate
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl disable pangolin-certs-rotate
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status pangolin-certs-rotate -l
postgres ALL=(ALL) NOPASSWD: /bin/journalctl -u pangolin-auth-reencrypt@postgres
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl stop pangolin-auth-reencrypt@postgres
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl start pangolin-auth-reencrypt@postgres
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart pangolin-auth-reencrypt@postgres
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status pangolin-auth-reencrypt@postgres
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status pangolin-auth-reencrypt@postgres --no-pager --full
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl enable pangolin-auth-reencrypt@postgres
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl disable pangolin-auth-reencrypt@postgres
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status pangolin-auth-reencrypt@postgres -l
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl stop pangolin-pooler
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl start pangolin-pooler
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart pangolin-pooler
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload pangolin-pooler
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status pangolin-pooler
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status pangolin-pooler --no-pager --full
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl enable pangolin-pooler
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl disable pangolin-pooler
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status pangolin-pooler -l
postgres ALL=(ALL) NOPASSWD: /bin/journalctl -u pangolin-pooler
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl stop pangolin-manager
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl start pangolin-manager
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart pangolin-manager
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload pangolin-manager
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status pangolin-manager
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status pangolin-manager -l
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status pangolin-manager --no-pager --full
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl enable pangolin-manager
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl disable pangolin-manager
postgres ALL=(ALL) NOPASSWD: /bin/journalctl -u pangolin-manager
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl stop etcd
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl start etcd
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart etcd
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status etcd
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status etcd -l
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl status etcd --no-pager --full
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl enable etcd
postgres ALL=(ALL) NOPASSWD: /usr/bin/systemctl disable etcd
postgres ALL=(ALL) NOPASSWD: /bin/journalctl -u etcd
Главное отличие журнала sudoerc при выключенной функциональности относительно выключенного состояния является меньшее количество команд, требующих прав привилегированного пользователя, как следствие меньший объем журнала. Это связано с тем, что при включенной функциональности unit-файлы находятся в пользовательском каталоге, для которого дополнительные привилегии не требуются.
Изменения в .bash_profile:
export PG_LICENSE_PATH=/opt/pangolin-license
export PGHOME=/opt/pangolin-dbms-server
export PGHOME_CLIENT=/opt/pangolin-dbms-client
alias members='ETCDCTL_API=3 etcdctl --endpoints=<server_name>:<port> --cert="/pg_ssl/etcd.crt" --key="/pg_ssl/etcd.key" --cacert="/pg_ssl/root.crt" member list -w table'
alias elist='ETCDCTL_API=3 etcdctl --endpoints=<server_name>:<port> --cert="/pg_ssl/etcd.crt" --key="/pg_ssl/etcd.key" --cacert="/pg_ssl/root.crt" endpoint status -w table --cluster'
alias elog='journalctl --user-unit etcd'
alias health='ETCDCTL_API=2 etcdctl --endpoints https://<server_name>:<port> --cert-file /pg_ssl/etcd.crt --key-file /pg_ssl/etcd.key --ca-file /pg_ssl/root.crt cluster-health 2>&1'
export PG_LICENSE_PATH=/opt/pangolin-license
export LD_LIBRARY_PATH=/usr/pangolin-{version}/lib
export PATH=$PATH:/usr/pangolin-{version}/bin
export PG_PLUGINS_PATH=/usr/pangolin-{version}/lib
export PGHOME=/usr/pangolin-{version}
export PGDATABASE=postgres
export PGUSER=postgres
export PGHOST={IP-адрес}
export PGPORT={port}
export PGCLIENTENCODING=UTF8
NOW=$(date +"%Y-%m-%d")
export PGDATA=/pgdata/data/data
export MANPATH=$MANPATH:$PGHOME/share/man
alias errors="ls -t /pgerrorlogs/pangolin-dbms/postgresql-$NOW*.log | head -1 | xargs tail -F | grep -E 'WARNING|ERROR|FATAL|ПРЕДУПРЕЖДЕНИЕ|ОШИБКА|ВАЖНО'"
alias hba='vi $PGDATA/pg_hba.conf'
alias pglog='ls -t /pgerrorlogs/pangolin-dbms/postgresql-$NOW*.log | head -1 | xargs tail -n 300'
alias pgver="psql -c 'select version();' | sed \"s| on | (\$(psql --single-line --no-align -c 'select product_version();' | sed '2q;d' )) on |\""
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
export PATH=$PATH:/opt/pangolin-manager/bin/
alias fail='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml failover $CLNAME'
alias hist='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml history $CLNAME'
alias list='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list $CLNAME'
alias pgconfig='curl -k -s -m 3 https://<server_name>:<port>/config | jq'
alias ptver="pangolin-manager-ctl version"
alias reload='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload $CLNAME'
alias restart='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart $CLNAME'
alias status='systemctl status pangolin-manager --no-pager --full'
alias switch='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml switchover $CLNAME'
export CLNAME=clustername
alias rlog='cat /pgerrorlogs/pangolin-manager/raft/raft.log'
export PATH=$PATH:/opt/pangolin-manager/bin/
export LD_LIBRARY_PATH=/opt/pangolin-manager/lib
export PG_LICENSE_PATH=/opt/pangolin-license
alias ptlog='ls -t /pgerrorlogs/pangolin-manager/pangolin-manager*.log | head -1 | xargs tail -n 300'
alias members="pangolin-dcs-ctl member list"
alias elist="pangolin-dcs-ctl endpoint status --endpoints='<server_name>:<port>,<server_name>:<port>,<server_name>:<port>'"
alias health="pangolin-dcs-ctl endpoint health --endpoints='<server_name>:<port>,<server_name>:<port>,<server_name>:<port>'"
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
Пример включения функциональности:
sudo SYSTEMD_UNIT_IN_USER=true dnf install pangolin-manager-venv
sudo SYSTEMD_UNIT_IN_USER=true dnf install pangolin-manager
Для Pangolin Manager журнал логирования из journalctl перенаправляется в файл, а также добавляется ротация удаления данных файлов. Путь к хранимым логам будет расположен по пути логирования pangolin-dbms:
log:
dir: /pgerrorlogs/major_version/
file_size: 26214400
file_num: 4
Ограничения
Ограничения функциональности:
-
Для некоторых файлов владелец (owner) не сможет быть изменен на
postgres:postgres(например, для/etc/pangolin-auth-reencrypt/enc_util.cfg, так как данный файл отвечает за хранилище паролей и не может быть изменен пользователем). -
В процессе обновления продукта до конечной версии, сервисные файлы не будут переноситься в пользовательский каталог при включении параметра
systemctl_unit_on_user. Их расположение не изменится. -
Для чтения журнала
journalctlнужно будет отдельно от утилиты установки/обновления Pangolin добавлять пользовательскую группуsystemd-journal:usermod -aG systemd-journal postgres;usermod -aG systemd-journal kmadmin_pg.
-
Расположение
pid-файлов компонентов ограничено пользовательской директорией/var/run/user/$(id -u)/. -
Компонент
etcdне будет изменять расположение службы.