Задание 2: Активация функциональности
Рассмотрим, как включать механизм парольных политик, для этого:
- Убедимся, что при по умолчанию выключенном механизме парольных политик допускается создание простого и небезопасного пароля.
- Создадим пользователя
test_userс паролем, не удовлетворяющим парольной политике. - Включим механизм парольных политик.
- Изменим пароль пользователя
test_userна пароль, удовлетворяющий парольной политике.
Подготовительный этап
-
Запустите
psqlпод пользователемpostgres:[user@ServerName Distr]$ sudo su - postgres[postgres@ServerName ~]$ psqlPager is used for long output.Border style is 2.Line style is unicode.psql (15.5)Type "help" for help. -
Выясните, какая версия Pangolin установлена:
postgres@postgres=# SELECT product_version();┌──────────────────────-───────┐│ product_version │├──────────────────────────────┤│ Platform V Pangolin DB 6.7.0 │└──────────────────────────────┘(1 row) -
Узнайте версию ядра 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) -
Проверьте расположение рабочей директории кластера:
postgres@postgres=# \! ls -ld $PGDATAdrwx------. 24 postgres postgres 4096 Jul 21 12:16 /pgdata/06/data -
Выведите список ролей:
postgres@postgres=# \dgList of roles┌───────────┬────────────────────────────────────────────────────────────┬───────────┐│ Role name │ Attributes │ Member of │├───────────┼────────────────────────────────────────────────────────────┼───────────┤│ postgres │ Superuser, Create role, Create DB, Replication, Bypass RLS │ {} │└───────────┴────────────────────────────────────────────────────────────┴───────────┘ -
Выведите список баз данных:
postgres@postgres=# \lList 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) -
Выведите список установленных расширений:
postgres@postgres=# \dxList of installed extensions┌─────────┬─────────┬────────────┬──────────────────────────────┐│ Name │ Version │ Schema │ Description │├─────────┼─────────┼────────────┼──────────────────────────────┤│ plpgsql │ 1.1 │ pg_catalog │ PL/pgSQL procedural language │└─────────┴─────────┴────────────┴──────────────────────────────┘(1 row)
Упражнение 1: Создание простого пароля
-
Убедитесь, что механизм парольных политик отключен:
postgres@postgres=# SHOW password_policies_enable;┌──────────────────────────┐│ password_policies_enable │├──────────────────────────┤│ off │└──────────────────────────┘(1 row) -
Создайте пользователя
test_userс простым паролем123:postgres@postgres=# CREATE ROLE test_user WITH ENCRYPTED PASSWORD '123';CREATE ROLEpostgres@postgres=# ALTER ROLE test_user LOGIN;ALTER ROLEpostgres@postgres=# \q -
Проверьте, запрашивается ли пароль при подключении:
[postgres@ServerName ~]$ psql -U test_user -d postgresPager is used for long output.Border style is 2.Line style is unicode.psql (15.5)Type "help" for help.Пароль не запрашивается.
test_user@postgres=# \q -
Измените в конфигурационном файле
$PGDATA/pg_hba.confтип подключения с локального наscram-sha-256:[postgres@ServerName ~]$ vi $PGDATA/pg_hba.confОтредактируйте соответствующую строку:
# "local" is for Unix domain socket connections onlylocal all all scram-sha-256 -
Перезагрузите кластер:
[postgres@ServerName ~]$ exit[UserName@ServerName ~]$ sudo systemctl restart postgresql -
Теперь при подключении запрашивается пароль:
[student@ServerName ~]$ sudo su - postgres[postgres@ServerName ~]$ psql -U test_user -d postgresPassword 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: Включение парольных политик
-
Верните в качестве значения для настройки локального подключения режим
trust:[postgres@ServerName ~]$ vi $PGDATA/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD# "local" is for Unix domain socket connections onlylocal all all trust -
Включите парольные политики, установив значение параметра
password_policies_enable = onв конфигурационном файлеpostgresql.conf:[postgres@ServerName ~]$ vi $PGDATA/postgresql.conf -
Перезагрузите сервер, чтобы настройки вступили в силу:
[postgres@ServerName ~]$ exit[UserName@ServerName ~]$ sudo systemctl restart postgresql -
Запустите
psqlи убедитесь, что парольные политики теперь включены:[student@ServerName ~]$ sudo su - postgres[postgres@ServerName ~]$ psqlPager 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) -
Попробуйте задать для пользователя
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: Подключение по паролю
-
Установите методы подключения к серверу для локальных и сетевых соединений следующим образом:
- для локальных соединений установите подключение без пароля (
trust); - для сетевых – подключение по паролю (
scram-sha-256).
Перед выполнением следующих шагов убедитесь, что ваш конфигурационный файл аналогичен примеру ниже:
[postgres@ServerName ~]$ vi $PGDATA/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD# "local" is for Unix domain socket connections onlylocal 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 trusthost replication all 127.0.0.1/32 trusthost replication all ::1/128 trust - для локальных соединений установите подключение без пароля (
-
Перезагрузите сервер:
[UserName@ServerName ~]$ sudo systemctl restart postgresql -
Проверьте локальное подключение:
[postgres@ServerName ~]$ psql -U test_user -d postgresPager is used for long output.Border style is 2.Line style is unicode.psql (15.5)Type "help" for help.Видим, что пароль не запрашивается.
test_user@postgres=# \q -
Проверьте сетевое подключение:
[postgres@ServerName ~]$ psql -U test_user -h <IP-Address> -d postgresPassword 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 -
Проверьте сетевое подключение по
hostname(в нашем случае было установлено имяServerNameдля используемой виртуальной машины):[postgres@ServerName ~]$ psql -U test_user -h ServerName -d postgresPassword 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.Пароль запрашивается.