Доменный контроллер 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/runaserver.test.com@TEST.COM HTTP/runaserver HTTP/runaserver@TEST.COM |
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
- 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
- Securely transport the keytab to the webserver
- 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
- Install mod_auth_kerb:
# sudo apt-get install libapache2-mod-auth-kerb
-
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.