Syntax highlighting of devops/keycloak

= Keycloak =

== Установка и запуск ==

TODO

== Рецепты ==

=== SSH ===

Пример конфигурации, которая позволяет предоставлять административный доступ к серверу через `ssh` путем назначения роли пользователю или группе.

План:
 1. настраиваем сервер
 2. устанавливаем расширение в Keycloak

На этапе настройки сервера устанавливаем [[https://github.com/kha7iq/kc-ssh-pam | kc-ssh-pam]]. В процессе установки можно внести ряд дополнений:

Запрещаем дальнейшие действия в случае неудачной проверки пользователя в Keycloak. Это может быть полезным, если локальный пользователь с таким же именем уже существует на сервере или в Keycloak такого пользователя. В таком случае, пользователь сможет зайти под локальной учетной записью, что не является предпочтительным.
{{{
# --- вместо
auth sufficient pam_exec.so expose_authtok      log=/var/log/kc-ssh-pam.log     /opt/kc-ssh-pam/kc-ssh-pam
auth optional pam_script.so
# --- использовать
auth [success=2 default=ignore] pam_exec.so expose_authtok      log=/var/log/kc-ssh-pam.log     /opt/kc-ssh-pam/kc-ssh-pam
auth optional pam_script.so
auth requisite pam_deny.so
}}}

В скрипте `/usr/share/libpam-script/pam_script_auth` добавляем строку 

{{{#!highlight bash
adduser $PAM_USER sudo
}}}
чтобы новый пользователь сразу добавлялся в группу `sudo`.

Также, здесь необходимо отключить пароль для `sudo`.

{{{#!highlight bash
sudo visudo

# --- вместо
%sudo  ALL=(ALL:ALL) ALL
# --- используем
%sudo ALL=NOPASSWD: ALL
}}}

На втором этапе устанавливаем расширение [[https://github.com/sventorben/keycloak-restrict-client-auth | keycloak-restrict-client-auth ]] для Keycloak. Это расширение нам требуется для ограничение доступа к Realm клиенту, созданному на предыдущем этапе. "Из коробки" (на сколько понимаю) Keycloak не предоставляет такую возможность.

Установку выполняем по [[https://github.com/sventorben/keycloak-restrict-client-auth/blob/main/README.md | README.md ]] для ''Client Role based'' режима. Здесь можно использовать более простой вариант аутентификации

{{devops/keycloak/ssh-flow|SSH authorization flow | width=50%}}

Кроме того, требуется указать новый способ аутентификации в настройках клиента ''ssh-login'': Clients > ssh-login > Advanced > Authentication flow overrides > Direct Grant Flow

По итогу получаем, что при назначении роли `restricted-access` пользователю или группе предоставляется `ssh` доступ с ''sudo'' к преднастроенным серверам.