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