Настройка аутентификации nginx через ldap с помощью модуля spnego

Kerberosauthentication

Доменный контроллер Samba4

Samba позволяет организовать аналог контроллера домена Windows 2003/2008 на Linux системах. С выходом четвертой версии Samba появилась возможность использовать групповые политики и ряд других функций, стандартных для контроллеров на базе Microsoft Windows Server.

В качестве DNS-backend можно использовать BIND9_DLZ. Однако настройка в связке с ним является довольно трудоемкой и “сырой”, поскольку в официальных версиях Samba4 отсутствует его поддержка. В то же время, Samba позволяет использовать свой штатный DNS-backend — SAMBA_INTERNAL, вполне пригодный для использования в небольших корпоративных сетях.

В данной заметке будет рассмотрено, как настроить AD DC в Samba4 на CentOS 7.2 Minimal при использовании штатного DNS-backend — Samba_Internal.

Configure Winbind with smb.conf

Configure by replacing the existing content under section with the following content to add Linux to windows active directory. Modify the realm and workgroup value as per your environment.

You can also use Red Hat’s AD Integration Helper to help generate optimal configuration values for connecting to your organizations Active Directory.

        workgroup = GOLINUXCLOUD
        realm = GOLINUXCLOUD.COM
        security = ads
        idmap config * : backend = autorid
        idmap config * : range = 100000-19999999
        idmap config * : rangesize = 1000000
        template homedir = /home/%D/%U
        template shell = /bin/bash
        winbind use default domain = false
        winbind offline logon = true
        log file = /var/log/samba/log.%m
        max log size = 50
        log level = 0

security=ads describes the membership in an Active Directory domain.

The parameters idmap* and winbind enum* map Windows users and groups to Unix users and groups.

Advertisement

Usually system users and groups are assigned IDs in the range from 0 to 999, and local users and groups are assigned IDs starting from 1000. With this in mind, it seems pretty reasonable to start assigning IDs to domain users and groups starting from 1000000. We should also differentiate between the domain users and groups and the local built-in accounts existing on a member server, such as the local administrator, the local guest, and so on. These two groups must not overlap, so we assign the range 1000000 to 19999999 to domain built-in user and group accounts

Run the following command to verify that you can resolve the standard SRV records:

# host -t SRV _kerberos._udp.golinuxcloud.com.
_kerberos._udp.golinuxcloud.com has SRV record 0 100 88 win-71humtros3m.golinuxcloud.com.


# host -t SRV _ldap._tcp.golinuxcloud.com.
_ldap._tcp.golinuxcloud.com has SRV record 0 100 389 win-71humtros3m.golinuxcloud.com.

Stop the service if it is in running state:

# systemctl stop winbind

An overview of the lab environment

For demonstrations of this article to add CentOS 8 to Windows Domain Controller (Active Directory), we will use virtual machines running in an Oracle VirtualBox installed on my Linux Server virtualization environment.

We have a Microsoft Server 2012R2 Active Directory Domain Controller with the IP address 192.168.0.107, CentOS 8 host with the IP address 192.168.0.117 and RHEL 8 with IP Address 192.168.0.106. In this article I will only cover the part to add CentOS 8 to Windows Domain Controller on the client side. So this article requires a pre-configured Windows Active Directory.

I have only used snippets from my CentOS 8 Server but I have verified the steps on both RHEL 8 and CentOS 8.

ktab

It requests to install Java JRE or SDK or open source equivalent, for example, OpenJDK. The tool has a limited set of options.

It can’t be defined encryption and principle types. It will be used Kerberos protocol 5 and it will be created multiple encryption types.

ktab -a Windows user name@Realm name Password -n Key version number -k Keytab file path

List all encryption types stored in a keytab file

ktab -l -e -k Keytab file path

If multiple encryption types are not accepted in authentication process, it can be left one encryption type and the rest can be deleted.

ktab -d Windows user name@Realm name -f -e Number of encryption type -k Keytab file path

, for example, 16. See RFC 3961, section 8 for the full list of values.

Настройка iptables.

После того как настройка и тестирование завершены можно задать правила и включить iptables. Но для начала убедимся, что альтернативный firewalld отключен:

если активен, то убираем из автозагрузки и отключаем:

По желанию можно так же отключить Network Manager (команда nmtui), поскольку все настройки сети можно производить, редактируя /etc/sysconfig/network-scripts/.

Проверяем статус Network Manager:

убираем из автозагрузки и отключаем:

Для Enterprise Linux, возможно, потребуется убрать из автостарта ipchains:

В минимальных дистрибутивах, таких как Centos 7.2 minimal пакет iptables поумолчанию может отсутствовать. Устанавливаем:

и добавляем правила:

Запускаем iptables и добавляем в автозагрузку:

Листинг всех правил с номерами строк и портов можно получить по команде:

Обзор Kerberos¶

Жесткая аутентификация и установление личности пользователя – основа безопасного доступа в Hadoop. Пользователи должны
иметь возможность надежно “идентифицировать” себя, а затем использовать эту идентификацию во всем кластере Hadoop. Как
только это будет сделано, данные пользователи могут получить доступ к ресурсам (например, к файлам или каталогам) или
взаимодействовать с кластером (например, выполнять задания MapReduce). Помимо пользователей, сами ресурсы кластера Hadoop
(такие как хосты и сервисы) должны проходить аутентификацию друг с другом, чтобы избежать потенциально опасных вредоносных
систем или систем, “позиционирующих себя” как надежные компоненты кластера с целью получения доступа к данным.

Hadoop использует Kerberos в качестве основы для строгой аутентификации и обеспечения идентичности пользователям и
сервисам. Kerberos является сторонним механизмом аутентификации, на который полагаются пользователи и сервисы для
удостоверения подлинности друг друга. Сам сервер Kerberos известен как Key Distribution Center (Центр распределения ключей)
или KDC. Он состоит из трех частей:

  • База данных пользователей и сервисов (известных как принципалы), о которых он знает, и соответствующие пароли Kerberos;
  • Сервер аутентификации (AS), который выполняет первоначальную проверку подлинности и выдает Ticket Granting Ticket (TGT);
  • Ticket Granting Server (TGS) – сервер, который оформляет последующие билеты на основе начального TGT.

Пользователь-принципал запрашивает аутентификацию от AS. AS отправляет в ответ TGT, который зашифрован с
использованием пароля пользователя-принципала Kerberos, известный только пользователю и AS. Пользователь-принципал
расшифровывает TGT локально, используя свой пароль Kerberos, и с этого момента до истечения срока действия билета
пользователь-принципал может использовать TGT для получения билетов от TGS. Данные билеты позволяют принципалу получить
доступ к различным сервисам.

Поскольку ресурсы кластера (хосты или сервисы) не могут каждый раз предоставлять пароль для расшифровки TGT, они
используют специальный файл keytab, который содержит учетные данные аутентификации ресурса. Набор хостов, пользователей и
сервисов, над которыми сервер Kerberos имеет контроль, называется сферой.

Encryption types

As per .

Encryption Type Code Section or Comment
des-cbc-crc 1 6.2.3
des-cbc-md4 2 6.2.2
des-cbc-md5 3 6.2.1
4
des3-cbc-md5 5
6
des3-cbc-sha1 7
dsaWithSHA1-CmsOID 9 (pkinit)
md5WithRSAEncryption-CmsOID 10 (pkinit)
sha1WithRSAEncryption-CmsOID 11 (pkinit)
rc2CBC-EnvOID 12 (pkinit)
rsaEncryption-EnvOID 13 (pkinit from PKCS#1 v1.5)
rsaES-OAEP-ENV-OID 14 (pkinit from PKCS#1 v2.0)
des-ede3-cbc-Env-OID 15 (pkinit)
des3-cbc-sha1-kd 16 6.3
aes128-cts-hmac-sha1-96 17
aes256-cts-hmac-sha1-96 18
rc4-hmac 23 (Microsoft)
rc4-hmac-exp 24 (Microsoft)
subkey-keymaterial 65 (opaque; PacketCable)

Configuration

In Ubuntu release 9.04 (Jaunty Jackalope) and newer, the details of PAM configuration are handled by the pam-auth-update utility. To enable or disable Kerberos authentication, run pam-auth-update from a command prompt. More information on pam-auth-update is available in its documentation.

For releases prior to Jaunty, a basic configuration can be implemented by adding the following line to the top of the stack in /etc/pam.d/common-auth:

auth    sufficient      pam_krb5.so minimum_uid=1000
...

PAM is a highly configurable framework; consult the PAM documentation for more information on advanced configuration options, such as falling back on local password services.

Настройка Samba и вход в домен

Для того, чтобы войти в домен, необходимо прописать правильные настройки в файле . На данном этапе вас должны интересовать только некоторые опции из секции . Ниже — пример части файла конфигурации Samba с комментариями по поводу значения важных параметров:

   # Эти две опции нужно писать именно в заглавном регистре, причём workgroup без
   # последней секции после точки, а realm - полное имя домена 
   workgroup = DOMAIN
   realm = DOMAIN.COM

   # Эти две опции отвечают как раз за авторизацию через AD
   security = ADS
   encrypt passwords = true
   # Просто важные 
   dns proxy = no 
   socket options = TCP_NODELAY

   # Если вы не хотите, чтобы самба пыталась при случае вылезти в лидеры в домене или рабочей группе,
   # или даже стать доменконтроллером, то всегда прописывайте эти пять опций именно в таком виде
   domain master = no
   local master = no
   preferred master = no
   os level = 0
   domain logons = no

   # Отключить поддержку принтеров
   load printers = no
   show add printer wizard = no
   printcap name = /dev/null
   disable spoolss = yes

После того, как вы отредактируете выполните команду

testparm

Она проверит вашу конфигурацию на ошибки и выдаст суммарную сводку о нём:

# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions

Как видно мы задали правильные параметры для того, чтобы наш компьютер стал членом домена. Теперь пора попытаться непосредственно войти в домен. Для этого введите команду:

net ads join -U username -D DOMAIN

И в случае успеха вы увидите что-то похожее на:

# net ads join -U username -D DOMAIN
Enter username's password:
Using short domain name -- DOMAIN
Joined 'SMBSRV01' to realm 'domain.com'

Используемые параметры команды net

: Обязательный параметр, вместо необходимо подставить имя пользователя с правами администратора домена, и указать пароль.

: — собственно сам домен, домен можно и не указывать, но лучше всё же это всегда делать — хуже не будет.

: , можно не указывать, но бывают случаи когда автоматически сервер не находит контроллер домена.

: В AD часто используется OU (Organizational Unit), есть в корне домена OU = Office, в нем OU = Cabinet, чтобы сразу добавить в нужный можно указать так: sudo net ads join -U username createcomputer=«Office/Cabinet».

Если больше никаких сообщений нет — значит всё хорошо. Попробуйте попинговать свой компьютер по имени с другого члена домена, чтобы убедиться, что в домене всё прописалось так, как надо.

Так же можно набрать команду:

net ads testjoin

Если все хорошо, можно увидеть:

#net ads testjoin
Join is OK

Но иногда после сообщения о присоединении к домену выдаётся ошибка наподобие:

DNS update failed!

Это не очень хорошо, и в этом случае рекомендуется ещё раз прочитать раздел про настройку DNS чуть выше и понять, что же вы сделали не так. После этого нужно удалить компьютер из домена и попытаться ввести его заново. Если вы твердо уверены, что всё настроили верно, а DNS всё равно не обновляется, то можно внести вручную запись для вашего компьютера на ваш DNS сервер и всё будет работать. Конечно, если нет никаких других ошибок, и вы успешно вошли в домен. Однако лучше всё же разберитесь, почему DNS не обновляется автоматически. Это может быть связано не только с вашим компьютером, но и с некорректной настройкой AD.

Прежде чем выяснять, почему же не обновляется DNS, не забудьте перезагрузить компьютер после введения в домен! Вполне возможно, что это решит проблему.

Если всё прошло без ошибок, то поздравляем, вы успешно вошли в домен! Можете заглянуть в AD и убедиться в этом. Кроме того хорошо бы проверить, что вы можете видеть ресурсы в домене. Для этого установите :

sudo aptitude install smbclient

Теперь можно просматривать ресурсы компьютеров домена. Но для этого нужно иметь билет kerberos, т.е. если мы их удалили, то получаем опять через kinit (см. выше). Посмотрим какие ресурсы предоставлены в сеть компьютером :

smbclient -k -L workstation

Вы должны увидеть список общих ресурсов на этом компьютере.

# Команды для выполнения по вышеперечисленным пунктам

На контроллере домена:

setspn -A HTTP/runaserver.test.com runauser

ktpass -princ HTTP/runaserver.test.com -pass * -mapuser runauser

На сервере:

ktab -a HTTP/runaserver.test.com -n 0 -k C:/runawfe/krb5.keytab

Настройка браузера

Для того чтобы браузер пытался использовать Kerberos для аутентификации:

  • в нём должна быть включена настройка Enable Integrated Windows Authentication (в некоторых версиях IE её нет)
  • настройки зоны безопасности должны позволять её использование, по умолчанию это настроено для LocalIntranet
  • настройка {SERVER_SPN} должна быть корректно произведена

Во время запроса на сервере формируется в логе Request Authorization:

  • Negotiate YIIV… — правильно
  • Negotiate TlRMT… — неправильно (попытка использовать NTLM)

Если по нажатию на ссылке Сквозная аутентификация (kerberos) будет выведено окно с вводом логина/пароля — то это значит что браузер не получил сервисный тикет в контроллере домена или даже не пытался это сделать. При возникновении такой ситуации самым действенным оказывается использование WireShark для прослушивания траффика по порту 88 с контроллером домена.

Настройка оповещателя

На сервере должна быть корректно настроена аутентификация.

Настройка для получения заданий

Настроить kerberos.properties если authentication.type установлено в kerberos (для sspiKerberos это не требуется):

appName=com.sun.security.jgss.initiate
moduleClassName=com.sun.security.auth.module.Krb5LoginModule
useTicketCache=true
doNotPrompt=true
debug=true
serverPrincipal=HTTP/runaserver.test.com

Настройка для браузера

Настройку login.relative.url установить в /krblogin.do.

Типичные проблемы

Устаревшее руководство по настройке аутентификации Kerberos больше подходит для Windows2003

ошибка

описание

что делать

Client not found in Kerberos database (6)

SPN не зарегистрирован как пользователь (UserPrincipalName) либо продублирован (setspn -x)

Зарегистрировать SPN либо удалить дубликат

Pre-authentication information was invalid (24)

Неправильный пароль либо несовпадение информации по логину (UserPrincipalName изменён?).
Обратите внимание на атрибут salt в пакете KRB Error: KRB5KDC_ERR_PREAUTH_FAILED, он должен совпадать с principal, для которого вы получаете тикет; если не совпадает — то в БД kerberos что-то не так, попробуйте вновь воспользоваться командой ktpass

Сменить пароль (у пользователя и при формировании keytab)

Message stream modified (41)

Некорректно задано имя

Задать имя корректно — как оно задано на контроллере домена с учётом регистра

Clients credentials have been revoked (18)

Пользователь заблокирован

В настройках пользователя снять галочку Account is disabled

HTTP 400 при попытке обработки тикета YIIV…

Увеличить разрешённый максимум в Jboss с помощью настройки org.apache.coyote.http11.Http11Protocol.MAX_HEADER_SIZE в standalone.xml

No valid credentials provided (Mechanism level: Attempt to obtain new ACCEPT credentials failed!)

Настройка appName=com.sun.security.jgss.accept является устаревшей — для старых версий JDK

Изменить на com.sun.security.jgss.krb5.accept в kerberos.properties

Encryption type AES256 CTS mode with HMAC SHA1-96 is not supported/enabled

Нет поддержки типа шифрования AES-256 в JDK

Включение аудита на контроллере домена иногда помогает понять проблему (логирование происходит в журнале событий, категория Безопасность.

Samba

Make sure you have a reasonably recent Samba release installed (eg 3.5 or 3.6+)

Set Samba to allow access via both secrets (winbind and local passwd) and Kerberos. There are many more options that you might want to configure when joining an AD domain but here we only consider Kerberos related ones.

FILE Part of Samba config

global
realm=EXAMPLE.CO.UK
kerberosmethod=secretsandkeytab
winbindrefreshtickets=yes

Tell winbind to setup a ticket cache for a logged in user.

FILE Part of winbind’s PAM config

global
krb5_auth=yes
krb5_ccache_type=FILE

Join the domain

Start or restart Samba. Make sure that /etc/conf.d/samba has winbind included in the list of daemons.

GOsa2

  • Сайт проекта: oss.gonicus.de/labs/gosa.
  • Лицензия: GNU GPL.
  • Дистрибутивы: пакеты — Debian/Ubuntu, RedHat/CentOS/Fedora, openSUSE/SLES, из исходных текстов — любой *nix.

Проект GOsa2, являющийся надстройкой для популярных опенсорсных приложений, предоставляет администратору единый центр управления всей ИТ-инфраструктурой. Интерфейс позволяет управлять учетными записями *nix и Samba, правами пользователей и групп, компьютерами, списками рассылок, приложениями, настройками основных сетевых служб: DHCP, DNS, HTTP, SMTP и т. д. Разработка ведется под эгидой компании Gonicus GmbH, которая использует GOsa в своих сервисах.

Все функции вынесены в плагины (принцип «один сервис = один плагин»), поэтому админ собирает конфигурацию в соответствии со своими нуждами.

В настоящее время реализовано более 30 плагинов, обеспечивающих управление такими сервисами, как Squid, DansGuardin, Postfix, Courier-IMAP, Maildrop, GNARWL, Cyrus-SASL, OpenSSL, ISC DHCP, WebDAV, PureFTPd, PPTP, Kerberos, Asterisk, Nagios, OPSI, Netatalk, FAI, rsyslog, и серверами коллективной работы: SOGo, OpenGroupware, Kolab, Scalix. При этом все вышеуказанные плагины не обязательно должны работать на одном сервере, некоторые из них можно установить на отдельные хосты.

GOsa позволяет управлять учетными записями *nix и сервисами

Учетные записи пользователей объединяются в группы, для которых назначаются разрешенные приложения. При создании новых аккаунтов применяются шаблоны (админ создает их сам) с прописанными правами доступа к объектам. Набор разрешений ACL состоит из типа, определяющего видимость, объектов (пользователей/групп) и разрешений. Разрешения определяют все возможные действия: создание, удаление, перемещение, чтение, запись и т. д.

GOsa — единственный в нашем обзоре проект с локализованным интерфейсом управления. Правда, локализован он пока не полностью, но использование gettext позволяет при необходимости сделать это самостоятельно.

Поддерживается установка в любом дистрибутиве Linux. Разработчики рекомендуют Debian, под который создан отдельный репозиторий. Также доступны пакеты для Red Hat/CentOS/Fedora и openSUSE/SLES, но, как правило, разработчики не спешат их собирать, поэтому версии немного запаздывают. Можно использовать любой веб-сервер, однако предпочтение отдается Apache2 и nginx. Документация доступна только на английском и не поспевает за развитием проекта, многие моменты отражены в ней весьма поверхностно.

Девиз Identity Policy Audit хорошо поясняет сущность FreeIPA
 

INFO

FreeIPA используется для аутентификации и авторизации в решении oVirt для виртуализации, построенном на основе KVM.

Инсталляцию описываемых продуктов рекомендуется производить на «чистую» систему, не выполняющую никаких других функций.

Для синхронизации 389DS с Active Directory необходимо установить Windows Sync.

После установки пакета 389-ds для конфигурации 389DS следует запустить скрипт.

Утилита system-config-autentification, входящая в состав Fedora, содержит вкладку, позволяющую активировать аутентификацию через FreeIPA.

Заключение

Даже невооруженным глазом видно, что наиболее многофункциональным инструментом является GOsa2. Это решение обеспечивает управление учетными записями и многочисленными сервисами, поддерживает установку в большинстве дистрибутивов Linux, имеет локализованный интерфейс. Однако окончательный выбор зависит от конкретной задачи.

# Термины и определения

термин описание пример
DOMAIN_NAME название домена test.com
REALM для Active Directory это всегда DOMAIN_NAME в верхнем регистре TEST.COM
SERVER_NAME название компьютера, где установлен RunaWFE Server runaserver
SERVER_USER логин пользователя, под которым работает RunaWFE Server runauser
SERVER_SPN SPN (Service principal name), который соответствует SERVER_USER

Формат FQDN для Windows2008: HTTP/{SERVER_NAME}.{DOMAIN_NAME}

Формат FQDN для Windows2003: HTTP/{SERVER_NAME}.{DOMAIN_NAME}@{REALM}

Формат NetBIOS для Windows2008: HTTP/{SERVER_NAME}

Формат NetBIOS для Windows2003: HTTP/{SERVER_NAME}@{REALM}

HTTP/runaserver.test.com

HTTP/[email protected]

HTTP/runaserver

HTTP/[email protected]

KEYTAB_PATH Путь к keytab-файлу ключей, хранящему хеши паролей пользователей C:/runawfe/krb5.keytab

Инструменты

название описание расположение комментарии
kinit Получение тикета TGT из контроллера домена JDK bin, есть альтернативные реализации пользователь может быть задан в виде {SERVER_USER} или {SERVER_USER}@{REALM}
klist Просмотр полученных тикетов и возможность их удаления из локального кеша JDK bin, есть альтернативные реализации
setspn Создаёт SPN и назначает его пользователю входит в Windows Server 2008+, ранее доступен в пакете Windows Server support tools
ktpass Меняет логин пользователя на SPN или формирует keytab файл входит в Windows Server 2008+, ранее доступен в пакете Windows Server support tools
ktab Формирует keytab файл JDK bin
ADSIEdit Просмотр свойств пользователя в контроллере домена Windows Server
WireShark Анализатор траффика

Описание

этап протокол описание данные запроса данные ответа примечания
KRB аутентификация пользователя клиента логин пользователя тикет TGT при входе в систему
1 HTTP вход в систему без HTTP заголовка Authorization HTTP 401
2 KRB получение сервисного тикета для сервера {SERVER_SPN} сервисный тикет шаг выполняется если тикета ещё нет в кеше клиента
3 HTTP продолжение входа в систему HTTP заголовок Authorization = YIIV… HTTP 200
4 KRB аутентификация пользователя сервера {SERVER_SPN} тикет TGT выполняется при отсутствии TGT во время взаимодействия с клиентом, происходит до возврата ответа 3 клиенту

Настройка Kerberos на FreeBSD

Тут все более-менее понятно, если что, можно глянуть в ман krb5.conf(5). Строка default_keytab_name указывает на файл keytab, который будет использоваться по-умолчанию всеми службами, которым нужен Kerberos, если ничего другого не указано. Другой способ задания файла keytab — в переменных окружения конкретного демона, например, в скрипте запуска этого демона(как тут http://wiki.squid-cache.org/ConfigExamples/Authenticate/Kerberos). Т. е. там можно для каждого демона задать свой keytab. Замечу, что под FreeBSD можно просто добавить строку squid_krb5_ktname=»path/to/keytab» в /etc/rc.conf. У меня прокси не будет выполнять других функций, для которых нужен Kerberos, так что я задал keytab в /etc/krb5.conf.
Теперь, когда все настроено и на месте можно посмотреть в keytab на предмет поддерживаемого шифрования:
А потом проверить возможность аутентификации в AD через Kerberos:

Получил тикет, посмотрел на него, удалил.

# krb5.ini

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

На сервере и клиентских машинах Windows он может быть расположен в ${windir}/krb5.ini.

Пример файла krb5.ini

 .test.com = TEST.COM
 test.com = TEST.COM

 default_realm = TEST.COM
 kdc_timesync = 1
 ccache_type = 4
 ticket_lifetime = 600
 default_tkt_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1
 default_tgs_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1
 permitted_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1

 kdc = CONSOLE

 TEST.COM = {
  kdc = 192.168.0.1
  kdc = 192.168.1.1
  default_domain = test.com
 }

 autologin = true
 forward = true
 forwardable = true
 encrypt = true

Настройка сервера

Данная инструкция сделана в окружении Windows Server2008R2 (контроллер домена), Windows Server2012R2 (RunaWFE Server), Windows7 (RunaWFE client).

В данном разделе регистр может иметь значение, хотя опытным путём было выяснено что логин пользователя, название компьютера сервера и SPN не являются регистрозависимыми.

Apache

Apache supports Kerberized authentication via mod_auth_kerb. The basic configuration utilizes Apache’s Basic Auth mechanism. Transport layer encryption (i.e. SSL/TLS) should be deployed if the basic configuration is used; the Basic Auth mechanism does not encrypt login credentials during transmission.

It is also possible to configure web browsers to use an existing credentials cache (instead of requiring a user to re-enter their Kerberos username and password) by enabling GSSAPI SPNEGO. Transport layer encryption is not necessary if SPNEGO is used, but the client’s browser must be properly configured.

Server

  1. On the Kerberos KDC, create a principal and generate a keytab for the web server:
     $ sudo kadmin.local
     kadmin> addprinc -randkey HTTP/webserver.example.com
     kadmin> ktadd -k /etc/apache2/auth/apache2.keytab HTTP/webserver.example.com
     kadmin> quit
  2. Securely transport the keytab to the webserver
  3. On the webserver, set the keytab’s permissions and ownership:
     $ sudo chown www-data:www-data /etc/apache2/auth/apache2.keytab
     $ sudo chmod 400 /etc/apache2/auth/apache2.keytab
  4. Install mod_auth_kerb:
     # sudo apt-get install libapache2-mod-auth-kerb
  5. Update the Apache configuration file (generally available in /etc/apache2/sites-enabled/). Here access is restricted to /var/www.

     <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    
            AuthType Kerberos
            AuthName "Kerberos Login"
            KrbAuthRealm EXAMPLE.COM
            Krb5Keytab /etc/apache2/auth/apache2.keytab
            KrbMethodK5Passwd off #optional--makes GSSAPI SPNEGO a requirement
            Require valid-user
     </Directory>

Browser

To utilize existing an existing credentials cache (generated by kinit or a SSO login), the client’s browser must be configured to use GSSAPI SPNEGO. https://docs.spring.io/spring-security-kerberos/docs/current/reference/html/browserspnegoconfig.html provides configuration details for popular browsers.

Понравилась статья? Поделиться с друзьями:
Быть в курсе нового
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: