Назад | Перейти на главную страницу

Делегирование Kerberos с помощью Apache, SSSD и FreeIPA

Позвольте мне начать с описания моей настоящей цели, потому что я не уверен, что пытаюсь решить ее должным образом =)

Я просто пытаюсь заставить свое веб-приложение получить учетные данные Kerberos по поручению пользователя, который входит в систему. Веб-сервер является частью моего домена Linux (зарегистрированного в FreeIPA / RedHat IdM). Клиент внешний, но пользователь существует в моем домене. Итак, чего я хочу добиться:

  1. Пользователь переходит к моему веб-приложению и вводит свое имя пользователя / пароль (в настраиваемой форме входа)
  2. Веб-приложение проверяет имя пользователя и пароль на FreeIPA.
  3. Веб-приложение получает учетные данные Kerberos от имени вошедшего в систему пользователя, так что (например) веб-приложение теперь может отображать хранилища пользователя или выполнять некоторые привилегированные задачи на FreeIPA (для чего требуется проверка подлинности Kerberos).

До сих пор я играл с mod_intercept_form_submit, и я смог аутентифицировать пользователя с помощью FreeIPA, используя pam_sss.so (PAM + SSSD). Это сработало нормально, но я не смог найти полученный TGT для пользователя, поэтому не смог выполнить пункт 3.

В качестве альтернативы я, вероятно, мог бы использовать аутентификацию GSSAPI на Apache, но поскольку клиент не зарегистрирован в домене, это будет отображать форму входа в систему (хотя в идеале я бы хотел использовать пользовательскую форму входа из веб-приложения).

В качестве альтернативы, я думаю, что веб-приложение может просто взять пароль из формы входа и запустить kinit <username> с его помощью прямо на веб-сервере.

Что бы вы порекомендовали? Потому что я чувствую, что должно быть что-то элегантное ... Например, если бы PAM просто получил для меня Kerberos TGT, и мое веб-приложение могло бы получить к нему доступ после входа в систему, это было бы здорово ...

Интересно, действительно ли вам нужен TGT в веб-приложении для последующих операций с хранилищем или FreeIPA. Кажется, что билета службы Kerberos должно хватить.

Для этого лучшим подходом может быть использование S4U2Proxy и S4U2Self. Модуль mod_auth_gssapi поддерживает их через директивы GssapiUseS4U2Proxy и GssapiImpersonate. Фактически, WebUI FreeIPA использует тот же механизм при работе со своим сервером LDAP.