Данная статья применима к:

  • Astra Linux

Исходные настройки

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

  • имеется домен Active Directory (AD), с настроенным и работающим контроллером домена:
    • с условным именем домена windomain.ad (имена доменов FreeIPA и Windows AD должны различаться);
    • соответственно, с именем NETBIOS WINDOMAIN;
    • имеется выделенный сервер контроллера домена:
      • с условным названием winserver;
      • с фиксированным IP-адресом (далее <IP-адрес_сервера_AD>);
      • под управлением Windows Server 2008 R2 или другого сервера Windows, поддерживающего роль контроллера домена;

        В данном примере использовался английский вариант сервера. Если вы используете русский вариант сервера - не забудьте перевести названия групп AD.
      • адинистратор сервера AD имеет имя Administrator, и его пароль известен;

        Команда ipa trust-add не поддерживает кириллицу в учетной записи администратора AD

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

  • имеется сервер FreeIPA с настроенным доменом FreeIPA:
    • с условным названием ipadomain.ipa;
    • соответственно, с именем NETBIOS IPADOMAIN;
    • имеется выделенный сервер FreeIPA:
      • с операционной системой Astra Linux;
      • с условным названием ipaserver;
      • с фиксированным IP-адресом (далее <IP-адрес_сервера_FreeIPA>);
      • администратор сервера FreeIPA имеет имя admin и его пароль известен;
  • серверы winserver и ipaserver находятся в одной сети, и на всех серверах успешно выполняются команды

    ping <IP-адрес_сервера_FreeIPA>

    и

    ping <IP-адрес_сервера_AD>

    Для корректного взаимодействия контроллеров доменов FreeIPA и Windows AD они должны находиться в одной широковещательной зоне сети (broadcast zone). Нарушение этого требования может вести к задержкам в работе клиентов доменов.
При использовании для серверов AD и FreeIPA виртуальных машин выделить каждой виртуальной машине не менее, чем 2 процессора и 2ГБ оперативной памяти.

Предполагается, что к началу настройки доверительных отношений службы FreeIPA уже установлены и запущены, настройка FreeIPA выполнялась по инструкции Контроллер ЕПП FreeIPA в Astra Linux с помощью инструментов fly-admin-freeipa-server или astra-freeipa-server. Если настройка FreeIPA выполнялась иным способом, то необходимо убедиться, что установлен пакет freeipa-server-trust-ad (установить его).

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

FreeIPA: Включение доверительных отношений 

Полномочия администратора

Получаем полномочия администратора домена, и, заодно, проверяем работоспособность служб FreeIPA. Следующие команды на сервере FreeIPA должны выполняться без ошибок:

kinit admin
id admin
getent passwd admin

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

Включение службы доверительных отношений

После установки службы доверительных отношений чтение конфигурации samba на сервере будет доступно только суперпользователю. Обращения к Samba от имени простых пользователей, выполняемые на сервере, работать не будут.
Если команда ipa-adtrust-install недоступна, то необходимо установить пакет freeipa-server-trust-ad.

Включаем службу доверительных отношений во FreeIPA командой:

sudo ipa-adtrust-install

После запуска команды:

  1. На все вопросы ответить «да» («y»), несмотря на то, что по умолчанию там «нет».
  2. Ввести пароль администратора домена IPA.
  3. Проверить правильность автоматического определения доменного имени, и нажать Enter.
  4. Еще раз ответить «y».

Настройка и проверка перенаправления DNS

Добавление зоны перенаправления осуществляется командой:

  • На сервере FreeIPA:

    ipa dnsforwardzone-add <имя_домена_Windows_AD> --forwarder=<IP-адрес_сервера_AD> --forward-policy=only

  • На сервере Windows AD:

    dnscmd 127.0.0.1 /ZoneAdd <имя_домена_FreeIPA> /Forwarder <IP-адрес_сервера_FreeIPA>

При выполнении команды на сервере FreeIPA проверяется корректность работы добавляемого сервера перенаправления. Если на сервере FreeIPA включена проверка подписей DNS (включена по умолчанию в Astra Linux Special Edition x.7), а зона DNS в Windows AD не подписана, то будет выдано предупреждение "ipa: WARNING: Сбой проверки DNSSEC: запись "... SOA" не прошла проверку DNSSEC на сервере ..." и перенаправление имен работать не будет. В этом случае:

  1. На сервере Windows AD подписать зону DNS, для чего открыть консоль AD DNS, выбрать необходимую зону нажатием правой кнопки мыши и выбрать DNSSEC - Подписать зону - Использовать рекомендуемые параметры.
  2. На сервере FreeIPA получить от сервера Windows AD параметры ключей:

    dig dnskey windomain.ad. @<IP-адрес_Windows_AD> +noall +answer
    Пример ответа:

    ; <<>> DiG 9.11.3-1ubuntu1.11-Debian <<>> dnskey srv.rbt. @10.7.21.21 +noall +answer
    ;; global options: +cmd  
    windomain.ad.               3600    IN      DNSKEY  256 3 8 AwEAAcaRV/UHxAmt2ESvWxGHgoIgtEasYABj5i4kJfcs+Tiuy+jbTgKf kZx8LDyTBAIEC9ZX8en1R1ZNzUS1T1xZKGJ2IHqJU2BobiIQ0qFVSDLL 0+GbOCLP7npDB0OPhqgOcaF8j3m2+TtP2ssqaGbPrT5Ya+nkRwr0G6ik e3m6uTRD  
    windomain.ad.               3600    IN      DNSKEY  256 3 8 AwEAAZIBjJ7fkvuDTvuPBNA9K8glJhp1Kf8SJ2Ppchq2bpE7W/6hVxqP zdnrpjaaPYSxuIMQFqIRz2QtkJ1VHkLdnzOm6Tpa4Wsr+dX5XUUTkV72 k4Hl+QVKPCGpthqIb8j60kYa7PXRKMDv4Jw+U96YsQbA621/M10/8UZB bD3iJ0x9  
    windomain.ad.               3600    IN      DNSKEY  257 3 8 AwEAAa+KDuNaIQ5ChuMYDIS4Y6GQtXiQJ1qtU7+CDwn2zgVPyoqi1DLc l8IIWyGRDsGU2NUXnem704dwghGpUQ9XbzJCKzueC/dQSUS5mdZjhvrm +/knsCizku7/0x5B9U3Kj911pAe5CPUY7r1dKQtYYINiAmnJprIuUbBs jogC4IYTA6mMmEW2cvOmuNfpAB4IxnFZLmXA4lE0DR3JCVLsnxQ20Gq1 TErWSd7st458RKPp4mEt1mU2JYWltJYA82lp0WLqXOO1B/ievLWESnvH oyGclg0lzm4LHc9Opd3zNRQYea4IFN2WHXIkOThqlA291Gw4gw85eBhs xdNpd2dDHts=  
    windomain.ad.               3600    IN      DNSKEY  257 3 8 AwEAAb6hMq89Tf4Cf5ND6R/R8FYcbHd5uyxUo2pOlvLkw8VWL1/Ix8Xp abymJ6a8lMKU39CKfp/lxMxWbPicOpT72vnoDhfbck9O17EwI40PmMI3 51acR5EtdQwtwz44aNmO7QlXSdYJLYrvEq76M3jn2O1wFgb+oSQZFA2U 9b9/ssc8uBzLuCMC7DbHFU7V4hb36LlheqnNecYti1Og5MckEfU01MCg SwoNBd1pkyi+S5hszIaSI5Q28DVBA/lDdF7zRIFlvs7DdAwPdrODhx/o QjN40cQZj+DAVeR/vZnGUK+lBQ+gXTjOqfECJKyVOuljzL+IwBb74xzO 9c1Nl0/Uz+E=
    CODE
  3. Добавить в конец файла /etc/bind/bind.keys перед закрытием секции managed-keys два последних полученных ключа и привести их в корректный формат по аналогии с уже имеющимися там ключами: в полученных ключах заменить пробел на перенос на новую строку. Сам ключ должен быть заключен в двойные кавычки и завершен точкой с запятой. Пример:    

    windomain.ad. initial-key 257 3 8 "AwEAAa+KDuNaIQ5ChuMYDIS4Y6GQtXiQJ1qtU7+CDwn2zgVPyoqi1DLc
            l8IIWyGRDsGU2NUXnem704dwghGpUQ9XbzJCKzueC/dQSUS5mdZjhvrm
            +/knsCizku7/0x5B9U3Kj911pAe5CPUY7r1dKQtYYINiAmnJprIuUbBs
            jogC4IYTA6mMmEW2cvOmuNfpAB4IxnFZLmXA4lE0DR3JCVLsnxQ20Gq1
            TErWSd7st458RKPp4mEt1mU2JYWltJYA82lp0WLqXOO1B/ievLWESnvH
            oyGclg0lzm4LHc9Opd3zNRQYea4IFN2WHXIkOThqlA291Gw4gw85eBhs
            xdNpd2dDHts=";
    windomwin.ad. initial-key 257 3 8 "AwEAAb6hMq89Tf4Cf5ND6R/R8FYcbHd5uyxUo2pOlvLkw8VWL1/Ix8Xp
            abymJ6a8lMKU39CKfp/lxMxWbPicOpT72vnoDhfbck9O17EwI40PmMI3
            51acR5EtdQwtwz44aNmO7QlXSdYJLYrvEq76M3jn2O1wFgb+oSQZFA2U
            9b9/ssc8uBzLuCMC7DbHFU7V4hb36LlheqnNecYti1Og5MckEfU01MCg
            SwoNBd1pkyi+S5hszIaSI5Q28DVBA/lDdF7zRIFlvs7DdAwPdrODhx/o
            QjN40cQZj+DAVeR/vZnGUK+lBQ+gXTjOqfECJKyVOuljzL+IwBb74xzO
            9c1Nl0/Uz+E=";
    CODE
  4. После внесение изменений перезапустить службу bind9-pkcs11:

    sudo systemctl restart bind9-pkcs11

Проверки успешного выполнения настройки перенаправления.

Проверки на сервере FreeIPA:

  • Проверка #1, сервер должен быть доступен по его имени:

    ping -c 3 winserver.windomain.ad

  • Проверка #2, доменная служба должна быть доступна:

    dig SRV _ldap._tcp.ipadomain.ipa

  • Проверка #3, доменная служба должна быть доступна:

    dig SRV _ldap._tcp.windomain.ad

  • Проверка #4, работоспособность службы samba

    Использование ключа -k налагает обязательное условие:
    команда должна выполняться из сессии (от имени) пользователя, на которого был получен билет Kerberos. При этом, как указано выше, обращения к samba от имени непривилегированных пользователей не работают.
    Например, если из сессии локального пользователя localadmin получить билет kinit admin@ipadomain.ipa, а потом попробовать выполнить команду smbclient с опцией -k, результатом будет ошибка доступа, так как localadmin не имеет билета Kerberos.
    Если команда выполняется от имени пользователя admin@ipadomain.ipa (доменного администратора) - опять будет ошибка, так как пользователь admin не является суперпользователем.

    При этом на других (клиентских) компьютерах привилегии суперпользователя для выполнения обращений к samba не требуются.

    Последовательность действия для проверки:
     - получить принципал admin (администратора домена) для суперпользователя;
     - войти в сессию пользователя admin, что позволит использовать принципал admin;
     - выполнить команду с правами суперпользователя, чтобы получить доступ к конфигурации samba.
    Последовательность команд для сессии локального администратора (команды должны выполнятся в единой сессии):

    sudo login admin
    kinit
    smbclient -k -L ipaserver.ipadomain.ipa
    exit
    Последовательность команд для сессии доменного администратора (admin):
    sudo kinit
    sudo smbclient -k -L ipaserver.ipadomain.ipa

Проверки на сервере Windows AD (команды выполняются в PowerShell):

Resolve-DnsName -Name _ldap._tcp.ipadomain.ru -Type any
Resolve-DnsName -Name _ldap._tcp.Default-First-Site-Name._sites.dc._msdcs.ipadomain.ru -Type any
Далее аналогично (из login-сессии локального администратора или из сессии администратора домена с использованием sudo) должна выполняться команда установления доверительных отношений.

Установление доверительных отношений между доменами

Устанавливаем одностороннее доверительное отношение, т.е. одностороннее доверие к Active Directory, при котором:

  • область FreeIPA доверяет лесу доменов Active Directory, используя механизм доверительных отношений между деревьями доменов AD;
  • дерево доменов AD не доверяет области FreeIPA;
  • пользователи дерева доменов AD получают доступ к ресурсам области FreeIPA.

Команда установления доверительных отношений должна выполняться на сервере (сервере-реплике) FreeIPA из сессии локального или доменного администратора (при включенном МКЦ - администратора с высоким уровнем целостности) с использованием sudo (см. выше пример проверки доступа к samba). Пример команды:

sudo ipa trust-add --type=ad <имя_домена_Windows_AD> --admin <имя_администратора_домена_Windows_AD>
в ходе выполнения команды потребуется ввести пароль администратора домена Windows AD.

Для проверки результатов установления доверительных отношений можно использовать команды:

  • получение списка доверенных доменов:

    ipa trust-fetch-domains <имя_домена_Windows_AD>

  • поиск домена, домен должен быть найден:

    ipa trustdomain-find <имя_домена_Windows_AD>

Добавление групп пользователей

  • Для англоязычного варианта сервера:

    ipa group-add --desc='ad domain external map' ad_admins_external --external
    ipa group-add --desc='ad domain users' ad_admins
    ipa group-add-member ad_admins_external --external 'windomain.ad\Domain Admins'
    (на запросы «member_user» и «member_group» просто нажать «ввод»)
    ipa group-add-member ad_admins --groups ad_admins_external

  • Для русскоязычного варианта сервера:

    ipa group-add --desc='ad domain external map' ad_admins_external --external
    ipa group-add --desc='ad domain users' ad_admins
    ipa group-add-member ad_admins_external --external 'windomain.ad\Администраторы домена'
    (на запросы «member_user» и «member_group» просто нажать «ввод»)
    ipa group-add-member ad_admins --groups ad_admins_external

Получение идентификатора безопасности пользователей AD

на сервере AD командой из оболочки CMD (но не из оболочки PowerShell!):

c:\> wmic useraccount get name,sid

на сервере IPA:

ipa group-show ad_admins_external --raw

Добавление разделяемого каталога

Добавление разделяемого каталога /share_dir, доступного для пользователей AD под именем «share_name»:

sudo mkdir /share_dir
sudo net conf setparm 'share_name' 'comment' 'Trust test share'
sudo net conf setparm 'share_name' 'read only' 'no'
sudo net conf setparm 'share_name' 'valid users' "@ad_admins"
sudo net conf setparm 'share_name' 'path' '/share_dir'
Проверить, что ресурс добавлен, можно командой:
smbclient -k -L ipaserver.ipadomain.ipa
После добавления можно проверить, что ресурс доступен с сервера AD winserver.

Авторизация пользователей AD

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

При этом, идентификатор пользователя должен быть указан в виде <идентификатор_пользователя_AD>@<имя_домена>, где имя домена должно быть указано строчными буквами, например, winuser@windomain.ad.

С учетом того, что пользователи Windows привыкли к тому, что Windows во многих случаях не различает строчные и заглавные буквы, можно выполнить дополнительные настройки рабочей станции, позволяющие указывать имя домена AD также и заглавными буквами. Для этого на рабочей станции, на которой будет осуществляться авторизация, добавить в файл /etc/krb5.conf в секцию [realms] два параметра:

[realms]
IPADOMAIN.IPA = {
.....

auth_to_local = RULE:[1:$1@$0](^.*@WINDOMAIN.AD$)s/@WINDOMAIN.AD/@windomain.ad/
auth_to_local = DEFAULT

.....
}

Далее можно будет входить на эту рабочую станцию с указанием идентификатора пользователя в виде <идентификатор_пользователя_AD>@<ИМЯ_ДОМЕНА_AD>где <ИМЯ_ДОМЕНА_AD> может быть написано либо строчными, либо заглавными буквами, например: winuser@WINDOMAIN.AD.