= 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 requisite pam_exec.so expose_authtok log=/var/log/kc-ssh-pam.log /opt/kc-ssh-pam/kc-ssh-pam
}}}
В скрипте `/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'' к преднастроенным серверам.