Конфигурирование аутентификации Kerberos для Office SharePoint Server 2007

Использование аутентификации Kerberos все больше набирает популярность. Основные причины этому две:

  • NTLM (а именно этот протокол используется по умолчанию) создает более высокую нагрузку на котроллер домена
  • При использовании Kerberos возможна поддержка различных схем аутентификации, в том числе и тех, которые подразумевают отсутствие процесса ввода пароля (например, аутентификация по смарт-картам)

За подробностями относительно самого протокола, как обычно, добро пожаловать на TechNet – "What Is Kerberos Authentication?" Те, кто хочет узнать больше, могут также почитать блог команды Active Directory.

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

Мы же вернемся к MOSS. Как выясняется на практике, включение Kerberos для использования с этим продуктом – не такой уж тривиальный процесс. С выпуском же Windows Server 2008 и Infrastucture Updates проявились особенности, о которых раньше большинство людей, занимающихся SharePoint, даже не подозревало. Для начала опишем, что же мы хотим сделать.

А хотим мы сконфигурировать Kerberos на ферме MOSS2007 из трёх машин: два Web Front End-а (WFE) и один сервер индексирования. Работают под Windows Server 2008 (а как же!). Не забываем, конечно, и про SQL Server.

Роль  

Имя  

FQDN

WFE1

PORTAL-WFE1

portal-wfe1.company.com

WFE2

PORTAL-WFE2

portal-wfe2.company.com

Index

PORTAL-INDEX

portal-index.company.com

Database

SQLDB

sqldb.company.com

Взглянув на таблицу, можно догадаться, что имя домена у нас COMPANY.COM (или в старинной записи COMPANY).

Оба Web Front End-а объединены в NLB-кластер с DNS-именем PORTAL (portal.company.com). PORTAL-INDEX используется только для индексирования, в качестве Query-серверов используются WFE-серверы.

В процесс развертывания портала были созданы следующие веб-приложения:

Приложение

Порт

Альтернативное DNS-имя на порту 80 (через host header-ы)

Central Administration 

999 

portal-sca.company.com

Shared Services Provider 

888 

portal-ssp.company.com

Personal Sites

777 

my.company.com

Portal 

80

portal.company.com

Полагаю, назначение первых трех понятно всем, кто работает с MOSS. Четвертое же – как раз тот самый корпоративный портал.

Обратите внимание на альтернативные имена для приложений на 80-ом порту. Во-первых, нельзя забывать по Alternate Access Mapping, во-вторых, DNS-записи для этих имен следует создавать только как DNS A-records (а не CNAME, как многие любят). Причины таких требований описаны здесь и здесь.

Считаем, что имя Shared Services Provider: "SharedServices1". В 99% случаев оно именно такое. Если в вашем случае это не так, соответствующем образом поправьте команды из этой статьи, когда будете их копипастить ;-)

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

Роль  

Имя  

Описание  

Аккаунт фермы или аккаунт базы даных

svc_sp_dbacc

Этот аккаунт используется для доступа всех приложений SharePoint к серверу БД. Под ним также работают пул приложений Центра администрирования и сервис SharePoint Timer (OWSTIMER)

Аккаунт пула приложений Shared Services

svc_sp_ssp_p

 

Аккаунт сервиса Shared Services

svc_sp_ssp_service

Под этим аккаунтом работает пул приложений веб-сервисов Shared Services

Office SharePoint Server Search 

svc_sp_serversearch

Под этим пользователем запускается сервис MSSEARCH, отвечающий за функционирование Office Server Search (главным образом – за индексирование)

Application Pool process account (Portal)  

svc_sp_portal_p

Аккаунт пула приложений веб-приложения "Portal"

Application Pool process account (Personal Sites)

svc_sp_personalsites_p

Аккаунт пула приложений веб-приложения "Personal Sites"

Теперь просто действия по шагам.

1. Установите необходимые обновления для WSS и MOSS.

    На сегодняшний день таковых накопилось порядочно. Позволю себе процитировать (а заодно и перевести) пост моего коллеги из SharePoint Team.

После установки всех апдейтов на всех трех компьютерах фермы следует выполнить команду «psconfig -cmd upgrade -inplace b2b». Это «прочистит мозг» SharePoint и он поймет наконец, что апдейты установлены везде, где положено. J Вообще же, прежде чем ставить какие-либо обновления для SharePoint, советую один раз прочитать две статьи: Deploy software updates for Windows SharePoint Services 3.0 и Deploy software updates for Office SharePoint Server 2007.

Небольшая подсказка. Перед установкой Infrastructure Update на индекс-сервер скопируйте файл web.config из папки %COMMONPROGRAMFILES%\Microsoft Shared\Web server extensions\12\Config в папку %COMMONPROGRAMFILES%\Microsoft Shared\Web server extensions\12\Template\Layouts. Это необходимо из-за того, что установщик ожидает обнаружить на сервере хотя бы одно веб-приложение SharePoint, но на индекс-сервере таковых нет. Подобный trick проблему решает.

2. Если вы еще не сделали это, сконфигурируйте должным образом Component Services (сервис IIS WAMREG Admin Service).

  • Откройте Component Services (dcomconfig.exe)
  • Откройте свойства сервиса «IIS WAMREG Admin Service»
  • Перейдите на вкладку Security
  • Откройте Launch and Activation Permissions
  • Добавьте локальные группы WSS_WPG и WSS_ADMIN_WPG с разрешением Local Activation

В нескольких статьях встречается шаг, на котором необходимо в том же Component Services установить для всего компьютера (Component Services -> Computers -> My Computer -> Default Properties) Default Impersonation Level в значение Delegate. Этого делать нельзя! В лучшем случае такая настройка ничего не даст, в худшем – после включения Kerberos перестанет работать provisioning в ферме SharePoint, а в Event Log-ах будет появляться много «красненьких» сообщений, stack trace-ы которых указывают на невозможность обновления метабазы IIS-а.

При этом не нужно путать такую ситуацию с описанной в статье https://support.microsoft.com/kb/946517. Возможно исправление из этой статьи вам понадобится, но будем надеяться, что нет.

3. Включите использование Application Pool Identity для веб-приложений

В Windows Server 2008, а точнее в IIS7, появилась новая фича – аутентификация непосредственно ядром через HTTP.sys. Однако, особенность этой фичи в том, что по умолчанию аутентификация проводится под аккаунтом Local System, что сводит на нет функционирование Kerberos в условиях его использования на ферме SharePoint.

Для включения использования Application Pool Identity нужно сделать следующее:

  • Откройте файл %windir%\System32\inetsrv\config\applicationHost.config.
  • Найдите секцию <system.webServer> . Убедитесь, что вы нашли именно «живую» секцию system.webServer в корневой секции security/authentication/windowsAuthentication, а не комментарий в xml или соответствующую секцию для отдельных веб-приложений. Кстати, о последнем предупреждении. В принципе эту настройку можно модифицировать и на уровне веб-приложения. Если для вас такой сценарий более предпочтителен, используйте его.
  • Установите атрибут useAppPoolCredentials в ключе system.webServer/security/authentication/windowsAuthentication в значение true

    В результате секция <system.webServer> должна быть похожа на это:

<system.webServer>

<security>

<authentication>

<windowsAuthentication enabled="true" useAppPoolCredentials="true">

<windowsAuthentication>

</authentication>

</security>

</system.webServer>

  • Убедитесь также, что атрибут enabled также установлен в true
  • Сохраните applicationHost.config

4. Создайте Service Principal Names (SPN).

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

4.1. Убедитесь в том, что Kerberos сконфигурирован для сервера баз данных

SQL Server отлично работает с Kerberos. Существует несколько способов конфигурирования SQL Server для использования Kerberos. Все они, так или иначе, приводят к созданию SPN. Подробности здесь и здесь.

Если Kerberos для SQL Server еще не конфигурировался, то необходимо создать SPN и для него.

В общем случае SPN для SQL Server создается в форе Setspn.exe –A MSSqlSvc/FQDNServerName:PORT DOMAIN\Account. Порт обычно 1433. FQDNServerName – это полное FQDN-имя сервера, включая суффикс company.com. DOMAIN-имя домена, Account-имя аккаунта, под которым работает Database Service. Если предположить, что у нас он работает под аккаунтом COMPANY\svc_sql_dbs, то команда будет выглядеть так:

Setspn.exe –A MSSqlSvc/sqldb.company.com:133COMPANY\svc_sql_dbs

После этого необходимо включить доверительные отношения делегирования для акакаунта Database Service и самого сервера баз данных:

Откройте оснастку Active Directory Users and Computers.

  • найдите аккаунт в иерархии AD (в нашем примере это аккаунт svc_sql_dbs).
  • откройте его свойства
  • на вкладке Delegation выберите Trust this user/computer for delegation to any service (Kerberos)
  • убедитесь, что опция Account is sensitive and cannot be delegated отключена

Аналогично выставите эту опцию в Active Directory для сервера баз данных (sqldb).

4.2. Создайте SPN-ы для веб-приложений

В общем случае SPN-ы для веб-приложений создаются в форме Setspn.exe –A HTTP /ServerName:PORT DOMAIN\Account. Необходимо создвать SPN-ы для всех вариантов обращения к серверам, включая FQDN-имена, имена обоих WFE и имя WFE-клстера. В таблице ниже SPN-ы для нашего случая.

Account

SPN Name

svc_sp_dbacc

http/portal-wfe1:999

svc_sp_dbacc

http/portal-wfe2:999

svc_sp_dbacc

http/portal:999

svc_sp_dbacc

http/portal-wfe1.company.com:999

svc_sp_dbacc

http/portal-wfe2.company.com:999

svc_sp_dbacc

http/portal.company.com:999

svc_sp_dbacc

http/portal-sca.company.com

 

  

svc_sp_ssp_p

http/portal-wfe1:888

svc_sp_ssp_p

http/portal-wfe2:888

svc_sp_ssp_p

http/portal:888

svc_sp_ssp_p

http/portal-wfe1.company.com:888

svc_sp_ssp_p

http/portal-wfe2.company.com:888

svc_sp_ssp_p

http/portal.company.com:888

svc_sp_ssp_p

http/portal-ssp.company.com

 

  

svc_sp_portal_p

http/portal-wfe1

svc_sp_portal_p

http/portal-wfe2

svc_sp_portal_p

http/portal

svc_sp_portal_p

http/portal-wfe1.company.com

svc_sp_portal_p

http/portal-wfe2.company.com

svc_sp_portal_p

http/portal.company.com

   

svc_sp_mysites_p

http/portal-wfe1:777

svc_sp_mysites_p

http/portal-wfe2:777

svc_sp_mysites_p

http/portal:777

svc_sp_mysites_p

http/portal-wfe1.company.com:777

svc_sp_mysites_p

http/portal-wfe2.company.com:777

svc_sp_mysites_p

http/portal.company.com:777

svc_sp_mysites_p

http/my.company.com

4.3. Создайте SPN-ы для сервисов Shared Services

Создайте SPN-ы в новом формате с помощью следующих команд.

Для обоих WFE-серверов:

  • Setspn.exe -A MSSP/servername:56737/SharedServices1 COMPANY\svc_sp_ssp_service
  • Setspn.exe -A MSSP/servername:56738/SharedServices1 COMPANY\svc_sp_ssp_service
  • Setspn.exe -A MSSP/serverFQDNname:56737/SharedServices1 COMPANY\svc_sp_ssp_service
  • Setspn.exe -A MSSP/serverFQDNname:56738/SharedServices1 COMPANY\svc_sp_ssp_service

где servername -это pre-Windows2000 (netbios) имя сервера, а serverFQDNname - это полное FQDN-имя сервера (с суффиксов company.com)

Затем эти же команды, но для имен кластера:

  • Setspn.exe -A MSSP/portal:56737/SharedServices1 COMPANY\svc_sp_ssp_service
  • Setspn.exe -A MSSP/portal.company.com:56737/SharedServices1 COMPANY\svc_sp_ssp_service
  • Setspn.exe -A MSSP/portal:56738/SharedServices1 COMPANY\svc_sp_ssp_service
  • Setspn.exe -A MSSP/portal.company.com:56738/SharedServices1 COMPANY\svc_sp_ssp_service

5. Включите использование нового формата SPN.

Одним из новшеств, привносимых Infrastructure Update, является поддержка нового формата SPN для SharePoint. Без этого раньше было весьма проблематично включить использование Kerberos на Shared Services. По умолчанию такая поддержка отключена. Чтобы ее активировать нужно в реестре, в ключе HKLM\Software\Microsoft\Office Server\12.0 создать числовое (REG_DWORD) значение KerberosSpnFormat и выставить его в 1.

6. Включите доверительные отношения делегирования для компьютеров фермы и аккаунтов сервисов и пулов приложений.

Для аккаунта SQL Server Database Service мы уже делали это.

Откройте оснастку Active Directory Users and Computers. Для обоих WFE фермы необходимо сделать следующее:

  • найдите компьютер в иерархии AD
  • откройте его свойства
  • на вкладке Delegation выберите Trust this user/computer for delegation to any service (Kerberos)

Затем сделайте то же самое для всех аккаунтов пулов приложений, включая svc_sp_dbacc (убедитесь, что опция Account is sensitive and cannot be delegated отключена).

7. Перезагрузите серверы фермы.

Здесь, пожалуй, пора перезагрузить оба WFE и Index-сервер, чтобы многочисленные настройки (а особенно последняя) применились, как следует.

8. Включите Kerberos для Shared Services.

Делается это через stsadm двумя командами:

  • stsadm -o SetSharedWebServiceAuthn -negotiate
  • stsadm -o execadmsvcjobs

9. Включите Kerberos для Excel Services.

Опять же используем stsadm. Парочка команд

  • stsadm.exe -o set-ecssecurity -ssp SharedServices1 -accessmodel delegation
  • stsadm.exe -o execadmsvcjobs

10. Установите исправление для IE 6.

Установите на пользовательские компьютеры, использующие Internet Explorer версии 6, исправление, позволяющее IE корректно работать с Kerberos. Об исправлении можно почитать здесь: https://support.microsoft.com/kb/908209.

Хотя, конечно самый правильный способ – использовать Internet Explorer 7.

11. Включите использование Kerberos для веб-приложений.

Итак, последний шаг!

Открываем Central Administration и для каждого веб-приложения делаем следующее:

  • На вкладке Application Management открываем Authentication Providers (раздел Application Security).
  • Выбираем в «выпадающем» списке очередное веб-приложение.
  • Выбираем зону, в которой хотим включить Kerberos (обычно Default).
  • На странице Edit Authentication в IIS Authentication Settings, выбираем Integrated Windows authentication, затем Negotiate (Kerberos) . В ответ на запрос подтверждения нажимаем OK.
  • Чтобы все это применилось, жмем Save.

12. IISRESET.

Выполните команду IISRESET.

Вот и все! Теперь ваш SharePoint работает с Kerberos! Добавлю только, что весьма и весьма подробно все эти шаги описаны в статье Configure Kerberos authentication (Office SharePoint Server). Если появляются проблемы, связанные с Kerberos, поищите их здесь или здесь - возможно найдете способ, как их устранить.

В следующий раз я расскажу о некоторых особенностях развертывания Office SharePoint Server 2007 в NLB-кластере под Windows Server 2008.