Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление


Информация
titleДанная статья применима к:
  • ОС ОН Орёл 2.12
  • ОС СН Смоленск 1.6
  • ОС СН Ленинград 8.1

Ограничения и нерешённые вопросы

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
  • Astra Linux Special Edition РУСБ.10015-17
  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1
  • Astra Linux Special Edition РУСБ.10015-16 исп. 2
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
  • Astra Linux Common Edition 2.12



Предупреждение

При вводе клиента в несколько доменов необходимо помнить, что:

  • В этих доменах могут быть пересекающиеся диапазоны пользовательских идентификаторов, что может позволить клиенту получать доступ к чужим данным;
  • В разных доменах под управлением Astra Linux Special Edition могут быть разные справочники мандатных атрибутов, что может позволить клиенту получать доступ к конфиденциальным данным, не соответствующим его уровню допуска;
Не удалось настроить трансляцию доменных имён Kerberos. Билеты от чужого домена удалось получить только по имени реалма Kerberos (IPADOMAIN1.RU), но не по имени домена (ipadomain1.ru).


Исходные данные

Стенд состоит из трёх четырёх компьютеров:

  • Контроллер домена ipa0.ipadomain0.ru с IP-адресом 100.0.2.100. Это будет "основной" домен;
    • Клиент host0.ipadomain0.ru в "основном" домене ipadomain0.ru. В "чужом" домене этот клиент будет зарегистрирован под именем hostx.ipadomain1.ru;
  • Контроллер домена ipa0.ipadomain1.ru с IP-адресом 100.0.2.110. Это будет "чужой" домен;
    • Клиент host0.ipadomain1.ru в "чужом" домене ipadomain1.ru. С этого клиента будем копировать конфигурационные файлы. В принципе, конфигурационные файлы можно копировать и не с клиентской машины, а непосредственно с контроллера домена, но они могут отличаться от клиентских;

Обратите внимание - имена хостов, находящихся в  разных доменах (host0), в данном примере совпадают. Использовать одинаковые имена не обязательно, более того, это может быть нежелательно. Далее будет показано, как обойти возможный конфликт имён.

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

  • Пакеты dnsutils  и sssd-tools для проверки корректности работы сервиса разрешения имён (DNS) и сервиса SSSD:

    Command
    sudo apt install dnsutils sssd-tools


  • Службу ssh, которая позволит копировать файлы между машинами из командной строки:

    Command
    sudo apt install ssh
    sudo systemctl enable --now ssh




Настройка DNS

В первую очередь клиент "основного" домена должен получить доступ к разрешению IP-адресов "чужого" домена.

Проще всего это сделать, добавив зону перенаправления DNS в службу разрешения имён "основного" домена.

Эта операция выполняется на контроллере "основного" домена.

Добавление зоны перенаправления Это можно сделать через WEB-интерфейс FreeIPA:

  • "Сетевые службы" - "DNS" - "Зоны перенаправления DNS" - "Добавить";
  • В качестве имени зоны указать имя "чужого" домена и точка в конце (ipadomain1.ru.) ;
  • В поле "Перенаправители зон" добавить IP-адрес контроллера "чужого" домена (в примере - 10.0.2.110).

Или из командной строки на "основном" контроллере домена (тут точку к имени добавлять не нужно):

Command
kinit admin
ipa dnsforwardzone-add ipadomain1.ru --forward-policy=first --forwarder=10.0.2.110

Проверка

Если всё сделано правильно, то на компьютерах, входящих в "основной" домен можно будет получить IP-адреса сервров серверов и служб "чужого" домена", использовав для этого, например, командой команду host:

Command

host ipa0.ipadomain1.ru

или (если установлен пакет dnsutils) разные варианты команды dig:

Информацияcommand

dig ipadomain1.ru
dig ipa0.ipadomain1.ru
dig SRV _ldap._tcp.ipadomain1.ru
dig SRV _kerberos._tcp.ipadomain1.ru



Настройка

клиента Kerberos

sssd

Выполнить настройку SSSD в "основном" домене проще всего скопировав секцию параметров домена из конфигурации SSSD Конфигурацию клиента Kerberos так же проще всего настроить скопировав соответствующую секцию из конфигурационого файла /etc/krb5.conf "чужого" домена.

Кроме этоготого, из "чужого" контроллера домена нужно скопировать файлы сертификатов:

/var/lib

файл сертификата /etc/ipa

-client

/

pki/kdc-

ca

-bundle.pem
  • /var/lib/ipa-client/pki/ca-bundle.pem
  • .crt. В примере ниже они скопирован в файлы:

    • /var/lib/ipa-client/pki/kdc-ca-bundle-other.pem
    • /var/lib/ipa-client/pki/ca-bundle-other.pem

    В результате файл /etc/krb5.conf должен выглядеть примерно так:

    Информация

    includedir /etc/krb5.conf.d/
    includedir /var/lib/sss/pubconf/krb5.include.d/

    [logging]
        default = FILE:/var/log/krb5libs.log
        kdc = FILE:/var/log/krb5kdc.log
        admin_server = FILE:/var/log/kadmind.log

    [libdefaults]
        default_realm = IPADOMAIN0.ru
        dns_lookup_realm = false
        dns_lookup_kdc = true
        rdns = false
        ticket_lifetime = 24h
        forwardable = true
        udp_preference_limit = 0
        pkinit_kdc_hostname = ipa0.ipadomain0.ru
        pkinit_eku_checking = none
        default_ccache_name = KEYRING:persistent:%{uid}

    [realms]
        IPADOMAIN0.ru = {
           kdc = ipa0.ipadomain0.ru:88
           master_kdc = ipa0.ipadomain0.ru:88
           admin_server = ipa0.ipadomain0.ru:749
           default_domain = ipadomain0.ru
           pkinit_anchors = FILE:/var/lib/ipa-client/pki/kdc-ca-bundle.pem
           pkinit_pool = FILE:/var/lib/ipa-client/pki/ca-bundle.pem
        }

        IPADOMAIN1.ru = {
           kdc = ipa1.ipadomain1.ru:88
           master_kdc = ipa1.ipadomain1.ru:88
           admin_server = ipa1.ipadomain1.ru:749
           default_domain = ipadomain1.ru
           pkinit_anchors = FILE:/var/lib/ipa-client/pki/kdc-ca-bundle-other.pem
           pkinit_pool = FILE:/var/lib/ipa-client/pki/ca-bundle-other.pem
        }

    он скопирован в файл /etc/ipa/ca-other.crt.
    Если на контроллере "чужого" домена запущена служба ssh сделать это можно командой:

    Command
    sudo scp -q admin@ipa0.ipadomain1.ru:/etc/ipa/ca.crt /etc/ipa/ca-other.crt


    В конфигурации sssd (файл /etc/sssd/sssd.conf ) можно указать отдельное имя хоста, которое будет

    [domain_realm]
        .ipadomain0.ru = IPADOMAIN0.ru
        ipadomain0.ru = IPADOMAIN0.ru
        ipa0.ipadomain0.ru = IPADOMAIN0.ru
        .ipadomain1.ru = IPADOMAIN1.ru
        ipadomain1.ru = IPADOMAIN1.ru
        ipa1.ipadomain1.ru = IPADOMAIN1.ru

    [dbmodules]
        IPADOMAIN0.ru = {
           db_library = ipadb.so
        }

    [plugins]
        certauth = {
        module = ipakdb:kdb/ipadb.so
        enable_only = ipakdb
    }

    Проверка

    Если всё сделано правильно, то на клиенте "основного" домена можно будет получать билеты Kerberos как "основного", так и "чужого" доменов:

    Информация
    kinit admin@IPADOMAIN1.RU

    Регистрация клиента в чужом домене

    Зарегистрировать хост на "чужом" контроллере домена. Это можно сделать через WEB-интерфейс контроллера: "Идентификаци" - "Узлы" - "Добавить".
    Или из командной строки на "чужом" контроллере домена:

    Command
    kinit admin
    ipa host-add hostX.ipadomain1.ru

    Получить ключ Kerberos для нового хоста:

    Command
    sudo kinit admin@IPADOMAIN1.RU
    sudo ipa-getkeytab -k /etc/krb5.keytab -s ipa0.ipadomain1.ru -p host/hostX.ipadomain1.ru@IPADOMAIN1.RU --cacert=/var/lib/ipa-client/pki/ca-bundle-other.pem
    где:
    -k /etc/krb5.keytab - таблица ключей, к которой будет добавлен новый ключ;
    -s ipa0.ipadomain1.ru - "чужой" сервер, от которого получаем ключ;
    -p host/hostX.ipadomain1.ru@IPADOMAIN1.RU - принципал, для котрого получаем ключ;
    --cacert=/var/lib/ipa-client/pki/ca-bundle-other.pem - "чужой" сертификат, который используем для подключения к "чужому" Kerberos.

    Проверка

    Если всё сделано правильно, то запись про новый ключ появится в WEB-интерфейсе "чужого" сервера, а сам ключ можно посмотреть командой:

    Command
    Titlesudo klist -k /etc/krb5.keytab
    Keytab name: FILE:/etc/krb5.keytab
    KVNO Principal
    ---- --------------------------------------------------------------------------
    2 host/host0.ipadomain0.ru@IPADOMAIN0.RU
    3 host/hostX.ipadomain1.ru@IPADOMAIN1.RU

    Настройка sssd

    Выполнить настройку SSSD в "основном" домене проще всего скопировав секцию параметров домена из конфигурации SSSD "чужого" домена.

    Кроме того, из чужого домена нужно скопировать файл сертификата /etc/ipa/ca.crt. В примере ниже он скопирован в файл /etc/ipa/ca-other.crt.

    В конфигурации следует указать корректное имя, которое должно применяться в "чужом" домене (параметр ipa_hostname в секции "чужого" домена. В примере имя хоста host0 подменяется на имя hostx).

    Если используется конфигурация sssd, скопированная не с "чужого" клиента, а  с"чужого" контроллера домена, то убрать параметр "ipa_server_mode = True" и в записи имён добавить параметр  "_srv_".

    В секцию [sssd] добавить имя "чужого" домена.

    Ниже примерный вид конфигурации, добавленные и изменённые параметры выделены шрифтом:

    Информация

    [domain/ipadomain0.ru]
        cache_credentials = True
        krb5_store_password_if_offline = True
        ipa_domain = ipadomain0.ru
        id_provider = ipa
        auth_provider = ipa
        access_provider = ipa
        ipa_hostname = _srv_, host0.ipadomain0.ru
        chpass_provider = ipa
        ipa_server = ipa0.ipadomain0.ru
        default_shell = /bin/bash
        ldap_tls_cacert = /etc/ipa/ca.crt

    [domain/ipadomain1.ru]
        cache_credentials = True
        krb5_store_password_if_offline = True
        ipa_domain = ipadomain1.ru
        id_provider = ipa
        auth_provider = ipa
        access_provider = ipa
        ipa_hostname = hostX hostx.ipadomain1.ru
        chpass_provider = ipa
        ipa_server = _srv_, ipa0.ipadomain1.ru
        default_shell = /bin/bash
        # ipa_server_mode = True # убрать если такая запись есть
        ldap_tls_cacert = /etc/ipa/ca-other.crt

    [sssd]
    services = sudo, nss, ifp, pam, ssh
    domains = ipadomain0.ru, ipadomain1.ru

    [nss]
    memcache_timeout = 600
    homedir_substring = /home

    [pam]

    [sudo]

    [autofs]

    [ssh]

    [pac]

    [ifp]
    allowed_uids = 0, 33, 114, 999

    [secrets]

    [session_recording]


    После внесения изменений в конфигурационный файл перезапустить службу sssd:

    Command
    sudo systemctl restart sssd

    Проверка

    Если всё сделано правильно, то служба sssd должна перезапуститься без ошибок и начать обслуживать два домена:

    Command
    Titlesudo systemctl status sssd

    ● sssd.service - System Security Services Daemon
    Loaded: loaded (/lib/systemd/system/sssd.service; enabled; vendor preset: enabled)
    Active: active (running) since Thu 2020-02-06 13:45:07 MSK; 14min ago
    Main PID: 5601 (sssd)
    Tasks: 9 (limit: 4915)
    CGroup: /system.slice/sssd.service
    ├─5601 /usr/sbin/sssd -i --logger=files
    ├─5603 /usr/lib/x86_64-linux-gnu/sssd/sssd_be --domain ipadomain0.ru --uid 0 --gid 0 --logger=files
    ├─5604 /usr/lib/x86_64-linux-gnu/sssd/sssd_be --domain ipadomain1.ru --uid 0 --gid 0 --logger=files
    ├─5605 /usr/lib/x86_64-linux-gnu/sssd/sssd_sudo --uid 0 --gid 0 --logger=files
    ├─5606 /usr/lib/x86_64-linux-gnu/sssd/sssd_nss --uid 0 --gid 0 --logger=files
    ├─5607 /usr/lib/x86_64-linux-gnu/sssd/sssd_ifp --uid 0 --gid 0 --logger=files
    ├─5608 /usr/lib/x86_64-linux-gnu/sssd/sssd_pam --uid 0 --gid 0 --logger=files
    ├─5609 /usr/lib/x86_64-linux-gnu/sssd/sssd_ssh --uid 0 --gid 0 --logger=files
    └─5610 /usr/lib/x86_64-linux-gnu/sssd/sssd_pac --uid 0 --gid 0 --logger=files


    Если установлен пакет sssd-tools, то можно использовать команду sssctl:

    Command
    Titlesudo sssctl domain-list
    ipadomain0.ru
    ipadomain1.ru


    Command
    Titlesudo sssctl domain-status ipadomain1.ru

    Online status: OnlineOffline

    Active servers:
    IPA: ipa1.ipadomain1.ru

    Discovered IPA servers:
    - ipa1.ipadomain1.ru
    - ipa1.ipadomain1.ru

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


    Настройка Kerberos-авторизации хоста

    Для настройки авторизации клиента через Kerberos нужно из "чужого" домена скопировать файлы сертификатов "чужого" домена, чтобы предъявлять их при подключении к этому домену. Это файлы:

    • /var/lib/ipa-client/pki/kdc-ca-bundle.pem
    • /var/lib/ipa-client/pki/ca-bundle.pem

    В примере ниже сертификаты скопирован в файлы:

    • /var/lib/ipa-client/pki/kdc-ca-bundle-other.pem
    • /var/lib/ipa-client/pki/ca-bundle-other.pem

    Если на клиенте в "чужом" домене запущена служба ssh, то файлы можно скопировать командами:

    Command

    sudo scp -q admin@host0.ipadomain1.ru:/var/lib/ipa-client/pki/kdc-ca-bundle.pem /var/lib/ipa-client/pki/kdc-ca-bundle-other.pem
    sudo scp -q admin@host0.ipadomain1.ru:/var/lib/ipa-client/pki/ca-bundle.pem /var/lib/ipa-client/pki/ca-bundle-other.pem

    Проверка

    Если всё сделано правильно, то на клиенте "основного" домена можно будет получать билеты Kerberos как "основного", так и "чужого" доменов:

    Command
    kinit admin@IPADOMAIN1.RU

    При этом можно одновременно иметь билеты двух доменов:

    Command
    Titlesudo klist -A

    Ticket cache: KEYRING:persistent:0:krb_ccache_cY1rfoy
    Default principal: admin@IPADOMAIN1.RU

    Valid starting Expires Service principal
    07.02.2020 11:17:51 08.02.2020 11:15:20 ldap/ipa0.ipadomain1.ru@IPADOMAIN1.RU
    07.02.2020 11:17:51 08.02.2020 11:15:20 ldap/ipa0.ipadomain1.ru@
    07.02.2020 11:16:45 08.02.2020 11:15:20 host/host0.ipadomain1.ru@IPADOMAIN1.RU
    07.02.2020 11:16:45 08.02.2020 11:15:20 host/host0.ipadomain1.ru@
    07.02.2020 11:15:22 08.02.2020 11:15:20 krbtgt/IPADOMAIN1.RU@IPADOMAIN1.RU

    Ticket cache: KEYRING:persistent:0:0
    Default principal: admin@IPADOMAIN0.RU

    Valid starting Expires Service principal
    07.02.2020 11:07:04 08.02.2020 11:07:04 krbtgt/IPADOMAIN0.RU@IPADOMAIN0.RU




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

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

    1. Зарегистрировать этот хост на "чужом" контроллере домена. Это можно сделать через WEB-интерфейс контроллера: "Идентификация" - "Узлы" - "Добавить", или из командной строки на "чужом" контроллере домена:

      Command
      kinit admin
      ipa host-add hostx.ipadomain1.ru --force

      В общем случае клиентская машина не имеет постоянного IP-адреса, поэтому регистрируем хост без IP-адреса (опция --force). 

    2. На хосте в таблицу ключей добавить ключ Kerberos для "чужого" домена:

      Command
      sudo kinit admin@IPADOMAIN1.RU
      sudo ipa-getkeytab -k /etc/krb5.keytab -s ipa0.ipadomain1.ru -p host/hostx.ipadomain1.ru@IPADOMAIN1.RU --cacert=/var/lib/ipa-client/pki/ca-bundle-other.pem

      где:
      -k /etc/krb5.keytab - таблица ключей, к которой будет добавлен новый ключ;
      -s ipa0.ipadomain1.ru - "чужой" сервер, от которого получаем ключ;
      -p host/hostX.ipadomain1.ru@IPADOMAIN1.RU - принципал, для которого получаем ключ;
      --cacert=/var/lib/ipa-client/pki/ca-bundle-other.pem - скопированный с "чужого" клиента "чужой" сертификат, который используем для подключения к "чужому" Kerberos.

    После того, как хост зарегистрирован в Kerberos и получил ключ, следует перезапустить службу sssd, которая теперь сможет предъявить ключ хоста, и получить доступ к информации о домене:

    Command
    sudo systemctl restart sssd

    Проверка

    Запись про наличие  ключа появится в записи о хосте  в WEB-интерфейсе "чужого" сервера, также наличие ключа можно проверить выполнением на самом хосте команды:

    Command
    Titlesudo klist -k /etc/krb5.keytab
    Keytab name: FILE:/etc/krb5.keytab
    KVNO Principal
    ---- --------------------------------------------------------------------------
    2 host/host0.ipadomain0.ru@IPADOMAIN0.RU
    3 host/hostx.ipadomain1.ru@IPADOMAIN1.RU

    Если всё сделано правильно, то теперь статус домена в sssd должет быть "Online":

    Command
    Titlesudo sssctl domain-status ipadomain1.ru

    Online status: Online

    Active servers:
    IPA: ipa0.ipadomain1.ru

    Discovered IPA servers:
    - ipa0.ipadomain1.ru
    - ipa0.ipadomain1.ru

    Кроме того, теперь можно получать информацию о клиентах разных доменов. Клиент "основного" домена ipadomain0.ru:

    Command
    Titleid ipauser01
    uid=96001(ipauser01) gid=96001(ipauser01) группы=96001(ipauser01)

    Клиент "чужого" домена ipadomain1.ru:

    Command
    Titleid ipauser11
    uid=312001(ipauser11) gid=312001(ipauser11) группы=312001(ipauser11)

    И, после всего этого, должен стать возможен вход пользователей "чужого" домена.


    Диагностика проблем

    В случае возникновения проблем с подключением следует включить отладочную диагностику в службе sssd, для чего добавить параметр

    Информация
    debug_level = 0x37F0

    в секцию настроек "чужого" домена в конфигурационном файле /etc/sssd/sssd.conf и перезапустить службу sssd. Отладочную информацию искать в каталоге /var/log/sssd в файле с названием, сответствующим имени домена.

    Включить добавочную диагностику при получении билетов Kerberos командой kinit можно так:

    Command
    KRB5_TRACE=/dev/stdout kinit -V admin@IPADOMAIN1.RU