Аутентификация 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/