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

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 8 Следующий »

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

  • В этих доменах могут быть пересекающиеся диапазоны пользовательских идентификаторов, что может позволить клиенту получать доступ к чужим данным;
  • В разных доменах под управлением ОС СН могут быть разные справочники мандатных атрибутов, что может позволить клиенту получать доступ к данным, нес соответствующим его уровню допуска;


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

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

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

  1. Не удалось настроить трансляцию доменных имён 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:

    sudo apt install dnsutils sssd-tools

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

    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).

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

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

Проверка

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

host ipa0.ipadomain1.ru
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 сделать это можно командой:

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

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

Если используется конфигурация 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:

sudo systemctl restart sssd

Проверка

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

sudo 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:

sudo sssctl domain-list

ipadomain0.ru
ipadomain1.ru


sudo 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, то файлы можно скопировать командами:

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 как "основного", так и "чужого" доменов:

kinit admin@IPADOMAIN1.RU

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

sudo 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-интерфейс контроллера: "Идентификация" - "Узлы" - "Добавить", или из командной строки на "чужом" контроллере домена:

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

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

    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, которая теперь сможет предъявить ключ хоста, и получити доступ к информации о домене:

sudo systemctl restart sssd

Проверка

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

sudo 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":

sudo 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:
id ipauser01

uid=96001(ipauser01) gid=96001(ipauser01) группы=96001(ipauser01)
Клиент "чужого" домена ipadomain1.ru:
id ipauser11

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


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

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

debug_level = 0x37F0

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

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

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



  • Нет меток