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

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

Ключ

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

Оглавление


Информация
titleДанная статья применима к:
  • 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 могут быть разные справочники мандатных атрибутов, что может позволить клиенту получать доступ к конфиденциальным данным,
нес
  • не соответствующим его уровню допуска;
Информация

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

  • ОС ОН Орёл 2.12
  • ОС СН Смоленск 1.6
  • ОС СН Ленинград 8.1


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

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

    • Контроллер домена 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 update
      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:

    host ipa0.ipadomain1.ru
    Информация
    Command

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



    Настройка sssd

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

    Кроме того, из "чужого" контроллера домена нужно скопировать файл сертификата /etc/ipa/ca.crt. В примере ниже он скопирован в файл /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 ) можно указать отдельное имя хоста, которое будет применяться в "чужом" домене (параметр 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.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: Offline

    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