- Создатель Александр Левдонский, отредактировано 03.10.23
Данная статья применима к:
- 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 могут быть разные справочники мандатных атрибутов, что может позволить клиенту получать доступ к конфиденциальным данным, не соответствующим его уровню допуска;
Исходные данные
Стенд состоит из четырёх компьютеров:
- Контроллер домена 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 install ssh
sudo systemctl enable --now ssh
Настройка DNS
В первую очередь клиент "основного" домена должен получить доступ к разрешению IP-адресов "чужого" домена.
Проще всего это сделать, добавив зону перенаправления DNS в службу разрешения имён "основного" домена.
Эта операция выполняется на контроллере "основного" домена.
Добавление зоны перенаправления можно сделать через WEB-интерфейс FreeIPA:
- "Сетевые службы" - "DNS" - "Зоны перенаправления DNS" - "Добавить";
- В качестве имени зоны указать имя "чужого" домена и точка в конце (ipadomain1.ru.) ;
- В поле "Перенаправители зон" добавить IP-адрес контроллера "чужого" домена (в примере - 10.0.2.110).
Или из командной строки на "основном" контроллере домена (тут точку к имени добавлять не нужно):
ipa dnsforwardzone-add ipadomain1.ru --forward-policy=first --forwarder=10.0.2.110
Проверка
Если всё сделано правильно, то на компьютерах, входящих в "основной" домен можно будет получить IP-адреса серверов и служб "чужого" домена, использовав для этого, например, команду host:
или (если установлен пакет dnsutils) разные варианты команды dig:
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 сделать это можно командой:
В конфигурации 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:
Проверка
Если всё сделано правильно, то служба 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:
ipadomain0.ru
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/ca-bundle.pem /var/lib/ipa-client/pki/ca-bundle-other.pem
Проверка
Если всё сделано правильно, то на клиенте "основного" домена можно будет получать билеты Kerberos как "основного", так и "чужого" доменов:
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
Для того, чтобы "чужой" контроллер домена выдавал хосту информацию, необходимо
Зарегистрировать этот хост на "чужом" контроллере домена. Это можно сделать через WEB-интерфейс контроллера: "Идентификация" - "Узлы" - "Добавить", или из командной строки на "чужом" контроллере домена:
kinit adminВ общем случае клиентская машина не имеет постоянного IP-адреса, поэтому регистрируем хост без IP-адреса (опция --force).
ipa host-add hostx.ipadomain1.ru --forceНа хосте в таблицу ключей добавить ключ 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, которая теперь сможет предъявить ключ хоста, и получить доступ к информации о домене:
Проверка
Запись про наличие ключа появится в записи о хосте в WEB-интерфейсе "чужого" сервера, также наличие ключа можно проверить выполнением на самом хосте команды:
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
2 host/host0.ipadomain0.ru@IPADOMAIN0.RU
3 host/hostx.ipadomain1.ru@IPADOMAIN1.RU
Если всё сделано правильно, то теперь статус домена в sssd должет быть "Online":
Online status: Online
Active servers:
IPA: ipa0.ipadomain1.ru
Discovered IPA servers:
- ipa0.ipadomain1.ru
- ipa0.ipadomain1.ru
uid=96001(ipauser01) gid=96001(ipauser01) группы=96001(ipauser01)
uid=312001(ipauser11) gid=312001(ipauser11) группы=312001(ipauser11)
Диагностика проблем
В случае возникновения проблем с подключением следует включить отладочную диагностику в службе sssd, для чего добавить параметр
в секцию настроек "чужого" домена в конфигурационном файле /etc/sssd/sssd.conf и перезапустить службу sssd. Отладочную информацию искать в каталоге /var/log/sssd в файле с названием, сответствующим имени домена.
Включить добавочную диагностику при получении билетов Kerberos командой kinit можно так: