Sso pop device что это


Технология единого входа — Википедия

Материал из Википедии — свободной энциклопедии

Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 22 марта 2015; проверки требуют 5 правок. Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 22 марта 2015; проверки требуют 5 правок.

Технология единого входа (англ. Single Sign-On) — технология, при использовании которой пользователь переходит из одного раздела портала в другой без повторной аутентификации.

Например, если на веб-портале существует несколько обширных независимых разделов (форум, чат, блог и т. д.) то, пройдя процедуру аутентификации в одном из сервисов, пользователь автоматически получает доступ ко всем остальным, что избавляет его от многократного ввода данных своей учётной записи.

Kerberos[править | править код]

После успешной первичной аутентификации центр распределения ключей (Key Distribution Center, KDC) выдает первичное удостоверение пользователя для доступа к сетевым ресурсам — Ticket Granting Ticket (TGT). В дальнейшем, при обращении к отдельным ресурсам сети, пользователь, предъявляя TGT, получает от KDC удостоверение для доступа к конкретному сетевому ресурсу — Service Ticket (TGS). В качестве примера реализации протокола Kerberos можно отметить доменную аутентификацию пользователей в операционных системах Microsoft, начиная с Windows 2000[1].

Смарт-карты и токены[править | править код]

При первоначальном входе требуется подключить смарт-карту и токен. Технология единого входа, основанная на смарт-картах и токенах, использует либо сертификаты, либо пароли, записанные на этих ключах.

Встроенная аутентификация Windows[править | править код]

Под встроенной аутентификацией Windows понимается продукт Microsoft, использующий протоколы SPNEGO, Kerberos, и NTLMSSP. Чаще всего этим термином обозначают аутентификацию, происходящую при взаимодействии Microsoft Internet Information Services и Internet Explorer.

Security Assertion Markup Language[править | править код]

SAML (security assertion markup language — язык разметки утверждений безопасности) — язык разметки, основанный на языке XML. Открытый стандарт обмена данными аутентификации и авторизации между участниками, главным образом между поставщиком идентификации (англ. identity provider) и поставщиком услуг (англ. service provider). Пользователь запрашивает доступ к ресурсу, защищенному поставщиком услуг. Поставщик услуг, чтобы провести идентификацию пользователя, направляет запрос на проведение аутентификации в адрес поставщика идентификации. Поставщик идентификации проверяет наличие у пользователя активной сессии, если она отсутствует, то проводит аутентификацию пользователя, и формирует ответ с данными пользователя.

В качестве примера реализации можно привести систему единого входа, реализованную в Электронном правительстве на основе Единой системы идентификации и аутентификации. Примером поставщика идентификации, использующего SAML в целях обеспечения единого входа, является Oracle Identity Federation и Blitz Identity Provider.

Корпоративный SSO (Enterprise SSO)[править | править код]

Представляет собой альтернативу «подлинному» механизму единого входа. Корпоративный SSO (Enterprise SSO, ESSO) требует установки специального агента на каждое рабочее место сотрудника. Функция агента — отслеживать появление форм ввода логина и пароля и автоматически подставлять логин и пароль пользователя в эту форму. В результате пользователь проходит аутентификацию, даже не замечая отображения формы ввода логина и пароля.

К основным преимуществам технологии единого входа относятся:

  • уменьшение парольного хаоса между различными комбинациями имени пользователя и пароля;
  • уменьшение времени на повторный ввод пароля для одной и той же учётной записи;
  • поддержка традиционных механизмов аутентификации, таких как имя пользователя и пароль;
  • снижение расходов на IT-службу за счёт уменьшения количества запросов по восстановлению забытых паролей;
  • обеспечение безопасности на каждом уровне входа/выхода/доступа к системе без причинения неудобств пользователям.

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

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

Механизм корпоративного SSO (Enterprise SSO) не обеспечивает высокого уровня защищенности, поскольку в конечных системах аутентификация происходит по паролю. Кроме того, этот механизм требует установки специальных агентов, поддерживаются не все устройства и операционные системы.

ru.wikipedia.org

Single Sign-On, или Танцы Шестерых / InterSystems corporate blog / Habr



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

Материал прозаичен, но может оказаться кому-нибудь полезным, чему я буду очень рад. Ещё больше буду признателен конструктивным советам и отзывам.

Итак, наша тема – «Как реализовать Single Sign-On для веб-приложения в условиях разношёрстности и нормальной лохматости системного зоопарка».


Single Sign-On. Вводная


Доверился кому, так доверяй во всём.
© Цецилий Стаций

Для тех, кто не в курсе (хотя они вряд ли станут читать этот материал), скажу, что Single Sign-On (в дальнейшем повествовании – «SSO») в общепринятом представлении не является ни технологией, ни тем более неким магическим протоколом. SSO – это подход, метод, позволяющий реализовать связность AAA (Authentication & Authorization & Accounting) между разнородными системами и приложениями без дополнительных телодвижений со стороны конечного пользователя.

Типичными примерами SSO являются, например, решения, построенные целиком на продуктах Microsoft; в этом случае сервер(ы) Active Directory обеспечивают не только хранение каталога, но и управляют поведением подключенных к домену рабочих станций, установленным на них софтом и всем прочим, вплоть до железа (мы же все умеем запрещать политиками тот же USB). Сквозная парадигма AAA в такой ситуации обеспечивается почти автоматически при использовании продуктов Microsoft, то есть в гомогенной среде.

Гетерогенная IT-структура в отношении прозрачности AAA несколько сложнее, однако и для этой среды уже выработано много способов реализации и несть им числа.

В качестве примеров:


  • Известная компания Atlassian имеет на борту хорошо зарекомендовавший себя продукт Atlassian Crowd, решающий подобные задачи, однако он заточен под конкретную линейку программных продуктов этой компании.
  • Многие из нас используют Портал ГосУслуг, и, абсолютно все мы, являясь ответственными налогоплательщиками, знаем, что на сайте nalog.ru доступна аутентификация через Портал ГосУслуг.
  • Парадоксальный, но на удивление частый вариант аутентификации: «Вхожу на Google, затем на Facebook с аутентификацией через Google, а потом на AliExpress с аутентификацией через Facebook».

Два из трёх вышеперечисленных пункта не имеют никакого отношения к SSO.

Угадаете, какие? :)


Аксиома

В рамках этой статьи принимаем, что SSO реализовано и работает исключительно в рамках Intranet (в корпоративной среде), и при этом обеспечивает достаточную надёжность, отказоустойчивость и безопасность.


Задача

На входе мы имеем:


  • Веб-приложение, построенное на платформе InterSystems.
  • Линуксовые серверы, на котором оно крутится. Серверы расположены в интранете Заказчика.
  • Развитая Microsoft-инфраструктура Заказчика, в том числе и весьма неплохо настроенные групповые политики на грамотном лесе доменов и связке контроллеров.
  • Уважаемый Заказчик, сказавший ключевые фразы «Надо!» и «Чтобы было готово вчера!».
  • И, к счастью, полноценный тестовый сервер, так что нам есть где развернуться!

Сразу оговорюсь, что есть и более простые пути решения этой задачки, помимо описанного ниже, но мы же их не ищем. Ну и требования Заказчика были не самые однозначные.

Итак, приступаем!


Танцуем с Пингвинами. Linux



Домен: Эукариоты, Царство: Животные, Подцарство: Эуметазои, Тип: Хордовые, Подтип: Позвоночные, Инфратип: Челюстноротые, Надкласс: Четвероногие, Класс: Птицы, Подкласс: Новонёбные, Отряд: Пингвинообразные, Семейство: Пингвиновые, Вид: Oracle Linux Server release 7.2

Установка

Нам достался вполне оперившийся потомок/клон RHEL под именем Oracle Linux Server release 7.2.


Настройка

Как всегда, Линукс в его серверном виде прост, беззаботен и безотказен, но нам важно убедиться, что он правильно сконфигурирован, особенно в части сетевых настроек.


Тестирование

Сначала смотрим на настройки DNS, т.к. это критично для работоспособности всего решения:

[[email protected] ~]# cat /etc/resolv.conf # Generated by NetworkManager search my-domain.ru nameserver 172.16.0.1 nameserver 172.16.0.2 

На этом этапе необходимо проверить доступность серверов DNS (которые, в нашем случае, являются и домен-контроллерами). Сделать это можно по-разному, просто используйте свои любимые утилиты и методы проверки (host, dig, telnet, ping, …). Важно, чтобы нужные нам порты были доступны и работоспособны, а в случае DNS это в первую очередь TCP/53. И не забываем про кощунство и жадность сетевых администраторов и безопасников (я сам такой), которые могут закрыть вам всё, включая ICMP, и оставить только парочку затребованных и согласованных портов. Что есть правильно.


Собачий вальс. Kerberos



Це́рбер, также Ке́рбер (от др.-греч. Κέρβερος, лат. Cerberus) — в греческой мифологии порождение Тифона и Ехидны (Тартара и Геи), трёхголовый пёс, у которого из пастей течёт ядовитая смесь. Цербер охранял выход из царства мёртвых Аида, не позволяя умершим возвращаться в мир живых. Однако это удивительное по силе существо было побеждено Гераклом в одном из его подвигов.

Уверен, что не нужно напоминать про необходимость правильной настройки Kerberos для «плодотворного сотрудничества» с MSAD.

Разумеется, для установки и конфигурирования вам необходимы root'овые права на сервере. Или sudo. Или «Звоните Солу».


Установка

Установка и настройка необходимых пакетов производится довольно просто, если «злые сетевые админы» дали вашему серверу выход в Интернет.

К сожалению, Интернет с доступом к репозиториям нужен на этапе установки, если добрые админы не установили всё нужное заблаговременно.

И всё печально, если нет ни доступа, ни установленных пакетов.

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

[[email protected] ~]# yum install krb5-workstation Загружены модули: ulninfo Разрешение зависимостей --> Проверка сценария ---> Пакет krb5-workstation.x86_64 0:1.14.1-26.el7 помечен для установки --> Обработка зависимостей: libkadm5(x86-64) = 1.14.1-26.el7 пакета: krb5-workstation-1.14.1-26.el7.x86_64 --> Обработка зависимостей: krb5-libs(x86-64) = 1.14.1-26.el7 пакета: krb5-workstation-1.14.1-26.el7.x86_64 --> Обработка зависимостей: libkadm5srv_mit.so.10(kadm5srv_mit_10_MIT)(64bit) пакета: krb5-workstation-1.14.1-26.el7.x86_64 --> Обработка зависимостей: libkadm5srv_mit.so.10()(64bit) пакета: krb5-workstation-1.14.1-26.el7.x86_64 --> Проверка сценария ---> Пакет krb5-libs.x86_64 0:1.13.2-10.el7 помечен для обновления ---> Пакет krb5-libs.x86_64 0:1.14.1-26.el7 помечен как обновление ---> Пакет libkadm5.x86_64 0:1.14.1-26.el7 помечен для установки --> Проверка зависимостей окончена Зависимости определены ============================================================== Package Архитектура Версия Репозиторий Размер ============================================================== Установка: krb5-workstation x86_64 1.14.1-26.el7 ol7_latest 772 k Установка зависимостей: libkadm5 x86_64 1.14.1-26.el7 ol7_latest 172 k Обновление зависимостей: krb5-libs x86_64 1.14.1-26.el7 ol7_latest 741 k Итого за операцию ====+++++============================================= Установить 1 пакет (+1 зависимый) Обновить ( 1 зависимый) Объем загрузки: 1.6 M Is this ok [y/d/N]: y Downloading packages: No Presto metadata available for ol7_latest (1/3): krb5-libs-1.14.1-26.el7.x86_64.rpm | 741 kB 00:00:00 (2/3): libkadm5-1.14.1-26.el7.x86_64.rpm | 172 kB 00:00:00 (3/3): krb5-workstation-1.14.1-26.el7.x86_64.rpm | 772 kB 00:00:00 -------------------------------------------------------------------------------- Общий размер 3.9 MB/s | 1.6 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Обновление : krb5-libs-1.14.1-26.el7.x86_64 1/4 Установка : libkadm5-1.14.1-26.el7.x86_64 2/4 Установка : krb5-workstation-1.14.1-26.el7.x86_64 3/4 Очистка : krb5-libs-1.13.2-10.el7.x86_64 4/4 Проверка : krb5-libs-1.14.1-26.el7.x86_64 1/4 Проверка : libkadm5-1.14.1-26.el7.x86_64 2/4 Проверка : krb5-workstation-1.14.1-26.el7.x86_64 3/4 Проверка : krb5-libs-1.13.2-10.el7.x86_64 4/4 Установлено: krb5-workstation.x86_64 0:1.14.1-26.el7 Установлены зависимости: libkadm5.x86_64 0:1.14.1-26.el7 Обновлены зависимости: krb5-libs.x86_64 0:1.14.1-26.el7 Выполнено! 

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

И Да, обещаю, что более таких наиполнейших листингов тривиальной установки в статье не появится.


Настройка

Вполне работающий файл конфигурации Kerberos изначально будет выглядеть примерно так:

[[email protected] ~]# cat /etc/krb5.conf [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] dns_lookup_realm = true ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false default_realm = MY-DOMAIN.RU default_ccache_name = KEYRING:persistent:%{uid} [realms] MY-DOMAIN.RU = { kdc = ad.my-domain.ru admin_server = ad.my-domain.ru } [domain_realm] .my-domain.ru = MY-DOMAIN.RU my-domain.ru = MY-DOMAIN.RU 

где ad.my-domain.ru обязательно должен быть правильным FQDN, разрешаемым и доступным. Это важно!


Тестирование

На следующем шаге у нас, как правило, всё происходит очень просто.
Просто убеждаемся, что всё плохо:

[[email protected] ~]# klist klist: Credentials cache keyring 'persistent:0:0' not found

Зовём специалистов по трёхголовым собачкам (AKA сисадмина, знающего сверхсекретный доменный админский логин/пароль), и просим его ввести его примерно вот так:

[[email protected] ~]# kinit SuperPuperAdmin Password for [email protected]: ************************

После этого klist должен вернуть уже что-то осмысленное.
Засим нашу собачку считаем готовой, хотя…


Общеизвестно, что Ниссан – это невыгулянный Пассат.

Танец Великих Равнин. Apache



Апачи – собирательное название для нескольких культурно родственных племён североамериканских индейцев, говорящих на апачских языках атабаскской ветви семьи на-дене.
Апачи создали свой собственный захватывающий танец в масках по названию гахан, которым они празднуют достижение совершеннолетия девочками. Также у апачей и поныне есть танцевальные обряды для видений и предсказаний.

Начинаем охотиться вместе с индейцами племён Апачи.


Установка

Как и прежде, пакеты – это наше всё (за исключением всемогущих шаманов-Админов, разумеется):

[[email protected] ~]# yum install httpd Загружены модули: ulninfo Разрешение зависимостей […skipped…] Установлено: httpd.x86_64 0:2.4.6-45.0.1.el7 Установлены зависимости: httpd-tools.x86_64 0:2.4.6-45.0.1.el7 Выполнено!

Настройка

Этого, конечно, недостаточно, потому что свежеустановленный индеец не знает нашего языка. Сконфигурируем его примерно так:

[[email protected] ~]# cat > /etc/httpd/conf.d/ensemble.conf DocumentRoot "/opt/isc/ensemble/csp" CSPModulePath /opt/isc/ensemble/csp/bin/ LoadModule csp_module_sa /opt/isc/ensemble/csp/bin/CSPa24.so User cacheusr Group cacheusr <Location /> CSP On SetHandler csp-handler-sa </Location> ServerName my-test-server.my-domain.ru /> <Directory /> Options MultiViews FollowSymLinks AllowOverride None Require all granted <FilesMatch "\.(log|ini|pid|exe|so)$"> Require all denied </FilesMatch> </Directory> HostnameLookups Off <Location /csp> CSP On SetHandler csp-handler-sa </Location> <Location "/csp/bin/Systems/"> SetHandler cspsys-handler-sa </Location> <Location "/csp/bin/RunTime/"> SetHandler csp-handler-sa </Location> CSPFileTypes csp cls zen cxw Alias /csp/ /opt/isc/ensemble/csp/ <Directory "/opt/isc/ensemble/csp/"> AllowOverride None Options MultiViews FollowSymLinks ExecCGI Require all granted <FilesMatch "\.(log|ini|pid|exe)$"> Require all denied </FilesMatch> </Directory>

И дадим “пиночек под задочек”:

[[email protected] ~]# systemctl restart httpd

Убедимся, что он научился разговаривать по-нашенски, зайдя в System Management Portal.

Апачи некогда были гордым и независимым народом, у них это в крови, поэтому со всем уважением и вежливостью попросим Apache браться за работу вместе с нашим Пингвином-Прорицателем:

[[email protected] ~]# systemctl is-enabled httpd disabled [[email protected] ~]# systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. [[email protected] ~]# systemctl is-enabled httpd enabled

Прослушавши “Пионерскую Зорьку”, сделав водные процедуры, выгулявши трёхглавую собачку и причесав индейца, переходим к “Производственной Гимнастике”, которая сегодня будет танцевальной (и даже с бубнами).


Танцуем Самбу!



Са́мба (порт. samba) — бразильский танец, символ национальной идентичности бразильцев. Танец обрёл мировую известность благодаря бразильским карнавалам. Одна из разновидностей самбы вошла в обязательную пятёрку латиноамериканской программы бальных танцев. Исполняется в темпе 50-52 удара в минуту, в размере 2/4 или 4/4.

Как всем нам прекрасно известно, наша любимая Samba в серверном варианте совершенно логично разделена на три основных исполняемых модуля: (smb|nmb|winbind)d.

Теоретически нам нужен только работоспособный winbindd. Да, это всего лишь один из демонов Самбы. Но он, установленный отдельно от всего пакета, почему-то на имеющейся платформе работать не захотел, а разбираться в причинах его недовольства не захотелось уже мне.

Поэтому устанавливаемся по полной.


Установка

Процедура очень проста, особенно, если ваш(а) Админ(ша) танцует вместе с вами.

[[email protected] ~]# yum install samba Загружены модули: ulninfo Разрешение зависимостей --> Проверка сценария ---> Пакет samba.x86_64 0:4.4.4-9.el7 помечен для установки --> Проверка зависимостей окончена […skipped…] Установить 1 пакет (+12 зависимых) Объем загрузки: 6.6 M Объем изменений: 23 M Is this ok [y/d/N]: y […skipped…] Установлено: samba.x86_64 0:4.4.4-9.el7 Установлены зависимости: libaio.x86_64 0:0.3.109-13.el7 libldb.x86_64 0:1.1.26-1.el7 libtalloc.x86_64 0:2.1.6-1.el7 libtdb.x86_64 0:1.3.8-1.el7_2 libtevent.x86_64 0:0.9.28-1.el7 libwbclient.x86_64 0:4.4.4-9.el7 pytalloc.x86_64 0:2.1.6-1.el7 samba-client-libs.x86_64 0:4.4.4-9.el7 samba-common.noarch 0:4.4.4-9.el7 samba-common-libs.x86_64 0:4.4.4-9.el7 samba-common-tools.x86_64 0:4.4.4-9.el7 samba-libs.x86_64 0:4.4.4-9.el7 Выполнено!

Костюмчик готов, затягиваем галстук:

[[email protected] ~]# yum install samba-winbind […skipped…] Установлено: samba-winbind.x86_64 0:4.4.4-9.el7 Установлены зависимости: samba-winbind-modules.x86_64 0:4.4.4-9.el7 Выполнено!

Настройка

Мало прийти на карнавал, нужно ещё и немного потанцевать (уже с бубнами):

[[email protected] ~]# cat /etc/samba/smb.conf # See smb.conf.example for a more detailed config file or # read the smb.conf manpage. # Run 'testparm' to verify the config is correct after # you modified it. [global] workgroup = AD security = ads server string = my-test-server netbios name = my-test-server security = ads realm = my-domain.ru password server = *

Репетируем первые шаги (разумеется, ошибаемся на первых порах):

[[email protected] ~]# systemctl restart winbind Job for winbind.service failed because the control process exited with error code. See "systemctl status winbind.service" and "journalctl -xe" for details.

Зовём на помощь учителей танца, и («Как много нам открытий чудных...») это оказываются те же самые кинологи, помогавшие нам в приручении нашего трёхглавого щеночка!

[[email protected] ~]# net ads join --U [email protected] Enter root's password: ************************

И надеемся на чудо… Всё зависит от рук и от места, откуда они растут…


"Разлук так много на земле.
И разных судеб,
Надежду дарит на заре.
Паромщик людям”
© Prodigy & Rammstein, 2048

Если затем видим примерно вот такое:

[[email protected]]# net ads info LDAP server: 172.16.0.123 LDAP server name: AD.my-domain.ru Realm: MY-DOMAIN.RU Bind Path: dc=MYDOMAiN,dc=RU LDAP port: 389 Server time: Сб, 33 ноя 2049 17:48:12 ATL KDC server: 172.16.0.123 Server time offset: 0

то Счастье уже почти Есть!


Тестирование

Проверяем его (Счастья) наличие:

[[email protected] /]# wbinfo -g MYDOMAIN\proverka MYDOMAIN\управление MYDOMAIN\установка MYDOMAIN\снабжение MYDOMAIN\юристы MYDOMAIN\бухгалтерия MYDOMAIN\пользователи запад MYDOMAIN\пользователи север MYDOMAIN\пользователи windows MYDOMAIN\пользователи 1c MYDOMAIN\СуперПуперАдминистраторы MYDOMAIN\КомуМожноВИнтернет

Есть контакт!


Медляк. mod_auth_ntlm_winbind



Прежде чем танцевать медленный танец, придется кого-то на него пригласить, ведь в одиночку под него двигаться не считается приемлемым. Улучите момент и подойдите к приглянувшейся девушке. Собравшись танцевать медленный танец, объявите о своем намерении потенциальной партнерше прямо, без ненужного многословия. Не будьте излишне развязны и напористы, оставьте за ней решение, согласиться или нет. В последнем случае она откажется, но поблагодарит вас.

Установка

Найдите в Сети живой репозиторий с mod_auth_ntlm_winbind.
Да, их мало живых (я забрал с какого-то svn).
Да, версии совсем не новые.
Да, вам нужно будет их собрать «вручную».
Да, не все соберутся.
Да, даже после патчей и правок вручную.
Да, для сборки понадобится полностью настроенное окружение (gcc + glib + apxs + headers + *-dev + …).
И ДА, это – единственный известный мне вариант, который работает стабильно.


Настройка

С настройкой всё более-менее элементарно, добавьте в ваш конфиг-файл Apache (в основной, либо в conf.d/xyz.conf, по желанию):

<Directory "/opt/isc/ensemble/csp/myapp/"> AuthName "NTLM my-domain.ru" NegotiateAuth on NegotiateAuthHelper "/usr/bin/ntlm_auth --helper-protocol=gss-spnego" NTLMBasicAuthoritative on AuthType Negotiate require valid-user #LogLevel debug ## Включите для отладки </Directory>

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

Для первоначальной отладки советую раскомментировать строчку LogLevel, тогда в файлы протоколов Apache будут записываться дополнительные и иногда очень полезные сообщения.


Белый танец. Кто кого?..



Leicht versprochen, leicht gebrochen.

На очень закономерный и весьма своевременный (к концу статьи-то!) вопрос «А нафига мы всё это делали?» отвечу, что всё это всего-то ради одной строчки в серверном ответе HTTP!..


Бочка мёда

Нам нужен верный автоматически передаваемый веб-сервером REMOTE_USER (или HTTP_REMOTE_USER – не суть важно), чтобы:


  1. пользователь, успешно залогинившись в Windows под своим доменным аккаунтом,
  2. пройдя все проверки в MSAD,
  3. зашёл затем веб-браузером в приложение, разработанное на одном из продуктов InterSystems,
  4. установленном на Linux-сервере, который тоже включен в домен,
  5. на котором установлен и настроен веб-сервер Apache с нужным модулем,
  6. вернул нам имя доменного аккаунта пользователя (sAMAccountName).

И мы его получаем!

После этого мы запросто сможем с серверной стороны используя, например, LDAP-доступ к AD, запросить иные реквизиты этого пользователя (членство в группах, и т.п.).
Про эту механику планируется отдельная статья, там есть свои тонкости.


Парочка ложек дёгтя


  • Пока только браузеры от MS (IE, Edge) нативно работают с NTLM (а мы используем именно NTML). Впрочем, и в FireFox, и в Chrome есть возможность донастройки, более того, в корпоративной среде возможна как их централизованная настройка, так и дистрибуция преднастроенных пакетов средствами групповых политик.
  • Не всем сразу становится понятно, что же делать с полученным REMOTE_USER на стороне InterSystems Caché. Единого мнения на сей счёт пока нет, а вариантов много самых разнообразных, начиная от задания всем пользователям одного сверхсекретного пароля с последующим вызовом %session.Login() и до создания своей пользовательско-ролевой модели безопасности. Есть тема для дискуссии!

Single Sign-On. Выводная

Я буду весьма признателен, если подскажете в комментариях более удачную конфигурацию; допускаю даже, что появилась новая механика взаимодействия AAA для связки Linux + Apache + MSAD, про которую я не знаю.

Спасибо!

habr.com

как отключить шпионящие службы Microsoft и принудительное обновление

Наверх
  • Рейтинги
  • Обзоры
    • Смартфоны и планшеты
    • Компьютеры и ноутбуки
    • Комплектующие
    • Периферия
    • Фото и видео
    • Аксессуары
    • ТВ и аудио
    • Техника для дома
    • Программы и приложения
  • Новости
  • Советы
    • Покупка
    • Эксплуатация
    • Ремонт
  • Подборки
    • Смартфоны и планшеты
    • Компьютеры
    • Аксессуары
    • ТВ и аудио
    • Фото и видео
    • Программы и приложения
    • Техника для дома
  • Гейминг
    • Игры
    • Железо
  • Еще
    • Важное
    • Технологии
    • Тест скорости
Рейтинги Обзоры Новости Советы Подборки Технологии Гейминг

ichip.ru

👨⚕️️ Что такое единый вход ( Single Sign-on или SSO)👨⚕️ — решение для обеспечения безопасности данных вашей компании — Information Security Squad

Single Sign-on или Единая регистрация — это метод аутентификации, который помогает войти в несколько приложений с использованием единой учетной записи.

Безопасность повышается за счет единого входа (SSO) в свете того факта, что пользователи избавляются от различных проблем с секретными паролями.

Давайте будем честными, пользователи не любят сложные пароли;

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

Есть две основные проблемы, с которыми сталкиваются эти предприятия:

  • Как управлять правами и ролями разных пользователей и приложений.
  • Как решить многие сложные и постоянно меняющиеся риски, связанные с соблюдением требований и безопасностью, которые связаны с цифровым расширением доступа.

Эти проблемы постоянно беспокоят тех, кто управляет информационными системами и данными или имеет дело с соответствием учетных записей в любой компании.

Существует четыре важных фактора, которые необходимо учитывать при разработке стратегии управления доступом и идентификации ИТ-отделом компании и системой безопасности.

Расширение стороннего доступа

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

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

В исследовании, проведенном Aberdeen, было показано, что около 1/3 исследованных предприятий предоставили доступ по крайней мере 25 сторонним организациям, в то время как у 10% было свыше 200 внешних партнеров.

В этом случае единый вход (SSO) будет очень полезным решением для защиты активов вашей компании.

Балансировка между безопасностью и удобством использования

При работе с растущей пользовательской базой безопасность и стоимость имеют первостепенное значение.

Если предприятие не готово к расширению, риск проблем с безопасностью выше.

Кража данных такого типа может иметь разрушительные последствия для компании.

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

Частота и стоимость кибератак

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

Одна утечка данных стоит в среднем около 450 тыс. долларов, но может стоить значительно дороже.

Немного подготовки может сэкономить много денег и доверия.

Традиционные системные расходы

Использование традиционной системы может быть дорогостоящим, около 3,5 миллионов долларов для производителей.

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

Многофакторная аутентификация и единый вход в систему (SSO), возможно, это решение, которое компания может внедрить, чтобы избежать атак на основе учетных данных.

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

Уменьшите головную боль помощи пользователям с восстановлением пароля с помощью единого входа (SSO)

Представьте себе организацию с десятью различными администрациями.

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

Хотя это и не проблема безопасности, это является чрезвычайно очевидным преимуществом для организаций, использующих решение единой регистрации.

Единая регистрация (SSO) помогает уменьшить количество паролей, которые должны помнить пользователи.

Клиентам настоятельно рекомендуется использовать бесконечно уникальные пароли для разных систем.

Очевидно, что это не проблема, если клиент использует инструмент управления паролями, но как насчет того, насколько мы разумны, и на какое количество пользователей вы могли бы надеяться?

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

 

itsecforu.ru

Что такое технология единого входа (SSO)?

Зачем использовать технологию единого входа?

Сегодня приложения развертываются в центрах обработки данных и облаках, а также доставляются в виде SaaS-приложений. Каждое бизнес-приложение предусматривает прохождение пользователем процедуры аутентификации перед получением доступа к тому или иному ресурсу. Раньше, до появления технологии единого входа, пользователям приходилось выполнять вход при помощи набора учетных данных каждый раз, когда требовалось переключаться между приложениями. В большинстве случаев для каждого приложения был предусмотрен отдельный набор учетных данных, результатом чего становились снижение комфортности работы пользователей, невозможность получения доступа к нужным ресурсам из-за забытого логина или пароля, неоднородность политик контроля доступа и увеличение расходов на поддержку этих приложений.

Технология единого входа упростила взаимодействие пользователей с приложениями и доступ к ним. Благодаря ей пользователи могут экономить время, осуществляя доступ ко всем своим корпоративным, VDI-, веб- и SaaS-приложениям, а также к другим корпоративным ресурсам, например сетевым файлообменникам, с помощью всего одного набора учетных данных.

Как работает технология единого входа?

Технология единого входа является компонентом системы управления федеративными удостоверениями (FIM), межорганизационной структуры, позволяющей подписчикам использовать одни и те же идентификационные данные для доступа к сети каждой организации. FIM часто называют федерацией удостоверений.

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

Схема, позволяющая сторонним организациям, например LinkedIn или Facebook, использовать чьи-либо данные учетной записи для выполнения входа без раскрытия пароля, называется OAuth. Она служит посредником, предоставляя сервису токен, позволяющий делиться данными только конкретной учетной записи. Когда пользователь осуществляет доступ к приложению, сервис отправляет запрос аутентификации поставщику идентификации, который проверяет запрос и предоставляет доступ.

Существуют и другие протоколы аутентификации, например Kerberos и язык разметки утверждений безопасности (Security Assertion Markup Language, SAML). SSO-сервисы на базе Kerberos выдают удостоверение аутентификации с временными метками или разрешение на получение удостоверения (TGT), которые предоставляют удостоверения для доступа к сервису другим приложениям, освобождая пользователя от ввода новых учетных данных. SSO-сервисы на базе SAML обмениваются данными аутентификации и авторизации пользователей в безопасных доменах и управляют связью между пользователем, поставщиком идентификации с каталогом пользователей и поставщиком услуг.

Каковы преимущества технологии единого входа?

Технология единого входа (SSO) дает преимущества как пользователям, так и ИТ-отделу. С точки зрения пользователей технология SSO облегчает управление паролями, упрощая и ускоряя доступ к приложениям.

ИТ-отделу технология единого входа помогает уменьшить число обращений в службу поддержки в связи с паролями. А автоматическое управление учетными данными сокращает объем ручного управления доступом сотрудников к приложениям и сервисам. Благодаря технологии единого входа ИТ-администраторам становится проще обеспечивать быстрый провижининг и развертывание SaaS-приложений для сотрудников.

Кроме того, с точки зрения безопасности технология SSO может снизить угрозу кибератак, например фишинга, за счет уменьшения количества подверженных риску учетных данных. Однако очень важно в качестве резервного варианта также внедрить многофакторную аутентификацию на случай, если пароли все-таки будут взломаны.   

Передовые методы применения технологии единого входа

При поиске решения для технологии единого входа важно учитывать следующие факторы:

  1. Доступ к любому приложению. Некоторые решения для технологии единого входа предлагают ограниченную поддержку приложений. Ряд решений на стороне потребителя позволяет использовать технологию единого входа для веб- и корпоративных приложений, но не охватывает приложения VDI и SaaS-приложения. Другие решения, например предлагаемые некоторыми разработчиками IDaaS, предусматривают использование технологии единого входа для облачных и SaaS-приложений, но не для приложений на стороне потребителя. Оценивая решение для технологии единого входа, нужно уделять особое внимание не только возможности применения технологии единого входа для всех приложений VDI, корпоративных, веб- и SaaS-приложений, но еще и возможности предоставления сетевого доступа к другим корпоративным ресурсам, таким как сетевые файлообменники.
  2. Защита личных данных пользователей на этапе получения доступа к SaaS-приложениям. SaaS-приложения находятся за пределами сети центра обработки данных. Для применения технологии единого входа в этих приложениях многие решения требуют от клиентов переноса каталога пользователей в облако. Для многих компаний это представляет проблему и связано с большим риском, поэтому ваше решение должно предусматривать вариант сохранения каталога пользователей на стороне потребителя.
  3. Интеграция с механизмами многофакторной аутентификации. Возможность быстро и безошибочно идентифицировать пользователей и предоставлять им соответствующий уровень доступа к корпоративным ресурсам приобретает все большее значение. Поэтому корпоративным клиентам не следует полагаться только на имя пользователя и пароль. Им также нужно найти решение, которое обеспечит достаточную гибкость для использования схем аутентификации на основе состояния устройств конечных пользователей, местоположения этих пользователей, приложений, к которым они пытаются получить доступ, и других критериев. При этом важно, чтобы выбранное решение для технологии единого входа поддерживало любые механизмы и протоколы аутентификации, такие как RADIUS, Kerberos, Microsoft NTLM, Certificate Services и прочие.
  4. Инструменты для мониторинга и устранения неисправностей. Решение для технологии единого входа должно содержать инструменты для мониторинга проблем с производительностью всех приложений независимо от того, находятся ли они в центре обработки данных, в облаке или доставляются в виде SaaS-приложений, чтобы можно было решать проблемы быстро.

Дополнительные ресурсы

www.citrix.com

присоединение к рабочему месту с любого устройства для единого входа и эффективная двухфакторная аутентификация в приложениях компании

  • Время чтения: 5 мин

В этой статье

Быстрое увеличение числа потребительских устройств и повсеместный доступ к информации меняют восприятие технологий в современном мире.The rapid increase in the number of consumer devices and ubiquitous information access is changing the way that people perceive their technology. Непрерывное использование информационных технологий на протяжении всего дня, простой и удобный доступ к информации стирают традиционные границы между работой и частной жизнью.The constant use of information technology throughout the day, along with easy access of information, is blurring traditional boundaries between work and home life. Эти границы сдвига сопровождаются представлением о том, что личные технологии выбраны и настроены для соответствия личным потребностям пользователей, действиям и расписаниям.These shifting boundaries are accompanied by a belief that personal technology-selected and customized to fit users' personalities, activities, and schedules-should extend into the workplace. Чтобы удовлетворить растущую потребность в подключении персональных потребительских устройств к корпоративным сетям, мы представляем следующие ценные предложения.To accommodate the growing requirement of personal consumer devices to be connected to enterprise networks, we are introducing the following value propositions:

  • Администраторы могут контролировать право доступа к ресурсам компании на уровне приложения, пользователя, устройства и местоположения.Administrators can control who has access to company resources that are based on application, user, device, and location.

  • Сотрудники получают доступ к приложениям и данным в любом месте, с любого устройства.Employees can access applications and data everywhere, on any device. Сотрудники могут использовать единый вход в браузерных или корпоративных приложениях.Employees can use Single Sign-On in browser applications or enterprise applications.

Основные концепции, реализованные в решенииKey concepts introduced in the solution

Подключение к рабочему местуWorkplace Join

Используя функцию присоединения к рабочему месту, специалисты по работе с информацией могут соединить персональные устройства с рабочими компьютерами компании, чтобы осуществлять доступ к ресурсам и службам компании.By using Workplace Join, information workers can join their personal devices with their company's workplace computers to access company resources and services. После подключения личного устройства к вашему рабочему месту оно становится известным устройством и обеспечивает беспроблемную аутентификацию по второму фактору и единый вход для работы с ресурсами и приложениями на рабочем месте.When you join your personal device to your workplace, it becomes a known device and provides seamless second factor authentication and Single Sign-On to workplace resources and applications. Если устройство присоединено с помощью функции присоединения к рабочему месту, атрибуты устройства можно извлекать из каталога для получения условного доступа с целью авторизации выпуска маркеров безопасности для приложений.When a device is joined by Workplace Join, attributes of the device can be retrieved from the directory to drive conditional access for the purpose of authorizing issuance of security tokens for applications. Возможность присоединения устройств Windows 8.1, iOS 6.0+ и Android 4.0+ с использованием функции присоединения к рабочему месту.Windows 8.1 and iOS 6.0+, and Android 4.0+ devices can be joined by using Workplace Join.

Служба Регистрация устройств Azure Active DirectoryAzure Active Directory Device Registration service

Присоединение к рабочему месту стало возможным благодаря службе регистрации устройств Azure Active Directory.Workplace Join is made possible by the Azure Active Directory Device Registration service. Если устройство присоединено с помощью функции присоединения к рабочему месту, служба регистрации устройств предоставляет объект устройства в Active Directory и настраивает ключ на устройстве потребителя, который используется для представления удостоверения устройства.When a device is joined by Workplace Join, the service provisions a device object in Azure Active Directory and then sets a key on the local device that is used to represent the device identity. Затем это удостоверение устройства может использоваться с правилами контроля доступа для приложений, размещенных в облаке и локально.This device identity can then be used with access control rules for applications that are hosted in the cloud and on-premises.

Дополнительные сведения см. в разделе Введение в Управление устройствами в Azure Active Directory.For more details, see Introduction to device management in Azure Active Directory.

Присоединение к рабочему месту обеспечивает беспроблемную аутентификацию по второму фактору.Workplace Join as a seamless second factor authentication

Компании могут управлять риском, связанным с доступом к информации, и оптимизировать управление и соблюдение нормативных требований, предоставив потребительским устройствам доступ к корпоративным ресурсам.Companies can manage the risk that is related to information access and drive governance and compliance while granting consumer devices access to corporate resources. Присоединение устройства к рабочему месту обеспечивает следующие возможности для администраторов.Workplace Join on devices provides the following capabilities to administrators:

  • Идентификация известных устройств с использованием функции аутентификации устройств.Identifies known devices with device authentication. Администраторы могут использовать эту информацию для обеспечения условного доступа и контроля доступа к ресурсам.Administrators can use this information to drive conditional access and control access to resources.

  • Обеспечение беспроблемного единого входа для пользователей, доступ к ресурсам компании с доверенных устройств.Provides a more seamless sign-in experience for users to access company resources from trusted devices.

Единый входSingle Sign-On

Единый вход в контексте этого сценария — это функция, уменьшающая число запросов на ввод пароля пользователем для доступа к ресурсам компании с известных устройств.Single Sign-On (SSO) in the context of this scenario is the functionality that reduces the number of password prompts that the end user has to enter to access company resources from known devices. Эта функция подразумевает, что пользователь должен ввести пароль только один раз на протяжении сеанса единого входа, после чего ему будет предоставлен доступ к приложениям и ресурсам компании с соответствующего устройства.This functionality implies that users are prompted only one time during the lifetime of SSO to access company applications and resource from this device. Если устройство поддерживает функцию присоединения к рабочему месту, пользователь, зарегистрированный для использования этого устройства, получает возможность использовать единый вход постоянно (по умолчанию — семь дней).If a device uses Workplace Join, the user who is registered to use this device gets persistent SSO, by default for seven days. Этот пользователь получает возможность удобного входа на протяжении одного сеанса или новых сеансов.This user has a seamless sign-in experience in the same session or in new sessions.

Обзор статьиSolution Overview

Ознакомившись с этой статьей, вы научитесь использовать функцию присоединения к рабочему месту на поддерживаемом устройстве, а также реализовывать возможность единого входа для работы с ресурсами компании.As part of this solution, you learn how to use Workplace Join on a supported device and experience Single Sign-On to a company resource.

Эта статья научит вас выполнять следующие шаги пошагового руководства.This solution guides takes you through the following walkthrough steps:

  1. Пошаговое руководство: Присоединение к рабочему месту с устройства WindowsWalkthrough: Workplace Join with a Windows Device

  2. Пошаговое руководство: Присоединение к рабочему месту с устройства iOSWalkthrough: Workplace Join with an iOS Device

  3. Пошаговое руководство: Присоединение к рабочему месту с устройства AndroidWalkthrough: Workplace Join with an Android Device

См. такжеSee Also

Настройка сервера федерации с помощью службы регистрации устройствConfigure a federation server with Device Registration Service

docs.microsoft.com

Что такое SAML аутентификация и кому она нужна? / Gemalto Russia corporate blog / Habr

Управление доступом пользователей к облачным ресурсам представляет собой одну из основных проблем для безопасного использования облачных приложений в корпоративном окружении. С распространением многочисленных сервисных концепций SaaS, PaaS и IaaS управление политиками доступа, в том числе организация строгой аутентификации для каждого приложения создает определенную нагрузку на ИТ-подразделения предприятий. Пользователям приходится держать в памяти многочисленные логины и пароли, что неизбежно приводит к утере паролей, снижению продуктивности и раздражает пользователей. До 20% всех обращений в службу поддержки связано с восстановлением утраченных или забытых паролей.



Более того, ИТ-подразделения зачастую не владеют информацией о том, с какими именно приложениями работают конкретные пользователи, и как часто осуществляется доступ к этим приложениям, что фактически приводит к формированию теневых ИТ и снижает эффективность управления ресурсами. С точки зрения контроля доступа возникает также следующий вопрос: каким образом вы можете гарантировать, что в случае ухода сотрудника из компании он перестанет пользоваться корпоративными приложениями? Наконец, даже несмотря на наличие возможности обезопасить доступ к облачным ресурсам средствами многофакторной аутентификации, ИТ-подразделения зачастую не располагают информацией, кто из сотрудников все же позаботился об использовании такой аутентификации. В результате повышается вероятность компрометации данных, угроза фишинга, перебора паролей, взлома облачных баз данных и прочих угроз.

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

Управление доступом к облачным ресурсам: удостоверения в роли нового периметра безопасности


В 2015 году организация по исследованию хищений учетных данных Identity Theft Resource Center (ITRC) заявила, что утечки данных также неизбежны в нашей жизни, как смерть и налоги. В условиях этой новой реальности Джон Фонтана (John Fontana) из ZDNet предлагает под новым периметром безопасности понимать учетные записи пользователей, а для работы с таким периметром использовать новые средства, основанные на стандартах.

Аутентификация с использованием SAML


Язык разметки SAML (Security Assertion Markup Language) представляет собой открытый стандарт на основе XML, который предназначен для обмена данными аутентификации и авторизации между сторонами процесса. Ставший стандартом с 2002 года, SAML является разработкой Технического комитета по сервисами безопасности (Security Services Technical Committee), который работает при организации OASIS, занимающейся продвижением стандартов для работы со структурированной информацией. С помощью протокола SAML пользователи могут получать доступ ко множеству своих облачных приложений, указывая всего один логин и пароль. Такой подход получил название «федерации удостоверений», поскольку вместо запоминания целого множества логинов и паролей к каждому приложению, пользователю необходимо помнить лишь одну такую пару. При федерации удостоверений единая система, поддерживающая протокол SAML и получившая название доверенного поставщика удостоверений (Identity Provider, IdP), проводит аутентификацию пользователей, при этом облачные приложения «перекидывают» процесс аутентификации на эту IdP систему всякий раз при попытке пользователя получить к ним доступ.

Федерация удостоверений на базе протокола SAML


Федерация удостоверений и система единого входа позволяет избавиться от множества сложностей и проблем, связанных с необходимостью раздельного управления логинами и паролями для доступа к многочисленным веб-приложениям, не важно, реализованы ли они внутри организации, или являются внешними. Федерация стала возможной благодаря применению стандартов, и протокол SAML выступает в роли краеугольного камня в архитектуре и является основным стандартом для федерации удостоверений. Кроме того, широкое распространение этого протокола и рост его популярности также стали важными преимуществами SAML.

Поскольку в основе стандарта лежит язык разметки XML, SAML отличается исключительной гибкостью. Одного внедрения SAML достаточно, чтобы поддерживать подключение сервиса единого входа (single sign-on, SSO) для множества различных партнеров по федерации. Эта совместимость обеспечивает SAML определенные преимущества над другими, закрытыми механизмами единого входа, в частности, SAML позволяет организациям не ограничивать себя решениями какого-либо отдельного поставщика, дает возможность переходить с одной платформы SAML аутентификации на другую.

Чтобы продемонстрировать гибкость и совместимость SAML, в рамках инициативы Kantara была реализована программа тестирования на взаимосовместимость, когда поставщики SAML решений подтверждали возможность взаимодействия своих стандартных коробочных решений с проектами SAML других поставщиков. На сегодняшний день в списке Kantara Trust Registry представлено более 80 сертифицированных решений от многочисленных поставщиков и организаций со всего мира.

Каким образом устроена SAML аутентификация?


Аутентификация средствами SAML предусматривает возможность обмена данными учетных записей между доверенным поставщиком удостоверений (IdP) и облачными или веб-приложениями. Модель SAML аутентификации включает в себя поставщика удостоверений, который выдает 'SAML подтверждения' (SAML assertions) – в роли такого поставщика может выступать, например, SafeNet Authentication Service – и поставщика услуг, который принимает эти подтверждения, например, Google Apps, Office 365 или любое другое облачное приложение, поддерживающее SAML. Подтверждения SAML обычно подписываются с помощью подписи PKI, которая служит доказательством того, что подтверждение является подлинным.

Сервис аутентификации, выступающий в качестве поставщика удостоверений, получает пользовательские учетные данные и возвращает ответ тому облачному приложению, к которому осуществляется доступ. Этот ответ получил название SAML подтверждения. В зависимости от содержимого SAML подтверждения облачное приложение либо принимает, либо отказывает пользователю в доступе. Если SAML подтверждение содержит положительный ответ, то пользователь входит в систему.

Ключевым аспектом в реализации федерации удостоверений средствами SAML является привязка (mapping) пользователей к поставщику удостоверений (IdP) и поставщикам услуг, чтобы при обращении пользователя к сервисам вроде Office 365, эти сервисы понимали, на какого поставщика удостоверений им нужно перенаправить пользователя, чтобы он мог пройти процедуру строгой аутентификации.

Федерация удостоверений для централизованного управления доступом пользователей


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

С точки зрения пользователей федеративная система проверки удостоверений на базе SAML работает максимально органично и незаметно. В SAML используются cookie-файлы, благодаря чему после входа в Office 365 пользователю не требуется проходить повторную аутентификацию при входе в другие облачные приложения в новых вкладках браузера, например в Dropbox, WordPress, Salesforce и т.д.

Преимущества федерации удостоверений на базе протокола SAML


Помимо того, что SAML аутентификация помогает избавить пользователей от необходимости запоминания множества логинов и паролей, эта технология позволяет ИТ-администраторам управлять лишь одной парой учетных данных на пользователя для всех приложений. Поэтому при увольнении сотрудника из организации, ИТ-подразделению достаточно аннулировать лишь одну пару логина и пароля. При этом учетную запись можно аннулировать без необходимости входа в каждое отдельное облачное приложение. Автоматизированные скрипты позволяют минимизировать административную нагрузку на ИТ-подразделения за счет синхронизации с системами хранения учетных записей пользователей, такими как MS SQL или Active Directory.

Если представить ИТ-инфраструктуру в виде офисного здания, то федеративная система проверки подлинности удостоверений с помощью SAML могла бы обеспечить сотрудникам компании более простой и удобный доступ к различным зонам этого здания – к кабинетам, конференц-залу, зоне отдыха, столовой и т.д. – с помощью всего одной карты доступа вместо того, чтобы иметь отдельные карты на каждую комнату.

Кому может потребоваться SAML?


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

habr.com

Реализация SSO через SAML с примером / Miro corporate blog / Habr

Введение

Доброго времени суток, дорогой читатель. Я уже давно хотел написать статью на хабре и вот наконец-то этот момент настал. Из последних тем, которыми я занимался и о которых мне есть что рассказать — это была реализация SSO для сервиса realtimeboard.com — замечательный продукт для совместной работы удаленной команды в одном месте, который хочется постоянно развивать и совершенствовать. Хочу здесь сразу уточнить, что в принципе SSO через Facebook и Google уже было в сервисе до моего прихода. Моей же задачей было реализовать его через протокол SAML.

SSO (Single Sign-On), — технология единого входа пользователей, благодаря которой владея одной лишь учетной записью пользователь может посещать множество различных сервисов.

SAML — это популярный XML-протокол для реализации SSO. Как правило большие организации (enterprise) используют именно его, как проверенный и надежный вариант.

В нашем сервисе появление этой фичи как раз и было обусловлено частыми запросами enterprise заказчиков на его реализацию. Такого рода заказчики централизованно ведут актуальную базу пользователей, вводят свои политики безопасности и т.п. Соответственно и доступ к контенту в сервисе становится более безопасным и контролируемым, чего в конце концов они и хотят.

Технические детали

На момент написания статьи, последняя версия стандарта — SAML 2.0. Базируется стандарт на XML, а значит и все требования стандартов w3c к XML так же применимы и к нему, не забывайте про это. Так, например в момент реализации, я словил одну ошибку. В момент создания AuthnRequest я генерировал уникальный строковый идентификатор для атрибута ID, так вот по требованиям он не должен начинаться с цифры, а у меня периодически так было.

В аутентификации через SAML SSO участвует три стороны:


  • SAML identity Provider (IdP)
  • SAML Service Provider (SP)
  • браузер пользователя (User Agent)

Сама схема взаимодействия представлена на рисунке ниже


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

Вариант 1. Пользователь обращается к сервису. Сервис формирует сообщение AuthnRequest, кладет в параметр SAMLRequest и делает редирект через браузер к провайдеру на Login URL, где происходит аутентификация, затем провайдер формирует сообщение Response, кладет его в параметр SamlResponse и редиректит обратно в сервис на ACS URL.

Вариант 2. Пользователь уже аутентифицирован и находится в личном кабинете провайдера, откуда он может перейти в сервис, кликая по его ярлыку. В данной ситуации провайдер сразу формирует сообщение Response, кладет его в параметр SamlResponse и направляет в сервис на ACS URL.

ACS URL (Assertion Consumer Service URL) — урл на стороне нашего приложения, который принимает запросы с параметром SamlResponse, обрабатывает его (выдергивает сообщение Response, проверяет подпись по сертификату, различные правила) и если все хорошо, то создает рабочую сессию пользователя в приложении.

IdP Login URL — урл на стороне провайдера, который принимает запросы с параметром SAMLRequest и так же выполняет должную валидацию этого параметра, и если все хорошо, то отправляет на форму аутентификации.

В качестве IdP провайдeра может выступать один из онлайн-сервисов, таких как OneLogin, LastPass, Okta и другие. Также можно развернуть свой IdP с помощью Shibboleth или поднять AD.

Настройки

Все параметры для этого взаимодействия должны настраиваться и храниться на обеих сторонах (IdP, SP), то есть должны быть выстроены доверительные отношения.

SP должен хранить у себя сертификат, который выдаст IdP, а также Saml Login URL, на который будет отправлять SAMLRequest.

IdP обязательно должен хранить у себя для размещаемого приложения ACS URL...


… должен сформировать сертификат, выбрать алгоритм шифрования, предоставить Saml Login URL для сервиса...


… должен настроить (если необходимо) атрибуты пользователя или еще какие-то кастомные поля для конкретного сервиса. Сервис с провайдером должны также договориться о формате Subject NameID. Это по сути идентификатор пользователя, информация о котором будет передана в сообщениях. В нашем случае это email.


Помимо ручной настройки, SP и IdP должны уметь генерировать файл метаданных, содержащий все необходимые параметры для “коллеги”, чтобы тот мог и загрузить и выставить настройки сам. У нас такой задачи не было.

В дополнение еще скажу, что помимо SSO, провайдеры опционально предоставляют еще и услугу SLO (Single Logout) — механизм, который предполагает выход сразу из всех сервисов одновременно. Возможны также две точки входа:


  • Разлогиниться из сервиса, уйдет запрос на выход к провайдеру, а затем и по остальным сервисам, настроенным у провайдера;
  • Разлогиниться в личном кабинете провайдера, дальше уйдет запроса на логаут ко всем настроенным сервисам.

Для этого надо поддержать на стороне сервиса обработку запросов SP SLO URL и отправку запросов к IdP SLO URL. Такой задачи у меня также не было.

Исследования

И так, задача поставлена, с теорией ознакомился, пора и делать начать. Первым делом ознакомился со списком имеющихся библиотек. Backend нашего сервиса написан на Java, искал библиотеки именно для него. Наиболее полный список продуктов, связанных с SAML можно увидеть тут. Выбрал для себя наиболее очевидные решения: Okta SAML Toolkit for Java, SpringSecurity SAML, OIOSAML 2.0 Toolkit, lastpass/saml-sdk-java, OneLogin 2.0, OneLogin 1.1.2, OpenSAML 2.0. Далее нужно было определить критерии, по которым будет выбрано то или иное решение. Так была составлена следующая таблица.

Если честно, исходный код предложенных решений просто ужаснул — известные провайдеры решили написать свои высокоуровневые прикладные библиотеки (получилось не очень), большая часть (слава богу) решений была основана на низкоуровневой библиотеке работы с SAML OpenSaml 2.0. Учитывая, что все эти библиотеки так или иначе пришлось бы править затачивая под потребности нашей логики и встраивать в наш основной код со всеми юнит-тестами было решено также использовать уже имеющийся базис в виде OpenSaml 2.0 и на нем писать нашу высокоуровневую логику. Возможно, если бы у нас был Spring, я бы стал использовать SpringSecurity SAML, но его у нас нет.

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


Итого, решение выбрано, поведение определено.

Реализация

В качестве IdP для тестирования я выбрал, как можно увидеть по скринам выше, OneLogin. Он предоставляет бесплатный девeлоперский аккаунт, с ним проще всего было настроить тестовое приложение, а также он содержит набор утилит для работы с SAML, которые смогут облегчить Вам работу. Если не надо никакого полноценного конфигурируемого IdP, то можно использовать простую эту утилиту или ее аналог от Okta. Ими я тоже пользовался.

Сначала я написал свое тестовое локальное приложение чтобы обкатать в принципе эту технологию, его исходники я Вам и продемонстрирую. Затем уже перенес это решение на промышленную кодобазу. Логика приложения простая и применимая для любого сервиса. Приложение предлагает пользователю ввести email, если для этого домена не настроено SSO SAML, то приложение просит ввести внутренний пароль юзера (в примере ругается, что юзер не может SSO). Если же настроено, то смотрим на какой IdP настроен данный домен, формируем сообщение и перенаправляем запрос туда. После успешной аутентификации получаем сформированное сообщение на наш ACS URL от IdP, из сообщения берем email, берем сертификат для данного домена и проводим валидацию сообщения. В случае успешной проверки берем атрибуты из сообщения FirstName, LastName. Если пользователь уже существует меняем ему значения этих атрибутов в нашем сервисе. Если пользователя еще нет, то создаем его.

Это так называемый Just-in-Time Provisioning. Эта самая простая реализация провижининга (синхронизация) пользователей, которую можно сделать. Минусом такой синхронизации можно назвать отсрочку выполнения до следующего входа пользователя. Плюс невозможность удаления пользователя на стороне сервиса при удалении юзера из IdP. Чтобы полноценно запустить провижининг в сервисе необходимо реализовать стандарт SCIM, но этого я еще не делал — возможно это будет следующая история.

Надеюсь, эта статья была полезна для Вас.

habr.com

Прозрачная авторизация для приложения на Oracle Weblogic Server / Habr

В данной статье расскажу, как мы перешли с NTLM на Kerberos авторизацию для приложений на Oracle Weblogic Server, тем самым упростив пользователям вход, убрав необходимость вводить пароль. Все пользователи, а также сервер приложения находятся в одном домене, так же ранее была настроена доменная авторизация для приложений Weblogic сервера. Все конфигурации были проверены на WLS 12.1.2.

Для начала немного теории, очень кратко для дальнейшего понимания процесса взаимодействия.

Что такое Single Sign-On?


Единый вход (SSO) — это механизм, посредством которого одно действие аутентификации пользователя, позволяет пользователю получить доступ ко всем компьютерам и системам, где у него есть разрешение на доступ, без необходимости вводить несколько паролей. Ранее введенные учетные данные будут прозрачно повторно использоваться различными компонентами.

Что такое Kerberos?


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

Что такое SPNEGO?


SPNEGO — это простой и защищенный механизм переговоров GSSAPI. Это стандартизованный интерфейс для аутентификации (например, JNDI для поиска в каталогах), реализация по умолчанию для SPNEGO под Windows — это Kerberos (например, LDAP для JNDI). В терминологии Microsoft в качестве синонима SPNEGO используется «Интегрированная аутентификация Windows». В Windows Integrated Authentication могут быть согласованы протоколы Kerberos или NTLM.

Когда сервер получает запрос от браузера Internet Explorer (IE 6.1 или выше), он может запросить, чтобы браузер использовал протокол SPNEGO для аутентификации. Этот протокол выполняет аутентификацию Kerberos через HTTP и позволяет Internet Explorer передавать делегированные полномочия, чтобы веб-приложение могло выполнять вход в последующие Kerberized службы от имени пользователя.

Когда HTTP-сервер хочет выполнить SPNEGO, он возвращает ответ «401 Unauthorized» на HTTP-запрос с заголовком «WWW-Authorization: Negotiate». Затем Internet Explorer связывается с службой выдачи билетов (TGS) для получения билета. Он выбирает специальное имя участника услуги для запроса билета, например:

HTTP/[email protected]<DOMAIN NAME>

Возвращенный билет затем завернут в токен SPNEGO, который закодирован и отправляется обратно на сервер с использованием HTTP-запроса. Маркер разворачивается, и билет аутентифицируется.

Преимущества Kerberos


Использование керберос дает возможность администраторам отключить проверку подлинности NTLM, как только все сетевые клиенты смогут аутентифицировать Kerberos. Протокол Kerberos более гибкий и эффективный, чем NTLM, и более безопасный.

Настройка SSO на основе Kerberos в среде сервера приложений Weblogic


Схема взаимодействия:

  1. Когда зарегистрированный пользователь (РС) запрашивает ресурс из Oracle WebLogic Server (WLS), он отправляет исходный HTTP GET-запрос.
  2. Сервер Oracle WebLogic Server (WLS), выполняющий код обработчика токенов SPNEGO, требует аутентификации и выдает ответ 401 Access Denied, WWWAuthenticate: Negotiate.
  3. Клиент (Браузер на PC) запрашивает билет сессии из TGS / KDC (AD).
  4. TGS / KDC (AD) предоставляет клиенту необходимый билет Kerberos (при условии, что клиент авторизован), завернутый в токен SPNEGO.
  5. Клиент повторно отправляет запрос HTTP GET + токен Negotiate SPNEGO в заголовке авторизации: Negotiate base64 (token).
  6. Проверка веб-аутентификации SPNEGO на сервере Weblogic видит заголовок HTTP с токеном SPNEGO. SPNEGO проверяет токен SPNEGO и получает информацию о пользователе.
  7. После того, как Weblogic получит информацию о пользователе, он проверяет пользователя в Microsoft Active Directory / KDC. Когда процесс идентификации выполняется, Weblogic выполняет соответствующий Java-код (сервлеты, JSP, EJB и т.д.) И проверяет авторизацию.
  8. Код обработчика Token Handler сервера Oracle WebLogic Server принимает и обрабатывает токен через API GSS, аутентифицирует пользователя и отвечает запрошенным URL-адресом.

Теперь перейдем к практике


1. Выполняем настройки на стороне сервера домен контролера, на котором настроены службы TGS / KDC.
  • Создаем пользователя в Active Directory (срок действия пароля должен быть не ограничен)
  • Устанавливаем соответствующий SPN для имени сервера WLS

Выполняем проверку, установленного SPN
setspn –l HTTP_weblogic

должно вернуть две записи
Сгенерировать Keytab файл
ktpass -princ [email protected] -pass PASSWORD -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -kvno 0 -out c:\krb5.keytab 

Скопировать данный файл на сервер WLS

2. Настройка сервера WLS

  • Нужно создать файл krb5.ini в папке %windir%: C:\Windows. Этот файл содержит параметры конфигурации для клиентов, например, где находится KDC. Файл будет выглядеть так:
[libdefaults] default_realm = <DOMAIN NAME> ticket_lifetime = 600 [realms] <DOMAIN NAME> = { kdc = <HOSTNAME OF AD/KDC> admin_server = <HOSTNAME OF AD/KDC> default_domain = <DOMAIN NAME> } [domain_realm] . <DOMAIN NAME>= <DOMAIN NAME> [appdefaults] autologin = true forward = true forwardable = true encrypt = true

  • Создать конфигурационный файл krb5Login.conf:
com.sun.security.jgss.krb5.initiate { com.sun.security.auth.module.Krb5LoginModule required principal="[email protected]" useKeyTab=true keyTab=krb5.keytab storeKey=true debug=true; }; com.sun.security.jgss.krb5.accept { com.sun.security.auth.module.Krb5LoginModule required principal="[email protected]" useKeyTab=true keyTab=krb5.keytab storeKey=true debug=true; };

Обратите внимание, что имя домена должно быть указано в верхнем регистре. Для более ранних версий, используйте com.sun.security.jgss.initiate в предыдущем конфиге вместо com.sun.security.jgss.krb5.initiate.
  • Оба файла krb5Login.conf и krb5.keytab должны быть размещены в корне директории домена WLS сервера.

  • Редактируем файл setDomainEnv

Находим строку set JAVA_OPTIONS=%JAVA_OPTIONS% и в конце добавляем
-Djava.security.auth.login.config=<путь к файл>\krb5Login.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dweblogic.security.enableNegotiate=true 

  • В данном случае не рассматриваем настройку авторизации WLS в AD считаем, что она работает, если нужно расписать этот пункт пишите в комментариях.
  • Настраиваем SPNEGO в WLS
    Для этого необходимо перейти в WebLogic Server Administration Console
    Переходим в раздел Security Realms >myrealm >Providers и нажимаем кнопку Add
    Выбираем тип “WebLogic Negotiate Identity Assertion provider”
    Проверяем, что бы было выбрано оба параметра.

    Нажимаем кнопку Reorder и управляя стрелками выставляем последовательности типов авторизации. На первом месте должно быть установлено WebLogic Negotiate Identity Assertion provider на втором месте Provider that performs LDAP authentication (доменная авторизация)


  • Перезагружаем сервер

  • Далее необходимо указать приложению способ авторизации CLIENT-CERT, данные изменения применяются в файле web.xml приложения
 <security-constraint> <display-name>Security Constraint for SSO </display-name> <web-resource-collection> <web-resource-name>My webapp</web-resource-name> <description>Group of Users</description> <url-pattern>/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>valid-users</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>CLIENT-CERT</auth-method> </login-config> <security-role> <description>Role description</description> <role-name>valid-users</role-name> </security-role>

Роль должна быть предустановлена в системе. В нашем случае используется встроенная роль для ADF (valid-users), а уже далее на основании доменных групп раздаются полномочия.
Для выявления проблем с авторизацией необходимо включить дебаг. Для этого переходим в раздел.

Environment -> Servers выбираем наш сервер -> Debug -> weblogic (развернуть) -> Security -> atn, установить галочки и включить.

Для включения и отключения дебага, перезагрузка не требуется.

  • Перезагружаем сервер, для применения изменений в конфигурации.
  • Деплоим приложение с измененным способом авторизации (новым web.xml)
  • Чтобы отключить данный вид авторизации для административной консоли необходимо внести следующие изменения %Ora_Home%\wlserver\server\lib\consoleapp\webapp\WEB-INF\web.xml.

    Меняем строку

     <auth-method>CLIENT-CERT,FORM</auth-method> на <auth-method>FORM</auth-method>

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

habr.com

Django Single Sign-On и Microsoft Active Directory / Habr

Начало


Однажды мне пришлось заняться разработкой Web-приложения для корпоративного использования на Python+Django. И самым первым вопросом, который пришлось решать — это прозрачная авторизация на сайте или Single Sign-On (SSO).

На предприятии широко используется служба каталогов на базе Microsoft Active Directory, и к настоящему моменту практически все корпоративные приложения позволяют использовать windows-авторизацию и не вводить постоянно логины/пароли, поэтому новое приложение просто должно было удовлетворять существующему положению вещей и реализовывать указанную выше возможность для «прозрачной» авторизации пользователей.

Хотя о вопросе реализации SSO для Django написано немало статей, однако для того, чтобы реализовать то, что мне было необходимо, пришлось затратить относительно много времени. Поэтому, чтобы избавить некоторых из вас от возможных долгих поисков информации и ее сборки в работающую схему, предлагаю вам свой мануал, как сделать прозрачную авторизацию в приложении Django с использованием учетных записей Active Directory.

Итак мы имеем:

  • Служба каталогов Microsoft Active Directory,
  • Имя домена Windows: company.ru
  • Имя контроллера домена Windows 2012 Server: DC-1
  • IP Address контроллера домена Windows 2012 Server: 192.168.7.110
  • Сервер для работы нашего приложения: CentOS7, Apache, Python 3.5.1, Django 1.9.1
  • Hostname Linux Server с CentOS7: srv-app
  • IP Address Linux Server с CentOS7: 192.168.7.105
  • URL Приложения на Django: srv-app.company.ru

Нужно сделать:
  • Пользователь, зарегистрированный в Active Directory при открытии любой страницы сайта на srv-app.company.ru должен автоматически, без запроса логина/пароля, быть авторизован Django. При авторизации, в профиль пользователя в Django должна быть перенесена некоторая информация о нем из Active Directory (first_name, last_name, mail; флаги is_active, is_staff, is_supersuser должны быть установлены на основании членства пользователя в соответствующих группах Active Directory).
  • Пользователю, не зарегистрированному в Active Directory вход на сайт должен быть запрещен.

Изучив ряд опубликованных статей и описаний стало понятно, что добиться нужного результата можно, выполнив два основных шага:
  • Настройка прозрачной аутентификации при доступе к приложению сервером Apache с использованием Kerberos.
  • Авторизация в Django c использованием доступа к контроллеру домена по протоколу LDAP для получения необходимой информации об авторизующемся пользователе.

Этап 1. Настройка прозрачной аутентификации с использованием Kerberos


Совершенно очевидно, что реализация принципа SSO в сети Windows AD возможно используя протокол Kerberos. Поэтому основной задачей первого этапа настройки будет установка Kerberos в среде Linux+Apache и настройка связи с контроллером домена Windows AD.
Установка и настройка Kerberos на сервере Linux

Настройка /etc/hosts, /etc/resolv.conf на srv-app, DNS на DC-1

На srv-app добавляем в /etc/hosts:
 192.168.7.105 srv-app.company.ru 

На srv-app изменяем /etc/resolv.conf (В реальности этот файл в CentOS7 генерирует NetworkManager, поэтому изменения нужно вносить в /etc/sysconfig/network-scripts/ifcfg-eth0):
 search company.ru nameserver 192.168.7.110 

На Контроллере домена DC-1:
  • при помощи оснастки «Диспетчер DNS» добавим хост srv-app с адресом 192.168.7.105
  • при помощи оснастки «AD — пользователи и компьютеры» добавим пользователя svc-apache, установим для него пароль [email protected]. Этот пользователь понадобится нам позже для создания keytab-файла, который свяжет нашу Linux-машину и Active Directory.

Устанавливаем модули для работы с Kerberos
 [[email protected] ~]# yum install mod_auth_kerb # Устанавливаем модуль для apache [[email protected] ~]# yum install krb5-workstation # Устанавливаем пакет для настройки и тестирования kerberos 

Конфигурируем Kerberos при помощи редактирования файла /etc/krb5.conf
 [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false default_realm = COMPANY.RU default_ccache_name = KEYRING:persistent:%{uid} [realms] COMPANY.RU = { kdc = 192.168.7.110 admin_server = 192.168.7.110 } [domain_realm] .company.ru = COMPANY.RU company.ru = COMPANY.RU 

Немного объяснений по поводу содержимого конфигурационного файла:
  • COMPANY.RU — задаем имя области kerberos (realm) в linux. Следует запомнить что kerberos realm чувствительный к регистру (case-sensetive)

Выполняем несколько проверок работы kerberos на компьютере srv-app

Ранее, на нашем контроллере домена мы создали пользователя srv-apache с паролем [email protected]. Попробуем залогиниться на КД при помощи утилиты kinit:
 [[email protected] ~]# kinit [email protected] Password for [email protected]: **** 

Если ошибок нет, посмотрим какие билеты (tickets) у нас имеются:
 [[email protected] ~]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: [email protected] Ticket cache: KEYRING:persistent:0:0 Default principal: [email protected] Valid starting Expires Service principal 20.12.2015 16:12:59 21.12.2015 02:12:59 krbtgt/[email protected] renew until 27.12.2015 16:12:55 

Таким образом мы залогинились на КД при помощи kerberos, теперь разорвем соединение, удалив
полученный билет:
 [[email protected] ~]# kdestroy 

Если все работает, то для дальнейшей настройки нам необходимо создать файл krb5.keytab для сервиса аутентификации при помощи
Apache и mod_auth_kerb.
Генерация keytab на Контроллере Домена Windows

Сгенерировать keytab можно на контроллере домена DC-1 при помощи команды ktpass.exe:
 ktpass.exe /princ HTTP/[email protected] /mapuser [email protected] /crypto ALL /ptype KRB5_NT_PRINCIPAL /mapop set /pass [email protected] /out c:\share\keytab 

  • Ключ /princ HTTP/[email protected] задает уникальное имя клиента (principal) на Linux-машине, которому будет разрешено выполнять аутентификацию в kerberos.
  • Ключи /mapuser [email protected] и /pass [email protected], связывают principal с конкретным пользователем в Active Directory
  • Ключ /crypto ALL задает способ шифрования. Вместо /crypto ALL можно указать конкретный способ шифрования например /crypto AES256-SHA1
  • Ключ /mapop set устанавливает mapping между принципалом Linux и пользовательским аккаутном Active Directory (/mapop add добавит этот маппинг в keytab)
  • Ключ /ptype KRB5_NT_PRINCIPAL — задать тип принципала в запросе (указанный тип является основным и рекомендуется использовать именно его)
  • Ключ /out c:\share\keytab задает путь для выходного файла keytab.
  • При желании дополнительно значения ключей можно посмотреть при помощи ktpass.exe /help

В итоге мы получаем файл c:\share\keytab, который необходимо скопировать на srv-app и назвать /etc/krb5.keytab. Далее необходимо предоставить доступ к этому файлу пользователю, из под учетной записи которого выполняется сервер httpd. В нашем случае это apache. Для того чтобы apache мог прочитать этот файл просто разрешаем его чтение всем пользователям:
 chmod a+r /etc/krb5.keytab 

Проверить работает ли наш keytab можно следующим образом:

1. При помощи ktutil:

 [[email protected] ~]# ktutil ktutil: rkt /etc/krb5.keytab ktutil: list slot KVNO Principal ---- ---- --------------------------------------------------------------------- 1 3 HTTP/[email protected] 2 3 HTTP/[email protected] 3 3 HTTP/[email protected] 4 3 HTTP/[email protected] 5 3 HTTP/[email protected] ktutil: q 

2. При помощи kvno:

 # логинимся на KDC [[email protected] ~]# kinit svc-apache Password for [email protected]: # запрашивем тикет для сервиса <b>HTTP/[email protected]</b> и печатает номера версий для каждого принципала в keytab [[email protected] ~]# kvno HTTP/[email protected] HTTP/[email protected]: kvno = 3 # Удаляем тикет [[email protected] ~]# kdestroy 

Настройка Apache

Ниже приведен файл /etc/httpd/conf.d/company_main.conf, который содержит конфигурационные инструкции для настройки Kerberos-аутенификации при обращении к URI "/":
 <Location "/"> # Kerberos authentication: AuthType Kerberos AuthName "SRV-APP auth" KrbMethodNegotiate on KrbMethodK5Passwd off KrbServiceName HTTP/[email protected] KrbAuthRealms COMPANY.RU Krb5Keytab /etc/krb5.keytab KrbLocalUserMapping On Require valid-user </Location> 

Хочу обратить внимание на настройку KrbMethodK5Passwd off. Указанная настройка приводит к тому что при входе в указанный раздел сайта будет произведена kerberos-аутентификациия с использованием технологии Single Sign-On. При неуспешной аутентификации сразу будет ошибка «401 Unautorized». Однако, если изменить настройку на KrbMethodK5Passwd on, то после неуспешной авторизации Single Sign-On, будет предпринята попытка авторизации по имени и паролю.

И еще одна недокументированная возможность, которой мы воспользуемся: Настройка KrbLocalUserMapping On приводит к тому что в переменной REMOTE_USER будет помещено имя зарегистрированного пользователя (в случае KrbLocalUserMapping Off REMOTE_USER будет содержать [email protected] RU).

Дополнительную информацию по настройкам модуля mod_auth_kerb пожно прочитать здесь.

Single Sign-On (SSO) с рабочих станций Windows

Еще раз повторюсь, что вся работа по настройке kerberos аутентификации в Linux проделана для того, чтобы иметь возможность входить на страницы портала опубликованного на Linux машине с использованием корпоративных аккаунтов, хранящихся в Active Directory, кроме того для упрощения жизни пользователям этот вход должен быть «прозрачным», без запроса пароля, что достигается иcпользованием технологии Single Sign-On (SSO), которая поддерживается в Windows 7 и выше и браузером Internet Explorer (и Mozilla Firefox).

Однако для того чтобы все проходило гладко, на рабочей станции, откуда осуществляется такой вход, должны быть выполнены следующие настройки:

  1. Сайт на который осуществляется вход (в нашем случае srv-app.company.ru должен быть внесен в узлы «Местной интрасети» при помощи меню
    Internet Explorer: Сервис -> Свойства обозревателя -> Безопасность -> Местная интрасеть -> Узлы -> Дополнительно
  2. В IE должны быть включены следующие опции (как правило они включены «по умолчанию»):
    • Сервис -> Свойства обозревателя -> Дополнительно -> Безопасность -> Разрешить встроенную проверку Windows = ON
    • Сервис -> Свойства обозревателя -> Безопасность -> Местная интрасеть -> Уровень безопасности для этой зоны -> Другой -> Проверка подлинности пользователя -> Автоматический вход в сеть только в зоне интрасети

  3. Кроме того, SSO при попытке доступа на сайт по IP-адресу работать не будет. Необходимо обязательно использовать доменное имя srv-app.company.ru !

Этап 2. Авторизация пользователя в Django


Итак, в результате работы проведенной на первом этапе, мы получили следующие результаты:
  • При входе в любой раздел нашего Django-приложения, пользователем, который был авторизован контроллером домена, мы во-первых получаем доступ к нашему Django-приложению, а во-вторых сервер Apache помещает в переменную REMOTE_USER имя авторизованного пользователя, которое совпадает с аттрибутом sAMAccountName этого пользователя в Active Directory.
  • Если пользователь не авторизован в АД, то Apache вернет нам ошибку «401 Unautorized» (При помощи опции ErrorDocument мы можем в этом случае перенаправить неавторизованного пользователя на какую-либо страницу для гостей)

Однако, несмотря на то, что сервер Apache авторизовал нашего пользователя, для Django-приложения он все еще остается неизвестным и, соответственно, весь отлаженный в Django механизм аутентификации/авторизации пользователей и использования сессий остается пока незадействованным.
Использование RemoteUserBackend

Специально для таких целей в Django существует простое решение, включающее механизм авторизации в системе пользователей, уже аутентифицированных внешними приложениями, такими как IIS или Apache (способами аналогичными, примененному нами на этапе 1: mod_authnz_ldap, CAS, Cosign, WebAuth, mod_auth_sspi, mod_auth_krb).

Согласно описанию на официальном сайте djangoproject.org, для использования прозрачной аутентификации и авторизации в Django таким способом, достаточно задействовать механизм RemoteUserBackend, выполнив следующие шаги:

1. В файле настроек Django-проекта settings.py добавить django.contrib.auth.middleware.RemoteUserMiddleware в список MIDDLEWARE_CLASSES сразу после django.contrib.auth.middleware.AuthenticationMiddleware:

MIDDLEWARE_CLASSES = [ '...', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.RemoteUserMiddleware', '...', ] 

2. Там же заменить ModelBackend на RemoteUserBackend в списке AUTHENTICATION_BACKENDS (либо добавить этот список в settings.py):
AUTHENTICATION_BACKENDS = [ 'django.contrib.auth.backends.RemoteUserBackend', ] 

В результате этих изменений RemoteUserMiddleware будет извлекать username посредством request.META['REMOTE_USER'] и автоматически выполнять аутентификацию и авторизацию (login) этого пользователя при помощи RemoteUserBackend. Кроме того RemoteUserBackend при такой авторизации добавит нового пользователя в таблицу auth_user, задействуя таким образом стандартный для Django механизм работы с учетными записями.

Но, к сожалению, этот способ не позволит нам получать из Active Directory и использовать в нашем приложении нужную нам информацию (first_name, last_name, mail, участие в группах AD и др).

Использование django-auth-ldap

Итак, нам нужно получить доступ к Active Directory при помощи протокола LDAP. К счастью отличным Django-приложением для этих целей является django-auth-ldap. Установить его можно стандартно при помощи pip:
pip install django-auth-ldap 

После этого придется удалить из settings.py добавленные в предыдущем разделе MIDDLEWARE_CLASSES, а именно 'django.contrib.auth.middleware.RemoteUserMiddleware', а список AUTHENTICATION_BACKENDS должен выглядеть следующим образом:
AUTHENTICATION_BACKENDS = ( 'django_auth_ldap.backend.LDAPBackend', 'django.contrib.auth.backends.ModelBackend', ) 

Кроме того, в settings.py необходимо включить следующие конфигурационные параметры:settings.py
# Baseline LDAP configuration. AUTH_LDAP_SERVER_URI = "ldap://DC-1.COMPANY.ru" AUTH_LDAP_AUTHORIZE_ALL_USERS = True AUTH_LDAP_PERMIT_EMPTY_PASSWORD = True # Логин пользователя от чьего имени будут выполнятся запросы к LDAP (кроме авторизации) AUTH_LDAP_BIND_DN = "cn=svc-apache,cn=Users,dc=company,dc=ru" AUTH_LDAP_BIND_PASSWORD = "[email protected]" # Настройка будет пытаться найти пользователя в созданной нами OU Django и стандартной папке Users, # сопоставляя введенный login пользователя с аттрибутами sAMAccountName AUTH_LDAP_USER_SEARCH = LDAPSearchUnion( LDAPSearch("ou=Django,dc=company,dc=ru", ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)"), LDAPSearch("cn=Users,dc=company,dc=ru", ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)"), ) # Set up the basic group parameters. AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=Groups,ou=Django,dc=company,dc=ru", ldap.SCOPE_SUBTREE, "(objectClass=group)" ) AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn") # Simple group restrictions # AUTH_LDAP_REQUIRE_GROUP - если определено DN для этой настройки, то требуется присутсвие пользователя в этой группе # в противном случае пользовталю будет отказано в аутентификации # таким образом указываем, что для того чтобы пользователь был аутентифицирован он обязан находится в группе "active" AUTH_LDAP_REQUIRE_GROUP = "cn=active,ou=Groups,ou=Django,dc=company,dc=ru" # AUTH_LDAP_DENY_GROUP - если определено DN для этой настройки, то в случае члентсва пользователя в этой группе # ему будет отказано в аутентификации AUTH_LDAP_DENY_GROUP = "cn=disabled,ou=Groups,ou=Django,dc=company,dc=ru" # Populate the Django user from the LDAP directory. # Указываем как переносить данные из AD в стандартный профиль пользователя Django AUTH_LDAP_USER_ATTR_MAP = { "first_name": "givenName", "last_name": "sn", "email": "mail" } # Указываем как переносить данные из AD в расширенный профиль пользователя Django AUTH_LDAP_PROFILE_ATTR_MAP = { "employee_number": "employeeNumber" } # Указываем привязку стандартных флагов is_active, is_staff и is_superuser к членству в группах AD # Флаг is_active при использовании django_remote_auth_ldap сам по себе не оказывает вляния на разрешение аутнтификации # поэтому для создания обычного поведения Django также определяме настройку AUTH_LDAP_REQUIRE_GROUP (см.выше) AUTH_LDAP_USER_FLAGS_BY_GROUP = { "is_active": "cn=active,ou=Groups,ou=Django,dc=company,dc=ru", "is_staff": "cn=staff,ou=Groups,ou=Django,dc=company,dc=ru", "is_superuser": "cn=superuser,ou=Groups,ou=Django,dc=company,dc=ru" } # Указываем привязку флагов расширенного профиля к членству в группах AD AUTH_LDAP_PROFILE_FLAGS_BY_GROUP = { "is_awesome": "cn=awesome,ou=Groups,ou=Django,dc=company,dc=ru", } # This is the default, but I like to be explicit. AUTH_LDAP_ALWAYS_UPDATE_USER = True # Use LDAP group membership to calculate group permissions. AUTH_LDAP_FIND_GROUP_PERMS = True # Cache group memberships for an hour to minimize LDAP traffic AUTH_LDAP_CACHE_GROUPS = True AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600 


Django-auth-ldap — это замечательное приложение. С его помощью в профиль пользователя Django можно загрузить практически любую информацию по нему из AD, даже есть возможность «подтянуть» группы в которых этот пользователь участвует в соответствующую модель Django.

Однако для авторизации при помощи django-auth-ldap все-таки необходимо запрашивать у пользователя его имя и пароль, что нам категорически не подходит.

Хотя в документации указано что, вроде бы, можно «скрестить» django-auth-ldap и RemoteUserBackend:

Non-LDAP Users

LDAPBackend has one more feature pertaining to permissions, which is the ability to handle authorization for users that it did not authenticate. For example, you might be using RemoteUserBackend to map externally authenticated users to Django users. By setting AUTH_LDAP_AUTHORIZE_ALL_USERS, LDAPBackend will map these users to LDAP users in the normal way in order to provide authorization information. Note that this does not work with AUTH_LDAP_MIRROR_GROUPS; group mirroring is a feature of authentication, not authorization.


Но это не работает, так как нам надо. Пользователь действительно сможет авторизоваться, но это происходит ровно так, как если бы мы просто использовали RemoteUserBackend (см.предыдущий раздел). Информация из AD в профиль пользователя Django автоматически не загружается.

Конечно, это можно сделать самостоятельно, воспользовашись следующей рекомендацией:

Updating UsersBy default, all mapped user fields will be updated each time the user logs in. To disable this, set AUTH_LDAP_ALWAYS_UPDATE_USER to False. If you need to populate a user outside of the authentication process—for example, to create associated model objects before the user logs in for the first time—you can call django_auth_ldap.backend.LDAPBackend.populate_user(). You’ll need an instance of LDAPBackend, which you should feel free to create yourself. populate_user() returns the User or None if the user could not be found in LDAP.
from django_auth_ldap.backend import LDAPBackend user = LDAPBackend().populate_user('alice') if user is None: raise Exception('No user named alice') 


Использование django-remote-auth-ldap

Но, как оказалось, все гораздо проще. Велосипед уже придуман, и нам остается только им воспользоватся. Приложение django-remote-auth-ldap является небольшой надстройкой над django_auth_ldap и позволяет без лишних усилий авторизовать пользователя и загрузить его данные из AD во время авторизации.

Устанавливаем django-remote-auth-ldap стандартно (django-auth-ldap также необходим для работы этой надстройки):

pip install django-remote-auth-ldap 

Далее, необходимо добавить в settings.py следующую настройку:
DRAL_CHECK_DOMAIN = False 

Дело в том, что django-remote-auth-ldap, видимо разработан для работы c IIS, который переменную REMOTE_USER устанавливает в формате «DOMAIN/username», мы же выполнили настройку mod_auth_kerb так, что имя домена в REMOTE_USER не попадает. Указанная выше настройка заставляет django-remote-auth-ldap считать что в REMOTE_USER только одно имя пользователя без указания домена, т.е. именно так, как нам и нужно.
Ну и снова рекомендации для настройки MIDDLEWARE_CLASSES и AUTHENTICATION_BACKENDS:

1. В файле настроек Django-проекта settings.py добавить django.contrib.auth.middleware.RemoteUserMiddleware в список MIDDLEWARE_CLASSES сразу после django.contrib.auth.middleware.AuthenticationMiddleware:

MIDDLEWARE_CLASSES = [ '...', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.RemoteUserMiddleware', '...', ] 

2. AUTHENTICATION_BACKENDS должен выглядеть так:
AUTHENTICATION_BACKENDS = [ 'django_remote_auth_ldap.backend.RemoteUserLDAPBackend', ] 

На этом все, прозрачная аутентификация в Django настроена.

Если пользователь входящий в ваше Django-приложение, уже авторизован в Active Directory, то:

1. Apache авторизует его при помощи Kerberos, допустит к страницам вашего приложения и запишет в REMOTE_USER имя авторизованного пользователя.
2. RemoteUserMiddleware «увидит» значение REMOTE_USER и иницирует аутентификацию и авторизацию указанного пользователя в Django с помощью django-remote-auth-ldap
3. django-remote-auth-ldap аутентифицирует и авторизует пользователя при помощи методов, унаследованных от приложения django-auth-ldap, которое «подтянет» в Django необходимую вам информацию из Active Directory.

habr.com

интеграция Kibana со встроенной аутентификацией Windows (Single Sign-On) / Habr

В этой статье мне хотелось бы поделиться способом настройки технологии единого входа (SSO) в Elastic Stack, использующим X-Pack для аутентификации пользователей и разграничения доступа к данным.

Надо сказать, что активные попытки настроить SSO в Кибане с Active Directory начались у меня после прочтения статьи Integrating third party Auth with Kibana. Как всегда в таких блогах был приведён простой и рабочий пример, который подходит для "домашнего использования", но мало применимый на предприятиях со сложной инфраструктурой. И вот только после выхода Elastic Stack v.5.6.2, а если более конкретно — патча в X-Pack 5.6.2, который наконец-то сделал возможным использвание “user impersonation” c Active Directory, единый вход (SSO) заработал в полной мере.

“Олицетворение пользователя” (user impersonation) — это ключевой компонент в этой системе, с помощью которого одной учётной записи (например технический пользователь) разрешается посылать запросы от имени других, уже аутентифицированных пользователей. В Elastic Stack X-Pack эта функция называется run_as.

Справедливости ради надо заметить, что SSO можно было настроить и до этого патча — если использовать LDAP. Но так как LDAP realm в Elasticsearch не поддерживает вложенные группы (nested groups), то рассматривать это решение было не серьёзно.


Архитектура

Архитерктура предлагаемого решения будет выглядеть следующим образом:


Картинка позаимствована в уже упомянутом блоге, изменены только названия у нескольких компонентов. Надеюсь, что Эластик не будет возражать (если узнает), а если будет, то придётся нарисовать свои квадратики в PPT.


Описание работы


  • Пользователи посылают запрос на веб-сервер (IIS), который аутентифицирует их через механизм Windows Authenticated (все остальные методы аутентификации отключены в конфигурации этого веб-сайта).
  • Если аутентификация прошла успешно, то IIS устанавливает переменную окружения REMOTE_USER=DOMAIN\user.
  • Эта переменная будет использоваться в дополнительном модуле Helicon rewrite для установки имперсонифицированного HTTP-заголовка (impersonation header) es-security-runas-user.
  • Модуль Helicon rewrite устанавливает также и HTTP-заголовок аутентификации (Basic) для специального технического внутреннего пользователя Elasticsearch.
  • Специальная роль в Elasticsearch используется для разрешения запуска поисковых запросов от имени других пользователей. Так как имперсонификация должна быть разрешена только для пользователей домена, то эта роль будет выглядеть примерно так: *@domain.name.
  • Настраиваем AD realm для X-Pack'a
  • Так как доступ пользователей к индексам будет регулироваться только через AD-группы, то AD-realm должен использовать параметер unmapped_groups_as_roles: true. Это значит, что имя AD-группы будет именем роли в Elasticsearch (см. ниже про безопасность и производительность1).
  • Все пользователи нашей системы (Кибаны), вне зависимости от того, к каким индексам в Elasticsearch им предоставлен доступ, должны иметь права на чтение и запись в индекс .kibana. Значит, в AD нужно создать специальную группу, в которую будут включаться все те пользователи, которым нужно пользоваться Кибаной. Кроме того, в Elasticsearch нужно создать роль с таким же именем и с правами на изменение индекса .kibana. Для примера, так будет выглядеть конфигурация пользователя отдела администрирования сетевого оборудования:
    • Пользователь Кибаны: AD-группа = ES роль = ELK.Users права на индекс .kibana*:
      • manage, read, index, delete
    • Доступ к сетевым логам: AD-группа = ES роль = ELK.Network.Admins права на индексы net-*:
      • read, view_index_metadata

Установка


  • Настраиваем TLS на Кибане и Elasticsearch сервере: инструкция. Этот пункт опциональный, но желательный — несолидно ведь предлагать систему аутентификации без шифрования траффика.
  • Устанавливаем IIS (Microsoft Internet Information Services) для аутентификации пользователей через NTLM. Так как этот веб-сервер будет использоваться в качестве прокси и никакой другой работы выполнять не будет, можно IIS установить на одном сервере с Кибаной.
  • "Улучшаем" IIS:
    • Application Request Routing (ARR) — расширение, которое позволяет IIS работать в качестве балансера нагрузки. В нашем случае он будет использваться как обратный прокси сервер (reverse proxy).
    • Helicon ISAPI_Rewrite 3 engine — сторонный модуль, эмулирующий работу движка Apache rewrite. Он нужен, потому что IIS (на данный момент) не может установить переменную REMOTE_USER когда используется NTLM, так как встроенный IIS Rewrite модуль вызывается до аутентификации пользователя.

Конфигурация

Приступаем к настройке всех компонентов (мечта — написать инсталлятор...).


IIS


  • Настройка SSL
    В сети полно инструкций для настройки SSL/TLS в IIS, например IIS SSL how-to. Но я всё равно перечислю некоторые шаги. Предположим, что у нас уже есть PEM сертификат, конвертируем его в PKCS#12 формат для IIS:
openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt

  • Импортируем этот сертификат в IIS:
    • IIS Manager ⇒ Top level navigation tree ⇒ Server certificates ⇒ Import …
  • Выбираем этот сертификат в Binding'e для HTTPS (port 443) в нашем сайте:
    • IIS Manager ⇒ Top level navigation tree ⇒ Sites ⇒ Default Web Site ⇒ Bindings…
      • Настраиваем обратный прокси для коммуникации IIS ⇔ Kibana (предполагается, что Кибана работает локально на том же сервере и использует свой стандартный порт — 5601)
      • IIS Manager ⇒ Top level navigation tree ⇒ Application Request Routing Cache ⇒ Server Proxy Settings … ⇒
Enable proxy [x] Reverse proxy: localhost:5601

  • Центр сертификации (Certificate authority) сертификата Kibana
    Если случилось так, что сертификат Кибаны подписан "незнакомым" СА (не из PKI организации), то этот СА необходимо добавить в “Trusted Root Certification Authorities” на сервере с IIS:
    • Вызываем mmc (с правами администратора) ⇒ Add or Remove Snap-ins ⇒ Certificates ⇒ Add ⇒ Computer account ⇒ Local computer ⇒ Certificates (Local computer) ⇒ Trusted Root Certification Authorities ⇒ Certificate ⇒ импортируем "CA.crt"

Helicon Rewrite engine

По умолчанию модуль устанавливается в C:\Program Files.
Добавляем в конфигурационный файл C:\Program Files\Helicon\ISAPI_Rewrite3\httpd.conf следующее:

RewriteEngine on RewriteCond %{REMOTE_USER} (.*)\\(.*) RewriteHeader es-security-runas-user: .* (%2)(@company.com) RewriteHeader Authorization: .* (Basic\ aWlzOnNlY3JldHBhc3N3b3Jk) RewriteRule ^/logout / [R,L]

Как это работает:


  • после аутентификации пользователя его логин DOMAIN\user конвертируется модулем в формат userPrincipalName ([email protected]) и отправляется Кибане новым HTTP заголовком es-security-runas-user
  • добавляем еще один HTTP заголовок для Basic авторизации, где значение aWlzOnNlY3JldHBhc3N3b3Jk это закодированные base64 логин и пароль технического пользователя: iis:secretpassword (его мы создадим в Elasticsearch чуть позже).
  • ну и если пользователь кликнет на /logout, мы просто перенаправим его на стартовую страницу Кибаны, где он опять автоматически авторизуется

Kibana

Для SSO добавляем следующие параметры в kibana.yml:

elasticsearch.requestHeadersWhitelist: [ es-security-runas-user, authorization ] xpack.monitoring.elasticsearch.requestHeadersWhitelist: [ es-security-runas-user, authorization ]

Elasticsearch

X-Pack уже установлен, конфигурируем AD в elasticsearch.yml:

xpack: security: authc: realms: native_realm: type: native order: 0 company_ad_realm: enabled: true type: active_directory order: 1 domain_name: company.com user_search: base_dn: "DC=company,DC=com" group_search: base_dn: "DC=company,DC=com" url: ldaps://server.company.com:636 ssl.verification_mode: none bind_dn: "CN=user,OU=People,DC=company,DC=com" bind_password: "XXXXXXXXXX" unmapped_groups_as_roles: true cache.ttl: 300s

Пользователь, указанный в bind_dn, должен обладать правами на подключение и поиск в AD.
Проверка сертификата AD оключена (ssl.verification_mode: none), потому что центр сертификации (СА) AD не указан (параметр: ssl.certificate_authorities).

Создаем в Elasticsearch технического пользователя (iis) и роль (тоже iis) для имперсонизации ("олицетворение пользователя" — звучит ещё ужаснее):

POST _xpack/security/role/iis

{ "run_as": [ "*@company.com" ] }

POST _xpack/security/user/iis

{ "password": "secretpassword", "roles": [ "iis" ], "full_name": "Service Account for IIS reverse proxy" }

Теперь создаем роль для всех пользователей Кибаны. Напомню — имя роли должно быть именем группы в AD, члены которой будут иметь доступ к Кибане (пусть эта группа называется "ELK.Users"):

POST _xpack/security/role/ELK.Users

{ "indices": [ { "names": [ ".kibana*" ], "privileges": ["read", "manage", "index", "delete"] } ] }

Кибана хранит все настройки в одном индексе (.kibana или .kibana-6), поэтому все пользователи Кибаны должны иметь права на чтение и запись в этот индекс.

Теперь, для примера, создадим роль, члены которой будут иметь доступ к индексам net-*, в которых хранятся данные с сетевых устройств:

POST _xpack/security/role/ELK.Network.Admins

{ "indices": [ { "names": [ "net-*" ], "privileges": ["read", "view_index_metadata"] } ] }

Ещё один пример — "кастомная" супер-пользовательская роль для администраторов Elasticsearch2:

POST _xpack/security/role/ELK.Admins

{ "cluster": [ "all" ], "indices": [ { "names": [ "*" ], "privileges": [ "all" ] } ] }

Таким образом, члены AD-группы "ELK.Admins" получают полный доступ к Elasticsearch кластеру.


Результат

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

При открытии корневой страницы нашего IIS-proxy сайта, пользователь был успешно аутентифицирован.
Замечание: если этот пользователь имеет доступ только к данным индексов net-*, то он всё равно будет видеть все сконфигурированные индексы в Кибане — обратите внимание на выпадающий список. Но при выборе индексов, к которым он не имеет доступа, пользователь будет видеть No results found. Но эта проблема к SSO не имеет отношения.


"Что-то пошло не так"

Тестирование и устранение неполадок.

Случай 1: Пользователя (или его группу) забыли добавить в AD-группу "пользователей Кибаны" (ELK.Users) или он вообще не должен иметь доступа к Кибане:

Config: Error 403 Forbidden: action [indices:data/write/update] is unauthorized for user [iis] run as [[email protected]]: [security_exception] action [indices:data/write/update] is unauthorized for user [iis] run as ...

Пользователь был успешно аутентифицирован IIS (NTLM, Kerberos и т.д.) и посредством технического пользователя iis аутентифицировался в Кибане. Но т.к. реальный аккаунт [email protected] не входит в AD-группу "любителей Кибаны", то и в Elasticsearch у него нет роли на запись/чтение в индекс .kibana.
Я пока не знаю, как сделать сообщение или страничку "доступ запрещен" более "дружелюбным".

Случай 2: IIS использует SSL в конфигурации прокси-модуля (опция "Enable SSL offloading" выключена, как и задумано), a в Кибане забыли настроить HTTPS. Тогда мы можем наблюдать следующее в kibana.log:

{"type":"log","@timestamp":"2017-10-03T15:11:32Z","tags":["connection","client","error"],"pid":10416,"level":"error","message":"Parse Error","error":{"message":"Parse Error","name":"Error","stack":"Error: Parse Error\n at Error (native)","code":"HPE_INVALID_METHOD"}}

Случай 3: Центр сертификации, подписавший сертификат Кибаны, неизвестен IIS
Открываем стартовую страничку IIS-Kibana:

HTTP Error 502.3 - Bad Gateway A security error occurred

и соответствующая ошибка в логе Кибаны:

"code":"ECONNRESET" "message":"socket hang up"

Случай 4: Аутентификация Windows не включена для нашего веб-сайта
Tогда пользователи будут аутентифицированы в Кибане как iis юзер: "Service Account for IIS reverse proxy"

Тест 1: Всё в порядке с AD/LDAP? И как там дела обстоят с членством?
Используем ldapsearch или adfind — всячески рекомендую, скачивать здесь

ldapsearch -h server.company.com -b "DC=company,DC=com" -D "CN=user,OU=People,DC=company,DC=com" -w "XXXXXXX" samaccountname=user adfind -f "userprincipalname=[email protected]"

Тест 2: Тестируем имперcонизацию

curl -k -v -u iis:secretpassword -H "es-security-runas-user: [email protected]" https://elastic-server:9200/.kibana/_search

Если этот тест пройден (HTTP/1.1 200 OK), то Elasticsearch настроен правильно, и может проверить права пользователя в AD.
Ну а если получаем что-то вроде:

{"error":{"root_cause":[{"type":"security_exception","reason":"action [indices:data/read/search] is unauthorized for user [iis] run as [[email protected]]"}],"type":"security_exception","reason":"action [indices:data/read/search] is unauthorized for user [iis] run as [[email protected]]"},"status":403}

то самое время включать дебаг и читать логи Elasticsearch'a:
PUT /_cluster/settings

{ "transient": { "logger.org.elasticsearch.xpack.security.authc": "trace" } }

Тест 3: Изменяем членство пользователя в AD и, чтобы Elasticsearch не ожидал инвалидации кэша, очищаем последний вручную

curl -k -u 'elastic:changeme' -X POST https://elastic-server:9200/_xpack/security/realm/company_ad_realm/_clear_cache

Примечание: elastic — это встроенный пользователь с паролем по-умолчанию (в версии 5.х) или с измененным на такой же (версия 6.х).


To-Dos


  • Создать "дружелюбную" страницу при возникновении “Internal Server Error”
    Если Elasticsearch не может проверить пользователя, по какой-либо причине (например, нет соединения с AD), то Кибана покажет такую JSON страничку:
{ statusCode: 500, error: Internal Server Error, message: An internal server error occurred }

В принципе, можно в том же Helicon Rewrite написать редирект при появлении этой ошибки, на кастомную страничку, которую можно поместить в:

<kibana-home>\optimize\bundles

Страничка будет доступна по адресу:

https://localhost/bundles/custom/error.htm

Спасибо за внимание!

Надеюсь, что теперь в Вашей организации уровень "юзер-экспириенса" и прочего "сатисфэкшена" будет ещё больше!



[1] Следующие соображения безопасности и производительности должны быть приняты во внимание при использование unmapped_groups_as_roles: true


  • Администратор AD теоретически получает полный доступ к ES кластеру: при создании в AD группы с именем superuser и добавлении в неё своей учётной записи, администратор становится супер-пользователем кластера, т.к. роль superuser является встроенной и её нельзя отключить или удалить. Тоже самое будет справедливым для других встроенных ролей: logstash_admin, machine_learning_admin и т.д. Никаких "воркэраундов" предложить не могу, только аудит AD.
  • Необходимо тщательно планировать и соблюдать соглашение о наименовании групп в AD (naming convention), чтобы избежать несанкционированного доступа к данным. Используйте префиксы (суфиксы) в именах групп для доступа к ES кластеру, например ELK.*.
  • Elasticsearch будет проверять каждую группу пользователя, на соответвии её роли в кластере. При большом количестве групп, в которые включён пользователь, эта проверка будет влиять на производительность. В крупных организациях, где пользователи имеют сотни, или даже тысячи групп, это может быть проблемой. Но, предупреждён — значит вооружён. К тому же, Elasticsearch кэширует группы и не обращается к AD при каждом поисковом запросе, см. параметр cache.ttl.

Если Вы всё же решили не использовать этот автоматический маппинг через AD-группы по описанным выше причинам, то отображать группы в роли придётся или через файлы или через API. &larrhk;

[2] В продукции создавать такую супер-пользовательскую роль не рекомендуется. Администрировать лучше по старинке — супер-юзером elastic и через curl. &larrhk;

habr.com


Смотрите также



© 2010- GutenBlog.ru Карта сайта, XML.