PostgreSQL на CentOS: безопасная установка и удаленный доступ


Дата публикации:

Обновлено:


Статьи > PostgreSQL на CentOS: безопасная установка и удаленный доступ

Статус 2026 и безопасное использование

Вывод: Установите поддерживаемую версию PostgreSQL, инициализируйте предполагаемый кластер, прослушивайте только необходимые интерфейсы и предоставьте доступ в pg_hba.conf к определенным базам данных, ролям и доверенным сетям. Используйте аутентификацию по паролю SCRAM и TLS, когда пароли передаются по сети.

Чему вы научитесь

  • Как взаимодействуют источник пакета, каталог данных, инициализация, systemd, прослушивающие сокеты и аутентификация клиента.
  • Почему listen_addresses='*' плюс host all all 0.0.0.0/0 md5 предоставляет гораздо больше, чем требуется большинству приложений.
  • Как проверить правила доступа, не блокируя локальное администрирование.

Для кого: Администраторы, переносящие простой модуль Runbook CentOS/PostgreSQL в поддерживаемое сетевое развертывание.

Актуальность на 2026 год. Приведенное ниже общее правило MD5 сохраняется только как предостерегающий исторический пример. PostgreSQL документирует пароли, зашифрованные с помощью MD5, как устаревшие; предпочитайте scram-sha-256, узкие CIDR, роли с наименьшими привилегиями, элементы управления брандмауэром, TLS, резервное копирование и поддерживаемую основную версию.

Примечание по безопасности. Команды и примеры конфигурации из исходной статьи не проверялись повторно в современной производственной среде. Перед применением проверьте поддерживаемые версии, резервные копии, контроль доступа и процедуру отката в отдельной тестовой среде.

Официальные первоисточники

Обзор

Эта историческая процедура устанавливает и инициализирует PostgreSQL в CentOS 7, а затем настраивает запуск службы и сетевой доступ. Для нового сервера используйте поддерживаемую версию и адаптируйте команды к её документации.

Сетевая конфигурация требует особого внимания: ограничьте интерфейсы прослушивания, диапазоны CIDR, базы данных и разрешённые роли необходимым минимумом.

Версии следующие.

Версия CentOS7.6 (1810)
Версия PostgreSQL9.2.24

Оглавление

  1. установить
  2. Детали настройки
  3. резюме

1. Установка

В этом разделе описана процедура установки PostgreSQL.

1-1. Установка PostgreSQL

Выполните установку PostgreSQL с помощью команды yum. Выполните работу от имени пользователя root.

[username@hostname ~]$ su -
[root@hostname ~]# yum -y install postgresql-server

2. Детали настройки

В этом разделе описывается конфигурация вплоть до запуска PostgreSQL.

2-1. Создайте выделенного пользователя PostgreSQL.

Пакет обычно создаёт системную учётную запись "postgres" для администрирования экземпляра через psql. Проверьте её наличие, прежде чем создавать другую.

Попробуйте переключиться на пользователя с помощью следующей команды.

[root@hostname ~]# su - postgres

Поскольку некоторые люди, возможно, используют более старую версию PostgreSQL, следует упомянуть, что процедура установки переменных окружения путем изменения следующего ".bashrc" также больше не нужна.

.bashrc


export PGHOME=/var/lib/pgsql
export PGDATA=/var/lib/pgsql/data
export PGHOST=localhost

PGDATA по умолчанию для пользователей postgres теперь будет '/var/lib/pgsql/data'. По описанию он обращается к "/usr/lib/systemd/system/postgresql.service".

2-2. Подготовка данных PostgreSQL

Создайте данные PostgreSQL. Кодировка - UNICODE. Каталог "/var/lib/pgsql/data" был создан по умолчанию, но тем, кто этого не сделал, также предлагается создать папку.

-bash-4.2$ initdb --encoding=UNICODE

Поскольку "PGDATA=/var/lib/pgsql/data" установлен в "/usr/lib/systemd/system/postgresql.service", "initdb --encoding=UNICODE" создаст БД под "/var/lib/pgsql/ data/", БД собирается под "/var/lib/pgsql/data/".

2-3. Изменение конфигурационного файла

Разрешить IP-адресам доступ к PostgreSQL. Настройте систему так, чтобы она проходила аутентификацию по паролю для нелокального доступа.

[root@hostname ~]# vi /var/lib/pgsql/data/postgresql.conf

Измените файл 'postgresql.conf' следующим образом.

postgresql.conf【До изменений】


#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;

postgresql.conf【после изменения】


#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'         # what IP address(es) to listen on;

Значение "*" заставляет PostgreSQL слушать все доступные интерфейсы, но само по себе не предоставляет клиентам доступ. Если приложение использует известный интерфейс, укажите его адрес и не расширяйте поверхность доступа без необходимости.

Удалённое подключение, например из pgAdmin, требует адреса прослушивания, подходящего правила pg_hba.conf и разрешения межсетевого экрана. Локальное подключение psql может использовать localhost или Unix-сокет.

Это важный параметр безопасности, поэтому максимально сократите количество пользователей, которые могут получить к нему доступ.

Затем измените файл 'pg_hba.conf'.

[root@hostname ~]# vi /var/lib/pgsql/data/pg_hba.conf

Добавьте следующую информацию в конец документа.

pg_hba.conf


#Проверка подлинности пароля извне.
host    all             all             0.0.0.0/0            md5

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

2-4. проверка бутстрапа

Теперь, когда предварительная конфигурация завершена, проверьте запуск PostgreSQL. Поскольку БД была создана под пользователем postgres, перед началом работы переключитесь на пользователя postgres.

[root@hostname ~]# su - postgres
-bash-4.2$ pg_ctl start

После успешного запуска PostgreSQL проверьте, что команда psql работает без проблем. Выполните команду psql от имени пользователя postgres.

-bash-4.2$ psql -l
                                         Database List
   Name    |  Owner   | Encoding         |  Collation Order   | Ctype(conversion operator) |      Access rights
-----------+----------+------------------+--------------------+----------------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8        | ja_JP.UTF-8                |
 template0 | postgres | UTF8             | ja_JP.UTF-8        | ja_JP.UTF-8                | =c/postgres          +
           |          |                  |                    |                            | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8        | ja_JP.UTF-8                | =c/postgres          +
           |          |                  |                    |                            | postgres=CTc/postgres
(3 lines)

Ничего страшного, если будут получены вышеуказанные результаты.

2-5. Настройка автоматического запуска

Хотя это не является обязательным, трудно запускать PostgreSQL при каждом перезапуске сервера, поэтому он настроен так, чтобы PostgreSQL запускался автоматически при запуске сервера. Он также регистрируется командой systemctl. Обратите внимание, что эта процедура предназначена для CentOS7, поэтому если вы используете что-то другое, кроме CentOS7, вам нужно будет использовать команду Service для решения этой проблемы.

Проверьте, существует ли '/usr/lib/systemd/system/postgresql.service'. Если нет, создайте 'postgresql.service' с помощью следующей процедуры. Запустите от имени пользователя root.

[root@hostname ~]# touch /etc/systemd/system/postgresql.service
[root@hostname ~]# vi /etc/systemd/system/postgresql.service

Предоставляется следующая информация.

postgresql.service


[Unit]
#Описание.
Description=PostgreSQL
#Контроль до и после исполнения.
#Before=xxx.service
After=network.target

[Service]
#Назначение пользователей и групп
User=postgres
Group=postgres
#После активации установите статус Activated.
Type=oneshot
RemainAfterExit=yes
#Запуск, остановка и перезарядка.
Environment=PGDATA=/var/lib/pgsql/data
ExecStart=/usr/bin/pg_ctl start -D /var/lib/pgsql/data
ExecStop=/usr/bin/pg_ctl stop
ExecReload=/usr/bin/pg_ctl reload

[Install]
#Эквивалентные настройки Runlevel 3.
WantedBy=multi-user.target

Затем зарегистрируйтесь с помощью команды systemctl.

[root@hostname ~]# systemctl enable postgresql
[root@hostname ~]# systemctl is-enabled postgresql
enabled
[root@hostname ~]# systemctl list-unit-files --type=service | grep postgresql
postgresql.service                                enabled
[root@hostname ~]# systemctl daemon-reload

2-6. Добавление административного пользователя в PostgreSQL

Создайте пользователя, который будет использоваться в приложении PostgreSQL, отдельно от пользователя, который работает с PostgreSQL из Linux. Это пользователь при работе с pgadmin и т.д. Я хочу изменить пароль пользователя postgres, который существует по умолчанию, и использовать его.

Выполните следующую команду от имени пользователя postgres.

-bash-4.2$ psql
postgres=# alter role postgres with password '(компьютерный) пароль';
postgres=# \q

Примечание: Введите пароль, который вы хотите установить, в поле 'Пароль'.

2-7. Сверление брандмауэров

Разрешите доступ к порту PostgreSQL, поскольку брандмауэр (iptables для CentOS6 и более ранних версий) по умолчанию разрешает только доступ по ssh на CentOS7. Добавьте также опцию 'permanent', чтобы сделать конфигурацию постоянной.

[root@hostname ~]# firewall-cmd --permanent --zone=public --add-port=5432/tcp
[root@hostname ~]# firewall-cmd --reload
[root@hostname ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 8080/tcp 5432/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Если там написано 'ports: 5432/tcp', то все в порядке.

Доступ через pgadmin. Вы должны иметь возможность войти в систему как пользователь postgres с паролем, который вы только что установили.

Панель pgAdmin с базой данных postgres на сервере centos_test

3. резюме

Мы описали начальную конфигурацию, необходимую при установке PostgreSQL. Первоначальная сборка PostgreSQL может оказаться непростой задачей, поэтому обратитесь к этому разделу.

■INFORMATION

Статьи


■PROFILE

Профиль


■Контакты

Контакты