Перейти к основному содержимому

Задание 2: Активация функциональности

Рассмотрим, как включать механизм парольных политик, для этого:

  1. Убедимся, что при по умолчанию выключенном механизме парольных политик допускается создание простого и небезопасного пароля.
  2. Создадим пользователя test_user с паролем, не удовлетворяющим парольной политике.
  3. Включим механизм парольных политик.
  4. Изменим пароль пользователя test_user на пароль, удовлетворяющий парольной политике.

Подготовительный этап​

  1. Запустите psql под пользователем postgres:

    [user@ServerName Distr]$ sudo su - postgres
    [postgres@ServerName ~]$ psql
    Pager is used for long output.
    Border style is 2.
    Line style is unicode.
    psql (15.5)
    Type "help" for help.
  2. Выясните, какая версия Pangolin установлена:

    postgres@postgres=# SELECT product_version();
    ┌──────────────────────-───────┐
    │ product_version │
    ├──────────────────────────────┤
    │ Platform V Pangolin DB 6.7.0 │
    └──────────────────────────────┘
    (1 row)
  3. Узнайте версию ядра PostgreSQL:

    postgres@postgres=# SELECT version();
    ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────┐
    │version │
    ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
    │ PostgreSQL 15.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 12.4.1 20240730 (RED SOFT 12.4.0-1), 64-bit │
    └───────────────────────────────────────────────────────────────────────────────────────────────────────────┘
    (1 row)
  4. Проверьте расположение рабочей директории кластера:

    postgres@postgres=# \! ls -ld $PGDATA
    drwx------. 24 postgres postgres 4096 Jul 21 12:16 /pgdata/06/data
  5. Выведите список ролей:

    postgres@postgres=# \dg
    List of roles
    ┌───────────┬────────────────────────────────────────────────────────────┬───────────┐
    │ Role name │ Attributes │ Member of │
    ├───────────┼────────────────────────────────────────────────────────────┼───────────┤
    │ postgres │ Superuser, Create role, Create DB, Replication, Bypass RLS │ {} │
    └───────────┴────────────────────────────────────────────────────────────┴───────────┘
  6. Выведите список баз данных:

    postgres@postgres=# \l
    List of databases
    ┌───────────┬──────────┬──────────┬─────────────┬─────────────┬────────────┬─────────────────┬───────────────────────┐
    │ Name │ Owner │ Encoding │ Collate │ Ctype │ ICU Locale │ Locale Provider │ Access privileges │
    ├───────────┼──────────┼──────────┼─────────────┼─────────────┼────────────┼─────────────────┼───────────────────────┤
    │ postgres │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │ │ libc │ │
    │ template0 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │ │ libc │ =c/postgres │
    │ │ │ │ │ │ | | postgres=CTc/postgres │
    │ template1 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │ │ libc │ =c/postgres │
    │ │ │ │ │ │ │ │ postgres=CTc/postgres │
    └───────────┴──────────┴──────────┴─────────────┴─────────────┴────────────┴─────────────────┴───────────────────────┘
    (3 rows)
  7. Выведите список установленных расширений:

    postgres@postgres=# \dx
    List of installed extensions
    ┌─────────┬─────────┬────────────┬──────────────────────────────┐
    │ Name │ Version │ Schema │ Description │
    ├─────────┼─────────┼────────────┼──────────────────────────────┤
    │ plpgsql │ 1.1 │ pg_catalog │ PL/pgSQL procedural language │
    └─────────┴─────────┴────────────┴──────────────────────────────┘
    (1 row)

Упражнение 1: Создание простого пароля​

  1. Убедитесь, что механизм парольных политик отключен:

    postgres@postgres=# SHOW password_policies_enable;
    ┌──────────────────────────┐
    │ password_policies_enable │
    ├──────────────────────────┤
    │ off │
    └──────────────────────────┘
    (1 row)
  2. Создайте пользователя test_user с простым паролем 123:

    postgres@postgres=# CREATE ROLE test_user WITH ENCRYPTED PASSWORD '123';
    CREATE ROLE
    postgres@postgres=# ALTER ROLE test_user LOGIN;
    ALTER ROLE
    postgres@postgres=# \q
  3. Проверьте, запрашивается ли пароль при подключении:

    [postgres@ServerName ~]$ psql -U test_user -d postgres
    Pager is used for long output.
    Border style is 2.
    Line style is unicode.
    psql (15.5)
    Type "help" for help.

    Пароль не запрашивается.

    test_user@postgres=# \q
  4. Измените в конфигурационном файле $PGDATA/pg_hba.conf тип подключения с локального на scram-sha-256:

    [postgres@ServerName ~]$ vi $PGDATA/pg_hba.conf

    Отредактируйте соответствующую строку:

    # "local" is for Unix domain socket connections only
    local all all scram-sha-256
  5. Перезагрузите кластер:

    [postgres@ServerName ~]$ exit
    [UserName@ServerName ~]$ sudo systemctl restart postgresql
  6. Теперь при подключении запрашивается пароль:

    [student@ServerName ~]$ sudo su - postgres
    [postgres@ServerName ~]$ psql -U test_user -d postgres
    Password for user test_user:

    Pager is used for long output.
    Border style is 2.
    Line style is unicode.
    psql (15.5)
    Type "help" for help.

Упражнение 2: Включение парольных политик​

  1. Верните в качестве значения для настройки локального подключения режим trust:

    [postgres@ServerName ~]$ vi $PGDATA/pg_hba.conf
    # TYPE DATABASE USER ADDRESS METHOD

    # "local" is for Unix domain socket connections only
    local all all trust
  2. Включите парольные политики, установив значение параметра password_policies_enable = on в конфигурационном файле postgresql.conf:

    [postgres@ServerName ~]$ vi $PGDATA/postgresql.conf
  3. Перезагрузите сервер, чтобы настройки вступили в силу:

    [postgres@ServerName ~]$ exit
    [UserName@ServerName ~]$ sudo systemctl restart postgresql
  4. Запустите psql и убедитесь, что парольные политики теперь включены:

    [student@ServerName ~]$ sudo su - postgres
    [postgres@ServerName ~]$ psql
    Pager is used for long output.
    Border style is 2.
    Line style is unicode.
    psql (15.5)
    Type "help" for help.
    postgres@postgres=# SHOW password_policies_enable;
    ┌──────────────────────────┐
    │ password_policies_enable │
    ├──────────────────────────┤
    │ on │
    └──────────────────────────┘
    (1 row)
  5. Попробуйте задать для пользователя test_user пароль, не удовлетворяющий парольной политике:

    Но какой парольной политике? Ведь мы еще ничего не задавали и не настраивали?

    В случае, когда для пользователя или роли не задана конкретная парольная политика, но механизм включен, то устанавливаемые пароли проверяются по критериям, соответствующим значениям по умолчанию.

    Чтобы посмотреть, как выглядит парольная «базовая» парольная политика, выполните:

    postgres@postgres=# SELECT name,setting FROM pg_settings WHERE name LIKE 'password%';
    postgres@postgres=# ALTER ROLE test_user PASSWORD '234';
    ERROR: Syntax check fail: minimum length for password is 5

    Получена ошибка несоответствия требуемой длине пароля, которая по умолчанию соответствует 5.

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

    postgres@postgres=# ALTER ROLE test_user PASSWORD '23456';
    ALTER ROLE

    Пароль успешно установлен.

Упражнение 3: Подключение по паролю​

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

    • для локальных соединений установите подключение без пароля (trust);
    • для сетевых – подключение по паролю (scram-sha-256).

    Перед выполнением следующих шагов убедитесь, что ваш конфигурационный файл аналогичен примеру ниже:

    [postgres@ServerName ~]$ vi $PGDATA/pg_hba.conf
    # TYPE DATABASE USER ADDRESS METHOD

    # "local" is for Unix domain socket connections only
    local all all trust

    # IPv4 local connections:

    host all all 0.0.0.0/0 scram-sha-256

    # IPv6 local connections:
    host all all ::1/128 trust

    # Allow replication connections from localhost, by a user with the

    # replication privilege.
    local replication all trust
    host replication all 127.0.0.1/32 trust

    host replication all ::1/128 trust
  2. Перезагрузите сервер:

    [UserName@ServerName ~]$ sudo systemctl restart postgresql
  3. Проверьте локальное подключение:

    [postgres@ServerName ~]$ psql -U test_user -d postgres
    Pager is used for long output.
    Border style is 2.
    Line style is unicode.
    psql (15.5)
    Type "help" for help.

    Видим, что пароль не запрашивается.

    test_user@postgres=# \q
  4. Проверьте сетевое подключение:

    [postgres@ServerName ~]$ psql -U test_user -h <IP-Address> -d postgres
    Password for user test_user:

    Pager is used for long output.
    Border style is 2.
    Line style is unicode.
    psql (15.5)
    Type "help" for help.
    Сведения

    Пароль для test_user установлен 23456.

    Пароль запрашивается.

    test_user@postgres=# \q
  5. Проверьте сетевое подключение по hostname (в нашем случае было установлено имя ServerName для используемой виртуальной машины):

    [postgres@ServerName ~]$ psql -U test_user -h ServerName -d postgres
    Password for user test_user:

    Pager is used for long output.
    Border style is 2.
    Line style is unicode.
    psql (15.5)
    Type "help" for help.

    Пароль запрашивается.

Подведем итоги​

Вопрос 1

Какой параметр в конфигурационном файле postgresql.conf отвечает за включение механизма парольных политик?

Вопрос 2

Какой минимальной длиной обладает пароль по умолчанию в Pangolin DB при включенных парольных политиках?

Вопрос 3

Какой пароль лучше всего использовать?