суббота, 18 марта 2017 г.

Установка PostgreSQL 9.6 и phpPgAdmin на CentOS7

1. Устанавливаем репозитарий PostgreSQL
# yum install wget
# cd /usr/src/
# wget https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-redhat96-9.6-3.noarch.rpm
# yum install pgdg-redhat96-9.6-3.noarch.rpm

2. Устанавливаем сервер PostgreSQL
# yum install postgresql96-server
Устанавливаем расширения
# yum install postgresql96-contrib
Производим инициализацию базы данных:
# /usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK
Помещаем в авто загрузку
# systemctl enable postgresql-9.6
Запуск
# systemctl start postgresql-9.6
Перезапуск выполняется так:
# systemctl restart postgresql-9.6

3. Преднастройка сервера
После установки необходимо подключиться к базе и установить пароль основного пользователя postgres, который по умолчанию пароля не имеет:
# sudo -u postgres psql
psql (9.6.2)
Введите "help", чтобы получить справку.
postgres=# \password postgres
Введите новый пароль: <вводим пароль>
Повторите его: <повторяем ввод пароля>
postgres=# 
Для выхода из консоли psql выхода нажимаем CTRL+D

Вносим изменения в «PostgreSQL Client Authentication Configuration File»
# nano /var/lib/pgsql/9.6/data/pg_hba.conf
Блок типов подключений приводим к виду:
# TYPE  DATABASE        USER            ADDRESS           METHOD
# "local" is for Unix domain socket connections only
local   all             all                               md5
# IPv4 local connections:
host    all             all             10.0.0.0/8        md5
# IPv6 local connections:
#host    all             all             ::1/128          ident
Здесь мы меняем метод аутентификации на md5 и указываем диапазон ip адресов, откуда будут подключаться клиенты (10.0.0.0/8)
Строку, относящуюся к IPv6 комментируем.
Рестартуем сервис:
# systemctl restart postgresql-9.6

Теперь можно подключится к консоли PostreSQL
# psql -U postgres -W
Пароль пользователя postgres: <вводим пароль>
psql (9.6.2)
Введите "help", чтобы получить справку.
postgres=#
Если не внести настройки в файл pg_hba.conf, то при запуске клиента будем получать ошибку:
# psql -U postgres -W
Пароль пользователя postgres:
psql: ВАЖНО:  пользователь "postgres" не прошёл проверку подлинности (Peer)

Для того, что бы сервис PostgeSQL был доступен по сети вносим изменения в файл конфигурации postgresql.conf
# nano /var/lib/pgsql/9.6/data/postgresql.conf
В разделе CONNECTIONS AND AUTHENTICATION меняем значение переменной listen_addresses с localhost на *
#------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost'
listen_addresses = '0.0.0.0'      
Рестартуем сервис
# systemctl restart postgresql-9.6
Проверяем и убеждаемся, что PostreSQL слушает нужные IP адреса:
# netstat -ltupn | grep 5432
tcp        0     0 0.0.0.0:5432  0.0.0.0:*   LISTEN  9958/postmaster

4. Устанавливаем phpPgAdmin – инструмент удобного администрирования PostgreSQL через WEB-интерфейс.
# yum install pgadmin3_96
# yum install phpPgAdmin
Вносим изменения в файл конфигурации phpPgAdmin.conf
# nano /etc/httpd/conf.d/phpPgAdmin.conf
Содержимое файла:
#
# This configuration file maps the phpPgAdmin directory into the URL space.
# By default this application is only accessible from the local host.
#

Alias /phpPgAdmin /usr/share/phpPgAdmin

<Location /phpPgAdmin>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        #Require local
        Require ip 127.0.0.1 192.168.0.0/16 10.0.0.0/8
        #Require host example.com
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order deny,allow
        Deny from all
        #Allow from 127.0.0.1
        Allow from 127.0.0.1 192.168.0.0/16 10.0.0.0/8
        Allow from ::1
        # Allow from .example.com
    </IfModule>
</Location>
Изменяемые строки выделены красным цветом. Смысл изменений – разрешить подключаться к web-интерфейсу только с определенных IP адресов.
Перезапускаем Apache
# systemctl restart httpd

Доступ к phpPgAdmin выполняется по URL http://<ip-адрес>/phpPgAdmin/ 
Пример:



Но зайти под пользователем postgres не получается:


В целях безопасности вход в phpPgAdmin запрещен от имени пользователя postgres. 
Так же запрещен вход под именами: pgsql, root, administrator
Это поведение исправляется в файле настроек phppgadmin:
# nano /etc/phpPgAdmin/config.inc.php
Находим строку
$conf['extra_login_security'] = true;
Меняем ее на
$conf['extra_login_security'] = false;
Рестартуемся:
# systemctl restart postgresql-9.6
# service httpd restart
Но так лучше не делать по соображениям безопасности.

5. Мы создаем нового пользователя despot5 с паролем passwd и с правами администратора базы данных dbdespot5. PostgreSQL управляет доступом при помощи так называемых ролей, которые соответствуют с пользователям.
Переходим в консоль пользователя postgres
# su - postgres
-bash-4.2$
Заходим в консоль PostgreSQL
-bash-4.2$ psql
Пароль: <вводим пароль пользователя postgres>
psql (9.6.2)
Введите "help", чтобы получить справку.
postgres=#

Текущие пользователи просматриваются так:
postgres=# \du
                                          Список ролей
 Имя роли |                                Атрибуты                                 | Член ролей
----------+-------------------------------------------------------------------------+------------
 postgres | Суперпользователь, Создаёт роли, Создаёт БД, Репликация, Пропускать RLS | {}

Создаем нового пользователя
postgres=# CREATE USER despot5;

Устанавливаем пароль
postgres=# alter user despot5 with encrypted password 'passwd';

Создаем базу данных
postgres=# CREATE DATABASE dbdespot5;

Устанавливаем полные права пользователя despot5 на базу dbdespot5
postgres=# GRANT ALL privileges ON DATABASE dbdespot5 TO despot5;

Теперь подключится к phppgadmin можно под учеткой пользователя despot5:



Удаление базы данных из командной строки системы:
# su - postgres
-bash-4.2$ dropdb <ИмяБазДанных>
Затем вводим пароль пользователя postgres и база <ИмяБазДанных> удаляется.

Удаление пользователя из командной строки системы:
-bash-4.2$ dropuser <ИмяПользователя>
Затем вводим пароль пользователя postgres и пользователь <ИмяПользователя>удаляется.

ССЫЛКИ
https://www.pgadmin.org/features.php
https://www.unixmen.com/postgresql-9-4-released-install-centos-7



2 комментария: