Метод аутентификации userpass позволяет пользователям проходить аутентификацию в Deckhouse Stronghold с помощью имени пользователя и пароля.
Особенности метода
При использовании метода userpass учитывайте следующие особенности:
- Имена пользователей и пароли задаются непосредственно в методе аутентификации по пути
auth/userpass/users/. - Метод
userpassне может считывать имена пользователей и пароли из внешнего источника. - Введённые имена пользователей приводятся в нижний регистр. Например,
Maryиmary— это равноценные записи.
Настройка
Чтобы пользователи могли проходить аутентификацию, настройте метод userpass.
Обычно эти действия выполняет оператор или система управления конфигурацией.
Для настройки аутентификации с помощью метода userpass выполните следующие шаги:
Включите метод аутентификации
userpass:- Stronghold в DP
- Stronghold в Linux
d8 stronghold auth enable userpassstronghold auth enable userpassМетод будет включён по пути
auth/userpass.Чтобы включить метод по другому пути, используйте флаг
-path:- Stronghold в DP
- Stronghold в Linux
d8 stronghold auth enable -path=<userpass_mount_path> userpassstronghold auth enable -path=<userpass_mount_path> userpassСоздайте пользователя (если необходимо), которому разрешена аутентификация:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold write auth/<userpass_mount_path>/users/alice \ password=Pass-123! \ token_policies=adminsstronghold write auth/<userpass_mount_path>/users/alice \ password=Pass-123! \ token_policies=admins
В результате будет создан пользователь alice с паролем Pass-123! и политикой admins.
Аутентификация пользователя с помощью метода userpass
Пример команды для аутентификации пользователя с помощью метода userpass:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold login -method=userpass username=alice password="Pass-123!"stronghold login -method=userpass username=alice password="Pass-123!"Блокировка пользователя
Если пользователь несколько раз подряд укажет неверные учётные данные, Stronghold на некоторое время прекратит проверять их и вернёт ошибку с отказом в доступе.
Такое поведение называется блокировкой пользователя (user_lockout).
Время, на которое пользователь блокируется, называется длительностью блокировки (lockout_duration).
После истечения этого времени пользователь сможет снова войти в систему.
Количество неудачных попыток входа, после которых пользователь блокируется, называется порогом блокировки (lockout_threshold).
Счётчик порога блокировки сбрасывается через несколько минут без попыток входа или после успешного входа.
Интервал, после которого счётчик сбрасывается при отсутствии попыток входа, называется сбросом счётчика блокировки (lockout_counter_reset).
Блокировка пользователя помогает снизить риск атак с подбором пароля.
Функция блокировки пользователя включена по умолчанию. Значения по умолчанию:
lockout_threshold— 5 попыток;lockout_duration— 15 минут;lockout_counter_reset— 15 минут.
Функцию блокировки пользователя можно отключить с помощью команды auth tune, передав параметру disable_lockout значение true:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold auth tune -user-lockout-disable=true userpassstronghold auth tune -user-lockout-disable=true userpassФункция блокировки пользователя поддерживается только методами аутентификации userpass, ldap и approle.
Смена собственного пароля пользователя
Пользователю можно разрешить менять с помощью метода userpass только собственный пароль.
Для этого создайте политику, в которой путь к паролю текущего пользователя формируется на основе имени аутентифицированного пользователя.
Создание политики
Используйте шаблон политики:
path "auth/userpass/users/{{identity.entity.aliases.<accessor>.name}}/password" {
capabilities = ["update"]
}Значение <accessor> получите с помощью команды:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold read -field=accessor sys/auth/userpassstronghold read -field=accessor sys/auth/userpassШаблон {{identity.entity.aliases.<accessor>.name}} автоматически подставляет имя аутентифицированного пользователя.
Поэтому путь всегда указывает только на пароль текущего пользователя.
Шаблон работает после аутентификации пользователя через метод userpass.
Разрешение смены собственного пароля для пользователя
Чтобы разрешить пользователю менять собственный пароль с помощью метода userpass, выполните следующие шаги:
- Если метод userpass уже включен
- Если метод userpass не включен
Получите уникальный идентификатор метода:
- Stronghold в DP
- Stronghold в Linux
ACCESSOR=$(d8 stronghold read -field=accessor sys/auth/userpass)ACCESSOR=$(stronghold read -field=accessor sys/auth/userpass)Создайте политику, позволяющую пользователю, аутентифицированному через
userpass, менять свой пароль:- Stronghold в DP
- Stronghold в Linux
d8 stronghold policy write self-change-password - <<EOF path "auth/userpass/users/{{identity.entity.aliases.${ACCESSOR}.name}}/password" { capabilities = ["update"] } EOFstronghold policy write self-change-password - <<EOF path "auth/userpass/users/{{identity.entity.aliases.${ACCESSOR}.name}}/password" { capabilities = ["update"] } EOF- Привяжите политику к пользователю, которому нужно разрешить менять свой пароль:
- Если пользователь существует
- Если пользователя не существует
- Stronghold в DP
- Stronghold в Linux
d8 stronghold write auth/userpass/users/alice/policies \ token_policies="self-change-password"stronghold write auth/userpass/users/alice/policies \ token_policies="self-change-password"Этот пример привяжет политику
self-change-passwordк существующему пользователюalice- Stronghold в DP
- Stronghold в Linux
d8 stronghold write auth/userpass/users/alice \ password="OldPass-123!" \ token_policies="self-change-password"stronghold write auth/userpass/users/alice \ password="OldPass-123!" \ token_policies="self-change-password"Этот пример создаст пользователя
alice, разрешит ему аутентификацию черезuserpassи привяжет к нему политикуself-change-password.
Включите метод
userpass:- Stronghold в DP
- Stronghold в Linux
d8 stronghold auth enable userpassstronghold auth enable userpassПолучите уникальный идентификатор метода:
- Stronghold в DP
- Stronghold в Linux
ACCESSOR=$(d8 stronghold read -field=accessor sys/auth/userpass)ACCESSOR=$(stronghold read -field=accessor sys/auth/userpass)Создайте политику, позволяющую пользователю, аутентифицированному через
userpass, менять свой пароль:- Stronghold в DP
- Stronghold в Linux
d8 stronghold policy write self-change-password - <<EOF path "auth/userpass/users/{{identity.entity.aliases.${ACCESSOR}.name}}/password" { capabilities = ["update"] } EOFstronghold policy write self-change-password - <<EOF path "auth/userpass/users/{{identity.entity.aliases.${ACCESSOR}.name}}/password" { capabilities = ["update"] } EOF- Привяжите политику к пользователю, которому нужно разрешить менять свой пароль:
- Если пользователь существует
- Если пользователя не существует
- Stronghold в DP
- Stronghold в Linux
d8 stronghold write auth/userpass/users/alice/policies \ token_policies="self-change-password"stronghold write auth/userpass/users/alice/policies \ token_policies="self-change-password"Этот пример привяжет политику
self-change-passwordк существующему пользователюalice- Stronghold в DP
- Stronghold в Linux
d8 stronghold write auth/userpass/users/alice \ password="OldPass-123!" \ token_policies="self-change-password"stronghold write auth/userpass/users/alice \ password="OldPass-123!" \ token_policies="self-change-password"Этот пример создаст пользователя
alice, разрешит ему аутентификацию черезuserpassи привяжет к нему политикуself-change-password.
Смена пароля пользователем
После аутентификации пользователь может изменить свой пароль, если для него это разрешено.
Пример команды для смены пользователем своего пароля:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold write auth/userpass/users/alice/password password="NewPass-456!"stronghold write auth/userpass/users/alice/password password="NewPass-456!"Если пользователь попытается изменить чужой пароль, Stronghold вернёт ошибку permission denied.
При указании пользователем неверных учетных данных при смене пароля возможна его блокировка.
Политика паролей по умолчанию
Если для метода userpass не назначена пользовательская политика паролей, при создании пользователя или смене пароля пользователя Stronghold использует политику по умолчанию.
Политика по умолчанию для метода userpass требует:
8символов в пароле;- минимум одну прописную букву;
- минимум одну строчную букву;
- минимум одну цифру;
- минимум один символ тире (
-).
Чтобы для метода userpass вместо политики паролей по умолчанию использовать пользовательскую политику, выполните команду (вместо policy_name укажите название нужной политики):
- Stronghold в DP
- Stronghold в Linux
d8 stronghold write auth/userpass/password-policy/{policy_name}stronghold write auth/userpass/password-policy/{policy_name}