Аутентификация Kerberos в PHP

Предположим, что я не знаю много о Kerberos - просто основы.

У меня есть...

  • Debian Linux 2.6 Webserver
    • Apache 2.2
      • mod_auth_kerb/5.3
      • PHP/5.2
  • a (рабочий) царство Kerberos
  • Клиент Windows
    • Firefox 3
    • зарегистрированный идентификатор пользователя "[email protected]" в диспетчере сетевых идентификаторов MIT.

Как использовать эту информацию в PHP script, чтобы мне не нужно было входить на сайт, если у посетителя есть билет на кеберо? Я не хочу, чтобы Apache обрабатывал аутентификацию. Мне нужно выяснить, какой пользователь обращается к сайту через PHP.

Это возможно? Если да: Как?

Что я выяснил до сих пор: мне нужно "включить" домен в Firefox.

Однако об этом...

Ответ 1

Я не уверен, поможет ли это, но похоже, что Apache отправит PHP имя пользователя с помощью modauthkerb package если вы используете параметр KrbSaveCredentials. Вы должны получить две глобальные переменные в php:

 $_SERVER['REMOTE_USER']
 $_SERVER['KRB5CCNAME']

http://archives.postgresql.org/pgsql-admin/2004-08/msg00144.php похоже, что у них это работает.

Таким образом, если вы можете видеть, что такое пользователь, это действительно не требование, чтобы php действительно выполнял аутентификацию.

Ответ 2

mod_auth_kerb будет обрабатывать фактическую аутентификацию. После этого он установит переменные среды REMOTE_USER и KRB5CCNAME. Обратите внимание, что существует несколько предостережений:

  • mod_auth_kerb может выполнять трансляцию между основным сервером Kerberos и локальным именем пользователя, если включена опция Krb5AuthToLocal.
  • Если функция Krb5AuthToLocal включена, когда аутентификация завершается успешно, mod_auth_kerb вызовет библиотеку Kerberos для выполнения перевода с аутентифицированного имени на локальное имя, поскольку основной принцип Kerberos не всегда совпадает с фактическим пользователем в операционной системе (вы можете сопоставить участников с именами пользователей).
  • Когда используется MIT Kerberos, это сопоставление выполняется с помощью правил auth_to_local в файле /etc/krb 5.conf, для получения дополнительной информации см. справочную страницу krb5.conf.
  • mod_auth_kerb имеет ошибку, из-за которой локальное имя не должно иметь больше имени, чем сам главный. Обычно это относится к принципалам из области по умолчанию, поскольку они представлены без основной части, то есть "пользователь" вместо "user @REALM". Однако, если у вас есть несколько доверенных областей, пользователи из нестандартных областей будут отображаться как "[email protected]", а затем mod_auth_kerb будет волноваться. Эта ошибка должна быть исправлена ​​в Fedora 18+ и RHEL6.5, не уверена в Debian, так как mod_auth_kerb вверх по течению немного мертв.
  • Следовательно, ваша переменная REMOTE_USER будет содержать имя главного или локального пользователя Kerberos, в зависимости от того, как была настроена mod_auth_kerb. Если ваше приложение полагается на то, что значение REMOTE_USER должно быть реальным существующим пользователем системы, вам необходимо убедиться, что опция Krb5AuthToLocal включена, и такие пользователи видны в системе (через winbind или sssd).

В вашем случае я бы рекомендовал отлично изучить Тома Маклафлина: http://blogs.freebsdish.org/tmclaugh/2010/07/15/mod_auth_kerb-ad-and-ldap-authorization/