Задание 2: Создаем парольные политики
Упражнение 1: Создание политики для пользователя
План
-
Зададим параметры политики:
- длинна пароля не менее 8 символов (
min_length); - в пароле должно быть не менее 2 цифр (
alpha_numeric); - в пароле должно быть не менее 1 спец.символа (
min_special_chars); - в пароле должно быть не менее 1 заглавной буквы (
min_uppercase).
- длинна пароля не менее 8 символов (
-
Активируем политику для пользователя.
-
Установим пароль для пользователя удовлетворяющий активной парольной политике для него.
Управление парольными политиками происходит через использование функций, выполнять любые действия с которыми может политику может суперпользователь или тот, кому предоставляется привиллегия EXECUTE на них.
Практика
-
Задайте параметры парольной политики в соответствии с заданием:
postgres@postgres=# SELECT * FROM set_role_policies('test_user', check_syntax(1::boolean), min_length(8), alpha_numeric(2), min_special_chars(1), min_uppercase(1))\gx┌─[ RECORD 1 ]──────────────────────┬───────────┐│ roleid │ test_user ││ reuse_time │ ││ in_history │ ││ max_age │ ││ min_age │ ││ grace_login_limit │ ││ grace_login_time_limit │ ││ expire_warning │ ││ lockout │ ││ lockout_duration │ ││ max_failure │ ││ failure_count_interval │ ││ check_syntax │ t ││ min_length │ 8 ││ illegal_values │ ││ alpha_numeric │ 2 ││ min_alpha_chars │ ││ min_special_chars │ 1 ││ min_uppercase │ 1 ││ min_lowercase │ ││ max_rpt_chars │ ││ policy_enable │ ││ track_login │ ││ max_inactivity │ ││ use_password_strength_estimator │ ││ password_strength_estimator_score │ ││ custom_function │ ││ transport_password_life_time │ ││ grace_authid_period │ │└───────────────────────────────────┴───────────┘ -
Активируйте политику:
postgres@postgres=# SELECT * FROM enable_policy('test_user')\gx┌─[ RECORD 1 ]──────────────────────┬───────────┐│ roleid │ test_user ││ reuse_time │ ││ in_history │ ││ max_age │ ││ min_age │ ││ grace_login_limit │ ││ grace_login_time_limit │ ││ expire_warning │ ││ lockout │ ││ lockout_duration │ ││ max_failure │ ││ failure_count_interval │ ││ check_syntax │ t ││ min_length │ 8 ││ illegal_values │ ││ alpha_numeric │ 2 ││ min_alpha_chars │ ││ min_special_chars │ 1 ││ min_uppercase │ 1 ││ min_lowercase │ ││ max_rpt_chars │ ││ policy_enable │ t ││ track_login │ ││ max_inactivity │ ││ use_password_strength_estimator │ ││ password_strength_estimator_score │ ││ custom_function │ ││ transport_password_life_time │ ││ grace_authid_period │ │└───────────────────────────────────┴───────────┘ -
Убедитесь, что параметры применились:
postgres@postgres=# SELECT * FROM recognize_password_policy_detailed('test_user');┌───────────────────────────────────┬──────────┬─────────────┬───────────┐│ policy_name │ value │ source_type │ source │├───────────────────────────────────┼──────────┼─────────────┼───────────┤│ reuse_time │ 00:00:00 │ config │ ││ in_history │ 0 │ config │ ││ max_age │ 120 days │ config │ ││ min_age │ 00:00:00 │ config │ ││ grace_login_limit │ 5 │ config │ ││ grace_login_time_limit │ 00:00:00 │ config │ ││ expire_warning │ 7 days │ config │ ││ lockout │ true │ config │ ││ lockout_duration │ 24:00:00 │ config │ ││ max_failure │ 10 │ config │ ││ failure_count_interval │ 00:00:00 │ config │ ││ check_syntax │ true │ role │ test_user ││ min_length │ 8 │ role │ test_user ││ illegal_values │ false │ config │ ││ alpha_numeric │ 2 │ role │ test_user ││ min_alpha_chars │ 0 │ config │ ││ min_special_chars │ 1 │ role │ test_user ││ min_uppercase │ 1 │ role │ test_user ││ min_lowercase │ 0 │ config │ ││ max_rpt_chars │ 0 │ config │ ││ track_login │ false │ config │ ││ max_inactivity │ │ │ ││ use_password_strength_estimator │ false │ config │ ││ password_strength_estimator_score │ │ │ ││ custom_function │ 0 │ config │ ││ transport_password_life_time │ 00:00:00 │ config │ ││ grace_authid_period │ 00:00:00 │ config │ │└───────────────────────────────────┴──────────┴─────────────┴───────────┘(27 rows)
Не проходите мимо!
Одновременно создать и применить парольную политику можно одной командой, указав параметр policy_enable(1::boolean); В нашем случае команда для создания парольной политики будет выглядеть так:
postgres@postgres=# SELECT * FROM set_role_policies('test_user', check_syntax(1::boolean), min_length(8), alpha_numeric(2), min_special_chars(1), min_uppercase(1), policy_enable(1::boolean) )\gx
Упражнение 2: Создание парольной политики для групповой роли
При наследовании нескольких парольных политик применяется более строгая. Например, если политика 1 разрешает длину пароля более 5 символов, а политика 2 позволяет задавать пароль минимум с 10 символами, то по итогу в контексте данного критерия отдельного будет установлено требование – минимум 10 символов.
План
Создадим отдельные парольные политики для групповых ролей group_role1 и group_role2, для этого:
-
Создадим групповые роли
group_role1иgroup_role2. -
Создадим и активируем политику для роли
group_role1с параметрами:- время жизни пароля 60 дней (
max_age); - длинна пароля не менее 12 символов (
min_length); - в пароле должно быть не менее 3 цифр (
alpha_numeric); - в пароле должно быть не менее 2 спецсимволов (
min_special_chars); - в пароле должно быть не менее 2 заглавной буквы (
min_uppercase); - создать и активировать одной командой (
policy_enable(1::boolean).
- время жизни пароля 60 дней (
-
Создадим и активируем политику для роли
group_role2с параметрами:- время жизни пароля 90 дней (
max_age); - длинна пароля не менее 12 символов (
min_length); - в пароле должно быть не менее 3 цифр (
alpha_numeric); - в пароле должно быть не менее 2 спецсимволов (
min_special_chars); - в пароле должно быть не менее 2 заглавной буквы (
min_uppercase); - создать и активировать одной командой (
policy_enable(1::boolean).
- время жизни пароля 90 дней (
-
Включим роль
test_userв групповые ролиgroup_test1иgroup_test2.
Практика
-
Проверьте, какие параметры парольной политики установлены на текущий момент для пользователя
test_user:postgres@postgres=# SELECT * FROM recognize_password_policy_detailed('test_user');┌───────────────────────────────────┬──────────┬─────────────┬───────────┐│ policy_name │ value │ source_type │ source │├───────────────────────────────────┼──────────┼─────────────┼───────────┤│ reuse_time │ 00:00:00 │ config │ ││ in_history │ 0 │ config │ ││ max_age │ 120 days │ config │ ││ min_age │ 00:00:00 │ config │ ││ grace_login_limit │ 5 │ config │ ││ grace_login_time_limit │ 00:00:00 │ config │ ││ expire_warning │ 7 days │ config │ ││ lockout │ true │ config │ ││ lockout_duration │ 24:00:00 │ config │ ││ max_failure │ 10 │ config │ ││ failure_count_interval │ 00:00:00 │ config │ ││ check_syntax │ true │ role │ test_user ││ min_length │ 8 │ role │ test_user ││ illegal_values │ false │ config │ ││ alpha_numeric │ 2 │ role │ test_user ││ min_alpha_chars │ 0 │ config │ ││ min_special_chars │ 1 │ role │ test_user ││ min_uppercase │ 1 │ role │ test_user ││ min_lowercase │ 0 │ config │ ││ max_rpt_chars │ 0 │ config │ ││ track_login │ false │ config │ ││ max_inactivity │ │ │ ││ use_password_strength_estimator │ false │ config │ ││ password_strength_estimator_score │ │ │ ││ custom_function │ 0 │ config │ ││ transport_password_life_time │ 00:00:00 │ config │ ││ grace_authid_period │ 00:00:00 │ config │ │└───────────────────────────────────┴──────────┴─────────────┴───────────┘(27 rows) -
Деактивируйте политику:
postgres@postgres=# SELECT * FROM disable_policy('test_user')\gx┌─[ RECORD 1 ]──────────────────────┬───────────┐│ roleid │ test_user ││ reuse_time │ ││ in_history │ ││ max_age │ ││ min_age │ ││ grace_login_limit │ ││ grace_login_time_limit │ ││ expire_warning │ ││ lockout │ ││ lockout_duration │ ││ max_failure │ ││ failure_count_interval │ ││ check_syntax │ t ││ min_length │ 8 ││ illegal_values │ ││ alpha_numeric │ 2 ││ min_alpha_chars │ ││ min_special_chars │ 1 ││ min_uppercase │ 1 ││ min_lowercase │ ││ max_rpt_chars │ ││ policy_enable │ f ││ track_login │ ││ max_inactivity │ ││ use_password_strength_estimator │ ││ password_strength_estimator_score │ ││ custom_function │ ││ transport_password_life_time │ ││ grace_authid_period │ │└───────────────────────────────────┴───────────┘ -
Запросите детализированную информацию о настройках парольной политики для пользователя
test_user:postgres@postgres=# SELECT * FROM recognize_password_policy_detailed('test_user');┌───────────────────────────────────┬──────────┬─────────────┬────────┐│ policy_name │ value │ source_type │ source │├───────────────────────────────────┼──────────┼─────────────┼────────┤│ reuse_time │ 00:00:00 │ config │ ││ in_history │ 0 │ config │ ││ max_age │ 120 days │ config │ ││ min_age │ 00:00:00 │ config │ ││ grace_login_limit │ 5 │ config │ ││ grace_login_time_limit │ 00:00:00 │ config │ ││ expire_warning │ 7 days │ config │ ││ lockout │ true │ config │ ││ lockout_duration │ 24:00:00 │ config │ ││ max_failure │ 10 │ config │ ││ failure_count_interval │ 00:00:00 │ config │ ││ check_syntax │ true │ config │ ││ min_length │ 5 │ config │ ││ illegal_values │ false │ config │ ││ alpha_numeric │ 1 │ config │ ││ min_alpha_chars │ 0 │ config │ ││ min_special_chars │ 0 │ config │ ││ min_uppercase │ 0 │ config │ ││ min_lowercase │ 0 │ config │ ││ max_rpt_chars │ 0 │ config │ ││ track_login │ false │ config │ ││ max_inactivity │ │ │ ││ use_password_strength_estimator │ false │ config │ ││ password_strength_estimator_score │ │ │ ││ custom_function │ 0 │ config │ ││ transport_password_life_time │ 00:00:00 │ config │ ││ grace_authid_period │ 00:00:00 │ config │ │└───────────────────────────────────┴──────────┴─────────────┴────────┘(27 rows) -
Создадим групповую роль
group_role1и активируйте для нее парольную политику с параметрами:- время жизни пароля 60 дней (
max_age); - длинна пароля не менее 12 символов (
min_length); - в пароле должно быть не менее 3 цифр (
alpha_numeric); - в пароле должно быть не менее 2 спецсимволов (
min_special_chars); - в пароле должно быть не менее 2 заглавных букв (
min_uppercase); - создать и активировать одной командой (`policy_enable(1::boolean)).
postgres@postgres=# CREATE ROLE group_role1;CREATE ROLEpostgres@postgres=# SELECT * FROM set_role_policies('group_role1', max_age('60 days'), check_syntax(1::boolean), min_length(15), alpha_numeric(3), min_special_chars(2), min_uppercase(2), policy_enable(1::boolean))\gx┌─[ RECORD 1 ]──────────────────────┬─────────────┐│ roleid │ group_role1 ││ reuse_time │ ││ in_history │ ││ max_age │ 60 days ││ min_age │ ││ grace_login_limit │ ││ grace_login_time_limit │ ││ expire_warning │ ││ lockout │ ││ lockout_duration │ ││ max_failure │ ││ failure_count_interval │ ││ check_syntax │ t ││ min_length │ 15 ││ illegal_values │ ││ alpha_numeric │ 3 ││ min_alpha_chars │ ││ min_special_chars │ 2 ││ min_uppercase │ 2 ││ min_lowercase │ ││ max_rpt_chars │ ││ policy_enable │ t ││ track_login │ ││ max_inactivity │ ││ use_password_strength_estimator │ ││ password_strength_estimator_score │ ││ custom_function │ ││ transport_password_life_time │ ││ grace_authid_period │ │└───────────────────────────────────┴─────────────┘ - время жизни пароля 60 дней (
-
Создадим групповую роль
group_role2и активируйте для нее парольную политику с параметрами:- время жизни пароля 90 дней (
max_age); - длинна пароля не менее 12 символов (
min_length); - в пароле должно быть не менее 3 цифр (
alpha_numeric); - в пароле должно быть не менее 2 спецсимволов (
min_special_chars); - в пароле должно быть не менее 2 заглавной буквы (
min_uppercase); - создать и активировать одной командой (
policy_enable(1::boolean)).
postgres@postgres=# CREATE ROLE group_role2;CREATE ROLEpostgres@postgres=# SELECT * FROM set_role_policies('group_role2', max_age('90 days'), check_syntax(1::boolean), min_length(20), alpha_numeric(1), min_special_chars(1), min_uppercase(2), policy_enable(1::boolean))\gx┌─[ RECORD 1 ]──────────────────────┬─────────────┐│ roleid │ group_role2 ││ reuse_time │ ││ in_history │ ││ max_age │ 90 days ││ min_age │ ││ grace_login_limit │ ││ grace_login_time_limit │ ││ expire_warning │ ││ lockout │ ││ lockout_duration │ ││ max_failure │ ││ failure_count_interval │ ││ check_syntax │ t ││ min_length │ 20 ││ illegal_values │ ││ alpha_numeric │ 1 ││ min_alpha_chars │ ││ min_special_chars │ 1 ││ min_uppercase │ 2 ││ min_lowercase │ ││ max_rpt_chars │ ││ policy_enable │ t ││ track_login │ ││ max_inactivity │ ││ use_password_strength_estimator │ ││ password_strength_estimator_score │ ││ custom_function │ ││ transport_password_life_time │ ││ grace_authid_period │ │└───────────────────────────────────┴─────────────┘ - время жизни пароля 90 дней (
-
Включите роль
test_userв групповые ролиgroup_test1иgroup_test2:postgres@postgres=# GRANT group_role1 TO test_user;GRANT ROLEpostgres@postgres=# GRANT group_role2 TO test_user;GRANT ROLEpostgres@postgres=# \dg test_userList of roles┌───────────┬────────────┬───────────────────────────┐│ Role name │ Attributes │ Member of │├───────────┼────────────┼───────────────────────────┤│ test_user │ │ {group_role1,group_role2} │└───────────┴────────────┴───────────────────────────┘
Проверь себя! С учетом пунктов 4 и 5 подумайте, какие значения параметров min_length и max_age будут применяться к test_user?
При выборе парольной политики сравниваются не нулевые значения и берется более строгое значение:
- значение параметра длины пароля
min_length=20взято из парольной политики групповой ролиgroup_role2; - значение параметра времени жизни пароля
max_age='60 days'взято из парольной политики групповой ролиgroup_role1.
-
Активируйте ранее созданную политику для роли
test_user:postgres@postgres=# SELECT * FROM enable_policy('test_user')\gx┌─[ RECORD 1 ]──────────────────────┬───────────┐│ roleid │ test_user ││ reuse_time │ ││ in_history │ ││ max_age │ ││ min_age │ ││ grace_login_limit │ ││ grace_login_time_limit │ ││ expire_warning │ ││ lockout │ ││ lockout_duration │ ││ max_failure │ ││ failure_count_interval │ ││ check_syntax │ t ││ min_length │ 8 ││ illegal_values │ ││ alpha_numeric │ 2 ││ min_alpha_chars │ ││ min_special_chars │ 1 ││ min_uppercase │ 1 ││ min_lowercase │ ││ max_rpt_chars │ ││ policy_enable │ t ││ track_login │ ││ max_inactivity │ ││ use_password_strength_estimator │ ││ password_strength_estimator_score │ ││ custom_function │ ││ transport_password_life_time │ ││ grace_authid_period │ │└───────────────────────────────────┴───────────┘ -
При получении критериев итоговой парольной политики для
test_user, видим, что значения параметров эксклюзивной парольной политики обладают большим приоритетом, чем значения в рамках групповых ролей:postgres@postgres=# SELECT * FROM recognize_password_policy_detailed('test_user');┌───────────────────────────────────┬──────────┬─────────────┬─────────────┐│ policy_name │ value │ source_type │ source │├───────────────────────────────────┼──────────┼─────────────┼─────────────┤│ reuse_time │ 00:00:00 │ config │ ││ in_history │ 0 │ config │ ││ max_age │ 60 days │ role │ group_role1 ││ min_age │ 00:00:00 │ config │ ││ grace_login_limit │ 5 │ config │ ││ grace_login_time_limit │ 00:00:00 │ config │ ││ expire_warning │ 7 days │ config │ ││ lockout │ true │ config │ ││ lockout_duration │ 24:00:00 │ config │ ││ max_failure │ 10 │ config │ ││ failure_count_interval │ 00:00:00 │ config │ ││ check_syntax │ true │ role │ test_user ││ min_length │ 8 │ role │ test_user ││ illegal_values │ false │ config │ ││ alpha_numeric │ 2 │ role │ test_user ││ min_alpha_chars │ 0 │ config │ ││ min_special_chars │ 1 │ role │ test_user ││ min_uppercase │ 1 │ role │ test_user ││ min_lowercase │ 0 │ config │ ││ max_rpt_chars │ 0 │ config │ ││ track_login │ false │ config │ ││ max_inactivity │ │ | ││ use_password_strength_estimator │ false │ config │ ││ password_strength_estimator_score │ │ │ ││ custom_function │ 0 │ config │ ││ transport_password_life_time │ 00:00:00 │ config │ ││ grace_authid_period │ 00:00:00 │ config │ │└───────────────────────────────────┴──────────┴─────────────┴─────────────┘(27 rows)