Рубрика:
Администрирование /
Идентификация
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
ЛЕОНИД КАНТЕР, ИТ-директор Cloud Linux Inc
Корпоративная система управления идентификационной информацией на базе FreeIPA
Статья посвящена опыту построения и внедрения корпоративной системы управления идентификационной информацией на базе свободных продуктов FreeIPA и Ipsilon с поддержкой единого входа в систему (SSO) по протоколу SAML длясторонних поставщиков услуг
Постановка задачи
Когда у нашей компании был только один продукт – операционная система для хостинг-провайдеров Cloud Linux – и количество пользователей не превышало 25 человек, единственному системному администратору не составляло проблем заводить пользователей на каждом из внешних и внутренних ресурсов, которыми пользовались сотрудники.
Задачу облегчало то, что для почты и документооборота у нас уже использовался пакет приложений G Suite от Google и многие используемые нами веб-приложения получали идентификационную информацию от G Suite по протоколу OAuth2. Но к лету 2016 года в компании произошло много изменений: была запущена разработка нового продукта, которая потребовала резкого увеличения числа сотрудников, для автоматизации разработки и тестирования введено в строй корпоративное облако виртуальных машин на базе проекта OpenNebula.
В нашей компании c FreeIPA интегрировано большинство внутренних и внешних сервисов и поставщиков услуг |
Поскольку все сотрудники перешли на удаленную работу, для доступа к внутренним сетям потребовалась установка сервера VPN. В результате администрирование всех этих ресурсов – добавление новых сотрудников и блокирование уволившихся – резко повысило нагрузку на ИТ-отдел.
Поэтому возникла острая необходимость во внедрении единой корпоративной системы управления идентификационной информацией сотрудников, которая, с одной стороны, хранила бы организационную информацию о пользователях, такую как имя, контакты, отдел, должность, с другой – позволяла бы управлять политиками доступа к корпоративным ресурсам – как к веб-сайтам, так и серверам и виртуальным машинам в режиме командной строки.
FreeIPA и Ipsilon
Поскольку у нас уже была готовая база сотрудников в G Suite, звучали предложения использовать именно его в качестве первичного источника идентификационной информации. И действительно, вход на некоторые ресурсы уже был организован с использованием Google OAuth2. Но предлагаемые способы доступа на системы Linux по ssh в консольном окружении были крайне неудобными.
Более правильным было бы иметь свою систему управления идентификационной информацией, которая бы управляла доступом на системы Linux правильным образом и при этом служила бы источником идентификационной информации для Google. Но у Google предусмотрен только один способ получения идентификации пользователей от сторонних источников – протокол SAML (security assertion markup language – язык разметки декларации безопасности).
Наиболее популярной реализацией IdP (Identity Provider – поставщик услуг) на тот момент были решения от Microsoft. Но для нас использование этих решений было неприемлемым, поскольку приоритет в компании отдается исключительно продуктам Open Source.
И вот при изучении новых пакетов, вошедших в состав CentOS 7.2, был обнаружен пакет ipsilon версии 1.0.0, в состав которого входил не только совместимый с G Suite сервер IdP, поддерживающий протоколы SAML2, OpenID Connect, OAuth2, Persona, OpenID 2.0, но и инструментарий, позволяющий легко подключать сайты поставщиков услуг на базе веб-сервера Apache.
Поскольку обязательным предварительным условием для установки Ipsilon являлось наличие установленного и настроенного сервера FreeIPA, был сделан однозначный выбор в пользу связки FreeIPA + Ipsilon.
Введение в SAML
При использовании инициируемой поставщиком услуг аутентификации по протоколу SAML обмен идентификационной информацией выглядит следующим образом:
- Пользователь обращается на сайт поставщика услуг (SP).
- Если это внешний поставщик услуг, обслуживающий несколько организаций, как правило, требуется указать имя пользователя с доменом, например username@example.org. Если домен зарегистрирован как поддерживающий SSO, пользователь будет переадресован на страницу аутентификации поставщика идентификационной информации (IdP). Внутренние ресурсы сразу перенаправляют на IdP.
- IdP проверяет идентификационную информацию, обращаясь к корпоративному хранилищу (в нашем случае – FreeIPA), и в случае успеха передает «карточку» пользователя на сайт поставщика услуг в формате xml, после чего сайт поставщика услуг предоставляет пользователю доступ.
Более подробное описание SAML выходит за рамки данной статьи.
Возможности FreeIPA
FreeIPA (от Free Identity, Policy, Audit) – открытый проект для создания централизованной системы масштаба предприятия по управлению идентификацией пользователей, задания политик доступа и аудита сетей. Поддерживается компанией Red Hat, является апстрим-проектом для Red Hat Identity Manager. Включает в себя следующие компоненты:
- 389 Directory Server в качестве сервера LDAP;
- MIT Kerberos 5.0 для аутентификации и единого входа;
- DogTag для управления сертификатами;
- NTP;
- BIND и DHCP для управления DNS;
- веб-интерфейс управления.
Начиная с версии 3.0.0, FreeIPA также использует Samba для интеграции с Active Directory от Microsoft путем доверительных отношений.
В отличие от серверов каталогов общего назначения, таких как Red Hat Directory Server или Fedora Directory Server, FreeIPA является специализированным контроллером домена, используемые цели и механизмы которого схожи с Microsoft Active Directory.
Управление политиками реализуется на основе правил HBAC (host based access control, управление доступом на уровне узла – описывает, какие службы доступны пользователям на том или ином зарегистрированном хосте) и правил sudo (какие команды может выполнять пользователь от имени root или другого пользователя).
Также система позволяет очень гибко делегировать пользователям различные роли, не передавая им пароль администратора. Например, можно присвоить пользователю специальную роль Enroll hosts, которая даст возможность регистрировать хосты.
Реализован также механизм построения многоуровневой системы управления доступом, то есть руководителю группы пользователей можно дать полномочия добавлять в нее новых пользователей.
Установка сервера FreeIPA
Для безопасной установки сервера FreeIPA на свежеустановленный CentOS 7 необходимо провести определенные подготовительные действия.
Предположим, установка планируется для домена corp.example.com, а имя сервера будет auth.corp.example.com. Поскольку наш сервер будет первичным сервером DNS для этого домена, чтобы исключить возможность использования его дляDоS-атак, необходимо разрешить рекурсивные запросы только из внутренней сети. Для этого нужно установить пакет bind, в файле /etc/named.conf добавить секцию с адресами локальной сети:
acl internal {
127.0.0.1;
::1;
192.168.0.0/16;
172.30.0.0/15;
172.27.224.0/24;
};
В строке allow-recursion нужно заменить any на internal.
Следующим этапом будет настройка firewall. На CentOS 7 это можно сделать, выполнив следующую последовательность команд:
# firewall-cmd --add-service=dns
# firewall-cmd --add-service=kerberos
# firewall-cmd --add-service=kpasswd
# firewall-cmd --add-service=http
# firewall-cmd --add-service=https
# firewall-cmd --add-service=ntp
# firewall-cmd --add-service=ldap
# firewall-cmd --add-service=ldaps
# firewall-cmd --runtime-to-permanent
Проверить правильность настройки можно командой:
# firewall-cmd --list-services
Также, поскольку в FreeIPA используется ntpd, нужно отключить и остановить службу cronyd.
По умолчанию FreeIPA генерирует самоподписанные сертификаты. Чтобы не тратить время на установку CA-сертификата на клиентские компьютеры, рекомендуется запастись сертификатами, выданными авторизованным центром. Мыиспользовали сертификаты Comodo, но можно воспользоваться и бесплатными Letsencrypt.
Теперь мы готовы к установке сервера FreeIPA. Установка производится следующими командами:
# yum install freeipa-server
# ipa-server-install --domain=corp.example.com --realm=CORP.EXAMPLE.COM --setup-dns --no-forwarders --mkhomedir --idstart=10000 --dirsrv-cert-file auth.crt --http-cert-file auth.crt --dirsrv-cert-file intermediate.crt --http-cert-file intermediate.crt --ca-cert-file ca.crt
Здесь мы устанавливаем сервер для домена corp.example.com и Kerberos Realm CORP.EXAMPLE.COM, разрешаем настройку DNS при отключенных forwarders, разрешаем создание домашних каталогов при первом подключении пользователей, указываем начинать ID добавляемых пользователей с 10 000. Дальше указывается комплект полученных от авторизованного центра сертификатов:
- auth.crt – сертификат, выписанный на имя узла auth.corp.example.com,
- intermediate.crt – промежуточный сертификат,
- ca.crt – сертификат CA.
После этого сервер FreeIPA готов к работе. Но нужно иметь в виду, что после установки по умолчанию в нем будет существовать HBAC-правило allow_all, которое разрешает доступ всем пользователям ко всем сервисам на всех зарегистрированных узлах. Рекомендуется сразу же изменить это правило так, чтобы полный доступ имели только члены группы системных администраторов.
Ниже приведен пример измененной группы allow_all:
# ipa hbacrule-show allow_all
Rule name: allow_all
Host category: all
Service category: all
Description: Allow all users to access
any host from any host
Enabled: TRUE
User Groups: infrastructure
Как видно из примера, теперь доступ ко всем службам на всех хостах разрешен только пользователям из группы infrastructure.
Регистрация клиента, установка Ipsilon
Теоретически Ipsilon может быть установлен на ту же систему, что и FreeIPA, но в целях безопасности мы рассмотрим установку на отдельную систему. Сначала нужно установить клиент и зарегистрировать сервер в домене IPA. Установка и регистрация производятся следующими командами:
# yum install ipa-client
# ipa-client-install --domain=corp.example.com --hostname=idp.corp.example.com --no-nisdomain --mkhomedir
Для установки Ipsilon необходимо в /etc/yum.repos.d создать файл конфигурации репозитория следующего вида:
[puiterwijk-ipsilon]
name=Copr repo for ipsilon owned by puiterwijk
baseurl=https://copr-be.cloud.fedoraproject.org/results/puiterwijk/ipsilon/epel-7-$basearch/
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://copr-be.cloud.fedoraproject.org/results/puiterwijk/ipsilon/pubkey.gpg
enabled=1
enabled_metadata=1
После этого установить необходимые для подключения к FreeIPA компоненты командой:
# yum install ipsilon ipsilon-authgssapi ipsilon-saml2-base ipsilon-authpam ipsilon-base ipsilon-tools-ipa ipsilon-saml2 ipsilon-authform ipsilon-filesystem ipsilon-infosssd
Теперь осталось перезапустить httpd, и Ipsilon готов к работе – можно заходить на его веб-страницу https://idp.corp.example.com/idp с логином и паролем администратора FreeIPA и приступать к добавлению поставщиков услуг. Чтобы недобавлять исключения безопасности в браузер, рекомендуется сразу же заменить автоматически сгенерированные самоподписанные сертификаты на Letsencrypt.
Рисунок 1. Административная консоль Ipsilon в браузере
Если у вас уже отключено HBAC-правило allow_all, как было рекомендовано выше, необходимо создать новое правило, которое разрешает всем пользователям организации доступ на Ipsilon. Оно может выглядеть следующим образом:
# ipa hbacrule-show allow_ipsilon
Rule name: allow_ipsilon
User category: all
Service category: all
Enabled: TRUE
Hosts: idp.corp.example.com
Интеграция с G Suite
Для настройки интеграции с G Suite необходимо иметь полномочия администратора домена G Suite и администратора домена FreeIPA.
Первый этап – настройка Ipsilon. Для этого необходимо зайти на Ipsilon с правами администратора, перейти к вводу нового поставщика услуг по пути Administration → Identity Providers → SAML2 → Manage и нажать Add New. После этого заполнить произвольным образом поля Name и Description, в поле ссылки на поставщика услуг указать адрес перехода https://mail.google.com/a/example.com, где example.com – ваш домен, а в поле метаданных ввести следующие метаданные, заменив предварительно example.com на ваш домен:
<EntityDescriptor entityID="google.com/a/example.com" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
<SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
<AssertionConsumerService index="1" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Location="https://www.google.com/a/example.com/acs" />
</SPSSODescriptor>
</EntityDescriptor>
Рисунок 2. Добавление поставщика услуг G Suite
Следующим этапом является настройка G Suite.
- Перейдите на https://admin.google.com/ и войдите с правами администратора домена.
- Нажмите ссылку Security.
- Нажмите Set up Single sign-On (SSO).
- Кликните чекбокс Setup SSO with third party identity provider.
- Для Sign-in page URL введите: https://idp.corp.example.com/idp/saml2/SSO/Redirect.
- Для Sign-out page URL введите: https://myidp.example.com/idp/logout.
- Для Change password URL введите ссылку на любую страницу, на которой пользователь может сменить свой пароль.
- Для Verification Certificate загрузите файл, который находится на Ipsilon как /var/lib/ipsilon/idp/saml2/idp.pem.
- Кликните чекбокс Use a domain specific issuer.
- Нажмите Save.
После этого необходимо подождать 15 минут для синхронизации серверов Google, и можно пользоваться единым входом.
Единый вход с использованием Kerberos
При использовании домена FreeIPA каждый пользователь имеет возможность заходить по ssh на разрешенные серверы с использованием билетов Kerberos. Подключение рабочей станции к домену при этом не требуется. На операционной системе Mac OS все необходимые для этого компоненты установлены по умолчанию, на Linux требуется доустановить соответствующие пакеты. Для получения билета Kerberos требуется ввести команду:
# kinit username@CORP.EXAMPLE.COM
где:
- username – ваше имя пользователя,
- CORP.EXAMPLE.COM – Kerberos REALM.
После этого будет предложено ввести пароль единого входа. Просмотреть полученный билет можно командой klist, удалить – командой kdestroy. Также можно использовать команду kpasswd для изменения пароля единого входа. Приналичии билета Kerberos доступ на разрешенные контроллером домена системы происходит без пароля при помощи авторизации gssapi.
Для использования gssapi в среде OS Windows необходимо либо установить Windows Subsystem for Linux, либо настроить интеграцию putty и MIT Kerberos for Windows.
Большинство современных браузеров также поддерживает аутентификацию gssapi. Это Safari, Chrome и Firefox в Mac OS, Chrome и Firefox в Linux, Firefox в Windows (для последнего требуется интеграция с MIT Kerberos for Windows). Описание настройки Kerberos в браузерах выходит за рамки данной статьи. При настроенном браузере и имеющемся билете Kerberos вход на страницы FreeIPA и Ipsilon происходит без ввода пароля.
Интеграция произвольных веб-сайтов
Доступ на любой сайт под управлением веб-сервера Apache можно ограничить при помощи пакета ipsilon-client. Для установки пакета необходимо создать файл конфигурации репозитория, как описано выше, и установить пакет командой:
# yum install ipsilon-client
Предположим, нужно ограничить доступ к странице https://site.corp.example.com/site. Для этого нужно выполнить команду:
# ipsilon-client-install --saml-idp-metadata \https://idp.corp.example.com/idp/saml2/metadata --auth-location /site --hostname site.corp.example.com
В результате выполнения этой команды в каталоге /etc/httpd/saml2/site.corp.example.com будет создано несколько файлов, включая файл metadata.xml.
Следующий этап – настройка поставщика услуг на Ipsilon. Для этого нужно перейти на страницу добавления нового поставщика услуг, как описано выше, заполнить произвольным образом поля названия и описания ресурса, в поле перехода указать ссылку https://site.corp.example.com/site, а в поле ввода метаданных скопировать содержимое полученного на первом шаге файла metadata.xml.
Теперь, если в браузере открыть ссылку https://site.corp.example.com/site, пользователь будет перенаправлен на страницу аутентификации Ipsilon для ввода пароля.
Если доступ к ресурсу должен быть предоставлен не всем пользователям организации, а только участникам определенной группы, эту группу можно задать в файле конфигурации модуля Apache mod_auth_mellon в виде переменной окружения REMOTE_USER_GROUP со значением в виде имени группы. Более подробно это описано в документации mod_auth_mellon и выходит за рамки данной статьи.
Кроме описанного, существует множество других способов интеграции веб-приложений с FreeIPA – более подробно с ними можно ознакомиться на странице документации FreeIPA.
В настоящее время в нашей компании c FreeIPA интегрировано большинство внутренних и внешних сервисов и поставщиков услуг, планируется перевод с OAuth2 и локальной авторизации на SAML нескольких оставшихся. В результате внедрения корпоративной системы управления идентификационной информацией были достигнуты следующие цели:
- Усилена информационная безопасность компании: идентификационная информация сотрудников не хранится на сторонних сайтах; установлены жесткие требования к сложности пароля: сотрудники имеют доступ только к темресурсам, которые им разрешены; при увольнении сотрудника достаточно заблокировать его учетную запись в одном месте.
- Значительно повышена производительность труда сотрудников ИТ-отдела и отдела кадров.
- При условии использования единого входа по билетам Kerberos значительно повышается производительность труда всех сотрудников – достаточно один раз в день ввести пароль для получения билета, после чего предоставляется доступ ко всем разрешенным ресурсам.
- Сайт проекта FreeIPA – https://freeipa.org.
- Сайт проекта Ipsilon – https://ipsilon-project.org.
- Документация Red Hat Identity Management – https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/linux_domain_identity_authentication_and_policy_guide/index.
- Вячеслав Калошин. Описание интеграции сервера OpenVPN c FreeIPA – https://blog.kiltum.tech/2016/01/28/newserver-2-2/.
- Страница mod_auth_mellon на github – https://github.com/Uninett/mod_auth_mellon.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|