Конечная цель проектов импортозамещения в ИТ — полный отказ от операционной системы Windows. Но, как говорится, гладко было на бумаге, да забыли про овраги. Может так оказаться, что быстро заменить какие-то клиентские корпоративные приложения, написанные под эту операционную систему, не получится. В этом случае вам может пригодиться возможность присоединения Windows-компьютеров к домену ALD Pro.
В этой статье я расскажу, как добиться максимальной функциональности от такого сценария развертывания, и презентую утилиту нашей собственной разработки aldpro-join. С ее помощью можно решить проблему настройки рабочих станций всего за пару кликов. Если это именно то, о чем вы хотели узнать, но не знали, кого спросить, — вы на правильном пути. Поехали!
Материал будет полезен даже в том случае, если в вашей инфраструктуре пока еще используется «ванильная» система FreeIPA.
Присоединение Windows клиентов к домену FreeIPA не находится в фокусе внимания команды разработчиков этой службы каталога, так как проект ставит своей целью не заменить Active Directory для Windows-компьютеров, а создать аналогичное решение для компьютеров под управлением операционной системы Linux. Однако компания Microsoft еще с версии Windows 2000 поддерживает возможность интеграции своих ОС с областями Kerberos, которые совместимы с RFC 2136, а центр распределения ключей FreeIPA работает как раз на базе эталонной реализации MIT KDC. То есть ничто не препятствует тому, чтобы вводить Windows-компьютеры напрямую в домен FreeIPA.
Более того, разработчики FreeIPA реализовали возможность интеграции своего домена с Active Directory на уровне доверительных отношений за счет компонента Samba AD, поэтому контроллеры домена, помимо Kerberos, поддерживают такие протоколы, как NetBIOS, SMB, Netlogon (MS-NRPC) и NTLM. В базе данных DNS есть SRV записи по стандартам Microsoft, а Kerberos-билеты содержат не только аутентификационные данные, но и сертификат PAC, включающий SID’ы пользователя и всех его групп.
Все эти особенности открывают дополнительные возможности по работе Windows-компьютеров в составе домена FreeIPA. Ниже я расскажу, как правильно задействовать эти отличительные черты, чтобы получить доступ к следующим функциям:
-
вход в ОС Windows с помощью учетных записей из домена ALD Pro;
-
прозрачная аутентификация при обращении пользователя к керберизированным ресурсам, например файловым серверам;
-
получение уведомлений об истечении срока действия пароля и возможность сменить пароль штатными функциями ОС Windows;
-
предоставление доменным пользователям прав доступа к локальным ресурсам Windows-компьютера с учетом их участия в доменных группах;
-
синхронизация времени рабочей станции с временем на контроллерах домена;
-
динамическое изменение DNS-записей в домене при изменении IP-адреса на сетевом интерфейсе Windows-компьютера.
1. Настройка Kerberos-аутентификации
Компьютеру для работы в составе домена требуется учетная запись, с помощью которой он будет выполнять авторизованные LDAP-запросы к каталогу и проверять аутентичность пользователей по протоколу Kerberos V5.
Создать эту учетную запись можно на контроллере с помощью команды host-add утилиты ipa, в параметрах которой нужно указать полное доменное имя компьютера и его IP-адрес. Перед выполнением команды нужно произвести Kerberos-аутентификацию привилегированной учетной записью администратора.
Обратите внимание, что служба каталога FreeIPA автоматически приведет доменное имя компьютера к нижнему регистру.
admin@dc-1:~$ kinit admin
admin@dc-1:~$ ipa host-add DESKTOP-7VKREUO.ald.company.lan --ip-address=10.0.1.151
-----------------------------------------------
Добавлен узел "desktop-7vkreuo.ald.company.lan"
-----------------------------------------------
Имя узла: desktop-7vkreuo.ald.company.lan
Имя учётной записи: host/desktop-7vkreuo.ald.company.lan@ALD.COMPANY.LAN
Псевдоним учётной записи: host/desktop-7vkreuo.ald.company.lan@ALD.COMPANY.LAN
Link to department: ou=ald.company.lan,cn=orgunits,cn=accounts,dc=ald,dc=company,dc=lan
Link to head department: ald.company.lan
Пароль: False
Таблица ключей: False
Managed by: desktop-7vkreuo.ald.company.lan
Чтобы использовать новую учетную запись, ей нужно назначить пароль. Сделать это можно с помощью утилиты ipa-getkeytab, которая создаст необходимые Kerberos-ключи, запишет их в атрибут krbPrincipalKey учетной записи и сохранит в указанный keytab-файл.
admin@dc-1:~$ sudo ipa-getkeytab -p host/desktop-7vkreuo.ald.company.lan@ALD.COMPANY.LAN \
-P -k /tmp/client.keytab << EOF
Windows10ComputerPassword
Windows10ComputerPassword
EOF
Новый пароль учётной записи:
Проверка пароля учётной записи:
Таблица ключей успешно получена и сохранена в: /tmp/client.keytab
где:
-
p — указывает имя Kerberos-принципала, для которого будет сгенерирована связка ключей. Его можно взять из предыдущего шага в текстовом выводе команды host-add.
-
P — указывает, что пароль учетной записи должен быть задан вручную с помощью интерактивного ввода. Если этот параметр не будет задан, то система сгенерирует пароль автоматически, но не отобразит его на экране. Поэтому такой способ подходит только в случае, если мы планируем использовать keytab-файл.
-
k — указывает путь к keytab-файлу, в который нужно сохранить Kerberos-ключи. Параметр является обязательным — невозможно назначить пароль без создания keytab-файла.
-
<< EOF … EOF — позволяет перенаправить следующие две строки в качестве пароля и подтверждения. Не забудьте отключить занесение команды в history, например добавив символ пробела перед командой sudo.
Дополнительно можно воспользоваться следующими параметрами:
-
s — задает fqdn имя контроллера домена, через который следует выполнить установку пароля. По умолчанию используются настройки из /etc/ipa/default.conf.
-
e — задает через запятую способы хеширования паролей. В крайних версиях FreeIPA утилита ipa-getkeytab использует ключи AES256-CTS-HMAC-SHA1-96 и AES128-CTS-HMAC-SHA1-96, совместимые с современными дистрибутивами ОС Microsoft, включая Windows 10. Поэтому задавать параметр не требуется. Полный перечень хешей, поддерживаемых FreeIPA, можно посмотреть командой «ipa-getkeytab —permitted-enctypes». Для Windows это можно узнать в справке к утилите ksetup командой «ksetup.exe /?».
При желании вы можете проверить содержимое keytab-файла с помощью утилиты klist:
admin@dc-1:~$ sudo klist -ket /tmp/client.keytab
Keytab name: FILE:/tmp/client.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
1 19.11.2023 16:05:15 host/desktop-7vkreuo.ald.company.lan@ALD.COMPANY.LAN (aes256-cts-hmac-sha1-96)
1 19.11.2023 16:05:15 host/desktop-7vkreuo.ald.company.lan@ALD.COMPANY.LAN (aes128-cts-hmac-sha1-96)
Но сам keytab-файл нам не потребуется, потому что утилите ksetup.exe пароль нужно будет передать открытым текстом. Используя это значение, утилита сгенерирует несколько хешей, не совместимых с Kerberos, таких как NTLM и SHA1, и сохранит пароль «как есть» в менеджере учетных записей безопасности (Security Accounts Manager, SAM). С помощью утилиты Mimikatz можно убедиться, что Windows хранит пароль компьютера в том числе и открытым текстом.
mimikatz # sekurlsa::logonpasswords
...
Authentication Id : 0 ; 2053055 (00000000:001f53bf)
Session : Interactive from 2
User Name : DWM-2
Domain : Window Manager
Logon Server : (null)
Logon Time : 1/11/2024 10:39:38 AM
SID : S-1-5-90-0-2
msv :
[00000003] Primary
* Username : DESKTOP-7VKREUO$
* Domain : ALD
* NTLM : cb4cacacf93394406beb092f12ac797c
* SHA1 : 4fe309666be5630192c09851b20be577a914fee8
tspkg :
wdigest :
* Username : DESKTOP-7VKREUO$
* Domain : ALD
* Password : (null)
kerberos :
* Username : DESKTOP-7VKREUO$
* Domain : ALD.COMPANY.LAN
* Password : Windows10ComputerPassword
ssp : KO
credman :
...
Чтобы Windows-компьютер работал в составе домена, в качестве DNS-сервера у него должен быть указан IP-адрес контроллера домена ALD Pro. Дополнительно рекомендуется отключить протокол NetBIOS, иначе вход в систему будет выполняться с большой задержкой. А вот задавать DNS-суффикс необязательно, так как утилита ksetup установит глобальный DNS-суффикс для компьютера и короткие имена будут автоматически дополняться до FQDN-имен.
Продемонстрирую внесение указанных настроек
1. Откройте оснастку «Network Connections» (ncpa.cpl), затем свойства сетевого интерфейса, далее выберите протокол «Internet Protocol Version 4 (TCP/IPv4)» и нажмите кнопку «Properties», см. рисунок 1.
Внесите требуемые значения, см. рисунок 2.
IP address: 10.0.1.151
Subnet mask: 255.255.255.0
Default gateway: 10.0.1.1
Preferred DNS server: 10.0.1.11
Windows-компьютер может совершать ненужные запросы SAM LOGON к контроллеру домена — это сильно замедляет процедуру входа. Чтобы этого не происходило, нажмите кнопку «Advanced» — так вы перейдете к расширенным настройкам. На вкладке «WINS» отключите NetBIOS для сетевого подключения, см. рисунок 3.
Чтобы Windows-компьютер работал в составе домена, ему нужно предоставить логин и пароль от доменной учетной записи, которую мы создали ранее. Логин учетной записи соответствует имени компьютера. Посмотреть текущее значение и изменить его можно с помощью стандартной оснастки sysdm.cpl (System Device Manager), см. рисунок 4.
Пароль учетной записи компьютера можно задать с помощью команды SetComputerPassword утилиты ksetup на Windows-компьютере.
> ksetup.exe /SetComputerPassword Windows10ComputerPassword
где:
-
/SetComputerPassword — команда утилиты ksetup, с помощью которой можно установить пароль для доменной учетной записи компьютера. Она сохраняет исходный текст пароля и несколько хешей в диспетчере учётных записей безопасности (Security Account Manager, SAM), то есть в защищенной части реестра.
-
Windows10ComputerPassword — пароль, который мы использовали ранее при создании учетной записи компьютера в домене. Напоминаю, что нужно использовать длинные пароли, сгенерированные случайным образом.
Теперь все готово для того, чтобы переключить компьютер на работу в Kerberos-области, совместимой с RFC1510. Для этого нужно выполнить команду SetRealm утилиты ksetup.
> ksetup.exe /SetRealm ALD.COMPANY.LAN
где:
-
/SetRealm — команда задает Kerberos-область, создавая ключ в разделе реестра «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Domains».
-
ALD.COMPANY.LAN — область Kerberos нашего домена ALD Pro.
После изменения имени компьютера, пароля или принадлежности компьютера к домену нужно выполнить перезагрузку компьютера, чтобы указанные изменения вступили в силу.
Текущие настройки можно посмотреть с помощью команды DumpState:
> ksetup.exe /DumpState
default realm = ALD.COMPANY.LAN (external)
ALD.COMPANY.LAN:
(no kdc entries for this realm)
Realm Flags = 0x0No Realm Flags
No user mappings defined.
Отмечу еще несколько моментов, которые можно встретить в Интернете. Ниже объясню, почему они не требуются или могут быть даже вредны:
-
Команда SetRealm первоначально называлась SetDomain, и этот алиас продолжает работать до сих пор. Поэтому во многих инструкциях остается такой вариант написания, но команда «установить область» лучше отражает тот факт, что Kerberos-аутентификация Windows-компьютеров возможна не только в домене Active Directory, но и других реализациях, совместимых с RFC1510. Например, в MIT Kerberos.
-
Довольно часто предлагают с помощью команд /addkdc и /addkpasswd задать адреса серверов, через которые можно выполнять аутентификацию и менять пароль. Указанные рекомендации актуальны при интеграции Windows-машины с простой Kerberos-областью, но в домене ALD Pro (FreeIPA) есть все необходимые SRV-записи, и отказываться от функции автоматического обнаружения этих сервисов не имеет смысла.
-
Иногда можно встретить рекомендации по настройке разрешенных типов шифрования Kerberos через локальную групповую политику «Security Options > Network Security: Configure encryption types allowed for Kerberos». Это может потребоваться только для учетных записей хостов, которые находятся под управлением устаревших Windows 2000, Windows Server 2003 и Windows XP. Современные релизы поддерживают необходимые типы шифрования по умолчанию (AES128_HMAC_SHA1 и AES256_HMAC_SHA1).
-
В большинстве инструкций предлагают настроить сопоставление доменных пользователей на локальные учетные записи с помощью команды «ksetup.exe /mapuser * *», что правильно при интеграции Windows с базовой реализацией MIT Kerberos, в которой нет никаких идентификаторов безопасности Windows. При таком способе настройки вход Kerberos-пользователя аналогичен входу локального пользователя. Разница только в том, что первичная проверка аутентичности выполняется через KDC, а все остальные механизмы работают так же, как если бы вход в систему был выполнен локальной учетной записью.
Однако в службе каталога FreeIPA центр распределения ключей MIT KDC интегрирован с Samba AD, поэтому Kerberos-билеты содержат сертификат PAC со всей необходимой авторизационной информацией, включая идентификатор безопасности пользователя и всех его групп. В силу указанного обстоятельства маппинг учетных записей для FreeIPA делать не нужно. При таком способе настройки будет обеспечиваться полноценная работа под доменной учетной записью: при входе пользователя будет сохраняться его доменный SID, у него будет TGT-билет с полным перечнем групп из PAC-сертификата, он сможет выполнять прозрачную Kerberos-аутентификацию при обращении к файловым серверам и другим керберизированным ресурсам в домене.
Для входа в компьютер с помощью доменной учетной записи в качестве имени пользователя нужно вводить полное имя Kerberos-принципала в формате login@REALM.FQDN. Причем логин может быть задан в любом регистре, а реалм — обязательно прописными буквами.
Операционная система Windows позволяет задать домен для входа по умолчанию, для этого нужно изменить в реестре значение DefaultLogonDomain. Из командной строки это можно сделать с помощью командлета Set-ItemProperty:
Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System' -Name 'DefaultLogonDomain' -Value 'ALD.COMPANY.LAN'
Однако при использовании домена по умолчанию ОС будет дополнять имена пользователей до формата DefaultLogonDomain\login, который будет усечен до NETBIOS\login — например, ALD\admin. Из-за этого перестанут работать такие важные функции, как вход с экрана блокировки, вход последним пользователем и смена пароля через <ctrl> + <alt> + <del>.
Для устранения указанных проблем, после входа необходимо исправить значения LoggedOnUser и LastLoggedOnUser в реестре, что можно сделать PowerShell-скриптом:
> cat FixPreWindowsNames.ps1
function Fix-PreWindowsName ([string]$Domain, [string]$NetBIOS, [string]$Path, [string]$Parameter){
$Path = 'Registry::' + $Path;
$UsernameComponents = (Get-ItemPropertyValue -Path $Path -Name $Parameter) -split '\\';
if ($UsernameComponents.length -eq 2 -AND $UsernameComponents[0].ToUpper() -eq $NetBIOS){
$UPN = $UsernameComponents[1] + '@' + $Domain;
Set-ItemProperty -Path $Path -Name $Parameter -Value $UPN;
}
}
$Domain = (Get-ItemPropertyValue -Path 'Registry::HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters' -Name 'Domain').ToUpper();
$NetBIOS = ($Domain -split '\.')[0];
Fix-PreWindowsName $Domain $NetBIOS 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\' 'LastLoggedOnUser';
foreach($SessionData in Get-ChildItem -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData'){
Fix-PreWindowsName $Domain $NetBIOS $SessionData.Name 'LoggedOnUser';
}
Для автоматического выполнения скрипта после входа в систему можно зарегистрировать следующее задание в планировщике. Скрипт небольшой, поэтому его текст можно передать напрямую в параметре EncodedCommand в формате base64, чтобы не хранить файл где-то на диске:
Register-ScheduledTask
-TaskName 'FixPreWindowsNames'
-Description 'Задача исправляет значения LoggedOnUser и LastLoggedOnUser'
-Trigger (New-ScheduledTaskTrigger -AtLogOn)
-Principal (New-ScheduledTaskPrincipal -UserId 'SYSTEM' -LogonType ServiceAccount)
-Settings (New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries)
-Action (New-ScheduledTaskAction -Execute 'cmd' -Argument $('/c start /min powershell -WindowStyle hidden -EncodedCommand ' + [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes((Get-Content FixPreWindowsNames.ps1))) ) )
В качестве промежуточного итога добавлю, что для вывода машины из домена FreeIPA достаточно выполнить команду RemoveRealm и ввести компьютер в рабочую группу:
> ksetup.exe /RemoveRealm 'ALD.COMPANY.LAN'
NOTE: /RemoveRealm requires a reboot to take effect on pre-SP1 Win2000 computers
> Add-Computer -WorkGroupName 'WORKGROUP'
WARNING: The changes will take effect after you restart the computer DESKTOP-7VKREUO.
2. Балансировка Kerberos аутентификации с использованием сайтов
Функция «локаций» в домене FreeIPA решает ту же задачу, что и «сайты» Active Directory, но несколько иным образом. Если в AD к сайтам привязываются компьютерные сети, и принадлежность компьютера к сайту определяется его текущим IP-адресом, то в FreeIPA привязка выполняется косвенно через DNS-сервер, который обслуживает запросы компьютера.
Например, если запросить SRV-записи «_kerberos._udp.ald.company.lan» у контроллеров из разных локаций, то dc-1 сделает перенаправление на адрес «hq», а dc-4 на адрес «spb» соответственно. В обоих случаях будет выдан полный перечень всех контроллеров домена с приоритизацией по принадлежности серверов к локациям. Проверку доступности серверов клиент SSSD выполняет в порядке заданных приоритетов.
$ nslookup -type=SRV _kerberos._udp.ald.company.lan dc-1.ald.company.lan
Server: dc-1.ald.company.lan
Address: 10.0.1.11#53
_kerberos._udp.ald.company.lan canonical name = _kerberos._udp.hq._locations.ald.company.lan.
_kerberos._udp.hq._locations.ald.company.lan service = 0 100 88 dc-2.ald.company.lan.
_kerberos._udp.hq._locations.ald.company.lan service = 0 100 88 dc-3.ald.company.lan.
_kerberos._udp.hq._locations.ald.company.lan service = 0 100 88 dc-1.ald.company.lan.
_kerberos._udp.hq._locations.ald.company.lan service = 50 100 88 dc-4.ald.company.lan.
_kerberos._udp.hq._locations.ald.company.lan service = 50 100 88 dc-5.ald.company.lan.
$ nslookup -type=SRV _kerberos._udp.ald.company.lan dc-4.ald.company.lan
Server: dc-4.ald.company.lan
Address: 10.0.1.14#53
_kerberos._udp.ald.company.lan canonical name = _kerberos._udp.spb._locations.ald.company.lan.
_kerberos._udp.hq._locations.ald.company.lan service = 50 100 88 dc-1.ald.company.lan.
_kerberos._udp.hq._locations.ald.company.lan service = 0 100 88 dc-5.ald.company.lan.
_kerberos._udp.hq._locations.ald.company.lan service = 50 100 88 dc-3.ald.company.lan.
_kerberos._udp.hq._locations.ald.company.lan service = 0 100 88 dc-4.ald.company.lan.
_kerberos._udp.hq._locations.ald.company.lan service = 50 100 88 dc-2.ald.company.lan.
Windows-клиент тоже учитывает приоритеты SRV-записей, но запрашивает их по адресам вида «_kerberos._udp.dc._msdcs.ald.company.lan» в соответствии со спецификацией Active Directory (Active Directory Technical Specification, MS-ADTS). Такие записи в домене FreeIPA тоже есть, они добавляются автоматически для поддержки интеграции с Active Directory. Таким образом, для использования географической балансировки достаточно в качестве DNS-сервера указать один из контроллеров FreeIPA.
3. Настройка синхронизации времени
Для корректной работы протокола аутентификации Kerberos V5 необходимо, чтобы разница во времени между клиентом и сервером была не более 5 минут. За синхронизацию времени в операционной системе Windows отвечает служба W32Time (Windows Time Service), которая работает по протоколу NTP (Network Time Protocol). Прочитать и изменить параметры службы можно из командной строки с помощью утилиты w32tm. Параметры хранятся в реестре «Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters»:
> w32tm.exe /query /configuration
...
Type: NTP (Local)
NtpServer: time.windows.com,0x9 (Local)
...
В домене Active Directory источниками точного времени для рабочих станций выступают контроллеры домена, выбор которых осуществляется с учетом иерархии домена. Имитировать режим DOMHIER не имеет смысла, т. к. в этом случае служба W32Time будет следовать протоколу MS-SNTP и проверять цифровые подписи пакетов, которых нет в Chrony.
Учитывая сказанное, правильно будет использовать режим manual и указать DNS-имена или IP-адреса конкретных контроллеров домена. Например, если у вас в домене только два контроллера, настроить службу W32Time можно с помощью следующей команды:
> w32tm.exe /config /syncfromflags:manual /manualpeerlist:"dc-1.ald.company.lan,0x9 dc-2.ald.company.lan,0x9" /update
где:
-
/config — основная команда, используемая для конфигурирования службы W32Time. С ее помощью можно изменить текущие настройки, задать список используемых серверов времени, тип синхронизации и многое другое.
-
/syncfromflags — устанавливает тип источника для синхронизации времени. Допустимы значения:
-
MANUAL — синхронизация времени с серверами из списка, заданного вручную (Type: NTP).
-
DOMHIER — синхронизация времени с контроллерами в соответствии с иерархией домена (Type: NT5DS).
-
ALL — разрешает использовать любой источник, как внешний сервер, так и контроллеры домена в соответствии с установленной иерархией (Type: AllSync).
-
NO — отключает синхронизацию времени (Type: NoSync).
-
-
/manualpeerlist — задает список DNS-имен и/или IP-адресов серверов, которые могут выступать источниками времени для синхронизации.
Адреса разделяются символом пробела, а в конце каждого адреса через запятую может быть задан дополнительный параметр, значение которого складывается из следующих флагов:
-
0x1 (SpecialInterval) — указывает, что между отправкой запросов к этому серверу нужно использовать специальный интервал, заданный параметром SpecialPollInterval, который по умолчанию имеет значение 32768 секунд (9 часов). Если флаг не задан, то используется стандартное значения в 604800 секунд (7 дней).
-
0x2 (UseAsFallbackOnly) — указывает, что данный сервер необходимо использовать в последнюю очередь как резервный.
-
0x4 (SymmetricActive) — указывает, что сервер является одноранговым узлом, с которым возможна симметричная синхронизация времени.
-
0x8 (Client) — означает, что текущий хост должен выступать клиентом по отношению к указанному серверу.
Значение по умолчанию «time.windows.com,0x9» соответствует комбинации первого и последнего флагов SpecialInterval+Client. Если вам нужно будет указать резервный источник времени, то используйте значение 0xB, чтобы к предыдущему значению добавить флаг UseAsFallbackOnly.
-
-
/update — уведомляет службу об изменении параметров для их принудительного применения. Если параметр не использовать, то изменения вступят в силу при следующем перезапуске службы.
Принудительно запустить синхронизацию времени можно с помощью команды resync:
> w32tm.exe /resync
Sending resync command to local computer
The command completed successfully.
Посмотреть результаты синхронизации можно с помощью команды status:
> w32tm.exe /query /status /verbose
Leap Indicator: 0(no warning)
Stratum: 4 (secondary reference - syncd by (S)NTP)
Precision: -23 (119.209ns per tick)
Root Delay: 0.0081377s
Root Dispersion: 7.8973731s
ReferenceId: 0x0A00010B (source IP: 10.0.1.11)
Last Successful Sync Time: 1/14/2024 11:32:33 AM
Source: dc-1.ald.company.lan,0x9
Poll Interval: 10 (1024s)
Phase Offset: 0.1344197s
ClockRate: 0.0156250s
State Machine: 1 (Hold)
Time Source Flags: 0 (None)
Server Role: 0 (None)
Last Sync Error: 0 (The command completed successfully.)
Time since Last Good Sync Time: 2.2626619s
Учитывая, что со временем топология домена может претерпевать существенные изменения, использовать имена конкретных серверов крайне нежелательно. Лучше будет указать DNS-имя домена:
> w32tm.exe /config /syncfromflags:manual /manualpeerlist:"ald.company.lan,0x9" /update
В этом случае A-записи нужно будет добавить вручную, автоматически они в домене не создаются. Сделать это можно на контроллере, используя утилиту командной строки ipa.
# for server in $(ipa-replica-manage list | sed 's/: master//'); do ipa dnsrecord-add ald.company.lan @ --a-rec=$(dig +short $server); done
Однако чтобы учесть географическое распределение инфраструктуры, правильным будет создать запись вида «_ntp._udp.имя_домена» и добавить A-записи в соответствующие локации.
Для упрощения предлагаю воспользоваться уже существующей записью «_kerberos._udp». Создадим необходимые A-записи сначала в головном офисе:
$ ipa dnsrecord-add ald.company.lan _kerberos._udp.hq._locations --a-rec=10.0.1.11
Имя записи: _kerberos._udp.hq._locations
A record: 10.0.1.11
SRV record: 0 100 88 dc-1.ald.company.lan., 0 100 88 dc-2.ald.company.lan., 0 100 88 dc-3.ald.company.lan., 50 100 88 dc-4.ald.company.lan., 50 100 88 dc-5.ald.company.lan.
$ ipa dnsrecord-add ald.company.lan _kerberos._udp.hq._locations --a-rec=10.0.1.12
Имя записи: _kerberos._udp.hq._locations
A record: 10.0.1.11, 10.0.1.12
SRV record: 0 100 88 dc-1.ald.company.lan., 0 100 88 dc-2.ald.company.lan., 0 100 88 dc-3.ald.company.lan., 50 100 88 dc-4.ald.company.lan., 50 100 88 dc-5.ald.company.lan
$ ipa dnsrecord-add ald.company.lan _kerberos._udp.hq._locations --a-rec=10.0.1.13
Имя записи: _kerberos._udp.hq._locations
A record: 10.0.1.11, 10.0.1.12, 10.0.1.13
SRV record: 0 100 88 dc-1.ald.company.lan., 0 100 88 dc-2.ald.company.lan., 0 100 88 dc-3.ald.company.lan., 50 100 88 dc-4.ald.company.lan., 50 100 88 dc-5.ald.company.lan
Затем в офисе Санкт-Петербурга:
$ ipa dnsrecord-add ald.company.lan _kerberos._udp.spb._locations --a-rec=10.0.1.14
Имя записи: _kerberos._udp.spb._locations
A record: 10.0.1.14
SRV record: 50 100 88 dc-1.ald.company.lan., 50 100 88 dc-2.ald.company.lan., 50 100 88 dc-3.ald.company.lan., 0 100 88 dc-4.ald.company.lan., 0 100 88 dc-5.ald.company.lan
$ ipa dnsrecord-add ald.company.lan _kerberos._udp.spb._locations --a-rec=10.0.1.15
Имя записи: _kerberos._udp.spb._locations
A record: 10.0.1.14, 10.0.1.15
SRV record: 50 100 88 dc-1.ald.company.lan., 50 100 88 dc-2.ald.company.lan., 50 100 88 dc-3.ald.company.lan., 0 100 88 dc-4.ald.company.lan., 0 100 88 dc-5.ald.company.lan
Проверим работу новых записей:
# nslookup -type=A _kerberos._udp.ald.company.lan dc-1.ald.company.lan
Server: dc-1.ald.company.lan
Address: 10.0.1.11#53
_kerberos._udp.ald.company.lan canonical name = _kerberos._udp.hq._locations.ald.company.lan.
Name: _kerberos._udp.hq._locations.ald.company.lan
Address: 10.0.1.12
Name: _kerberos._udp.hq._locations.ald.company.lan
Address: 10.0.1.11
Name: _kerberos._udp.hq._locations.ald.company.lan
Address: 10.0.1.13
Теперь запись «_kerberos._udp.ald.company.lan» можно использовать в настройках службы W32Time на компьютерах Windows. Для синхронизации времени они будут выбирать ближайший к ним контроллер домена.
4. Настройка динамического обновления DNS-записей
Служба каталога FreeIPA и клиентская часть SSSD поддерживают функцию динамического обновления DNS-записей в соответствии с RFC 2136. Чтобы использовать эту функцию, в конфигурационный файл /etc/sssd/sssd.conf достаточно внести несколько строк:
[domain/ald.company.lan]
...
dyndns_update = true
dyndns_refresh_interval = 43200
dyndns_update_ptr = true
dyndns_ttl = 3600
...
Операционная система Windows тоже поддерживает указанный протокол. Только есть одно маленькое недоразумение, из-за которого ничего не работает: компьютер использует имя принципала в другом формате, поэтому без добавления псевдонима «desktop-7vkreuo$» к учетной записи компьютера хост сможет выполнять только проверку аутентичности пользователей. У него не получится самому пройти аутентификацию в домене, и в журналах будут появляться сообщения об ошибке «CLIENT_NOT_FOUND». Добавить псевдоним можно с помощью команды host-add-principal утилиты ipa:
admin@dc-1:~$ ipa host-add-principal desktop-7vkreuo.ald.company.lan 'desktop-7vkreuo$'
--------------------------------------------------------------------------
Добавлены новые псевдонимы в запись узла "desktop-7vkreuo.ald.company.lan"
--------------------------------------------------------------------------
Имя узла: desktop-7vkreuo.ald.company.lan
Псевдоним учётной записи: host/desktop-7vkreuo.ald.company.lan@ALD.COMPANY.LAN, desktop-7vkreuo$@ALD.COMPANY.LAN
И останется только расширить политику обновления DNS на сервере:
-
Для прямой зоны:
-
DN: idnsname=ald.company.lan.,cn=dns,dc=ald,dc=company,dc=lan.
-
Атрибут: idnsUpdatePolicy
-
Старое значение: grant ALD.COMPANY.LAN krb5-self * A; grant ALD.COMPANY.LAN krb5-self * AAAA; grant ALD.COMPANY.LAN krb5-self * SSHFP;
-
Новое значение: grant ALD.COMPANY.LAN krb5-self * A AAAA SSHFP; grant ALD.COMPANY.LAN ms-self . A AAAA;
-
-
Для обратной зоны:
-
DN: idnsname=10.0.1.in-addr.arpa.,cn=dns,dc=ald,dc=company,dc=lan.
-
Атрибут: idnsUpdatePolicy
-
Старое значение: grant ALD.COMPANY.LAN krb5-subdomain 1.0.10.in-addr.arpa. PTR;
-
Новое значение: grant ALD.COMPANY.LAN krb5-subdomain 1.0.10.in-addr.arpa. PTR; grant ALD.COMPANY.LAN ms-subdomain 1.0.10.in-addr.arpa. PTR;
-
Внести указанные изменения можно через интерфейс IPA https://dc-1.ald.company.lan/ipa/ui, см. рисунок 5.
В завершение не помешает настроить на рабочей станции политику обновления DNS, так как по умолчанию Windows-клиенты сначала предпринимают попытку неавторизованных запросов, а уже после переключаются на GSS-TSIG. Это приводит к тому, что в журналах сервера скапливается много лишних предупреждений.
Для устранения проблемы нужно разрешить «только безопасные» (only secure) обновления для DNS-клиента на стороне рабочей станции Windows. Это делается с помощью редактора локальной групповой политики (gpedit.msc), см. рисунок 6.
Для проверки настроек вы можете выполнить принудительное обновление DNS-записей на Windows-компьютере командой registerdns утилиты ipconfig:
> ipconfig.exe /registerdns
Автоматически запросы на обновление DNS-записей отправляются в следующих случаях:
-
Включение компьютера.
-
Изменение IP-адреса в конфигурации сетевого подключения.
-
Продление срока аренды IP-адреса, выданного DHCP-сервером. Такое событие можно вызвать принудительно командой «ipconfig /renew».
На стороне сервера FreeIPA запросы на обновление DNS можно будет найти в журнале daemon.log. Если хосту установить IP-адрес 10.0.1.155, то вы увидите в журнале следующие строки:
# tail -f /var/log/daemon.log | grep -i 'desktop-7vkreuo'
dc-1 named-pkcs11[4920]: client @0x70a05410f640 10.0.1.155#64080/key
desktop-7vkreuo\$\@ALD.COMPANY.LAN: updating zone 'ald.company.lan/IN':
deleting rrset at 'DESKTOP-7VKREUO.ALD.COMPANY.LAN' AAAA
dc-1 named-pkcs11[4920]: client @0x70a05410f640 10.0.1.155#64080/key
desktop-7vkreuo\$\@ALD.COMPANY.LAN: updating zone 'ald.company.lan/IN':
deleting rrset at 'DESKTOP-7VKREUO.ALD.COMPANY.LAN' A
dc-1 named-pkcs11[4920]: client @0x70a05410f640 10.0.1.155#64080/key
desktop-7vkreuo\$\@ALD.COMPANY.LAN: updating zone 'ald.company.lan/IN':
adding an RR at 'DESKTOP-7VKREUO.ALD.COMPANY.LAN' A 10.0.1.155
dc-1 named-pkcs11[4920]: client @0x70a04411a9d0 10.0.1.155#56472/key
desktop-7vkreuo\$\@ALD.COMPANY.LAN: updating zone '1.0.10.in-addr.arpa/IN':
deleting rrset at '155.1.0.10.in-addr.arpa' PTR
dc-1 named-pkcs11[4920]: client @0x70a04411a9d0 10.0.1.155#56472/key
desktop-7vkreuo\$\@ALD.COMPANY.LAN: updating zone '1.0.10.in-addr.arpa/IN':
adding an RR at '155.1.0.10.in-addr.arpa' PTR DESKTOP-7VKREUO.ALD.COMPANY.LAN.
На стороне клиента возможные ошибки обновления DNS будут появляться в журнале System, см. рисунок 7.
5. Проверка функциональных возможностей
5.1 Вход в систему
Для входа в систему доменным пользователем «admin» нужно выбрать «Other user» и ввести имя в формате «admin@ALD.COMPANY.LAN», см. рис. 8. Если вы настроили домен по умолчанию, то можно использовать короткое имя «admin» без указания домена.
После входа в операционную систему Windows вы можете проверить состояние из командной строки с помощью утилит whoami и klist.
> whoami.exe
ald\admin
> whoami.exe /groups
GROUP INFORMATION
-----------------
Group Name Type SID
========================================== ================ =============================================
Unknown SID type S-1-5-21-1491017894-2377586105-2170988794-512
Everyone Well-known group S-1-1-0
BUILTIN\Users Alias S-1-5-32-545
NT AUTHORITY\INTERACTIVE Well-known group S-1-5-4
CONSOLE LOGON Well-known group S-1-2-1
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11
NT AUTHORITY\This Organization Well-known group S-1-5-15
LOCAL Well-known group S-1-2-0
Authentication authority asserted identity Well-known group S-1-18-1
Mandatory Label\Medium Mandatory Level Label S-1-16-8192
> klist.exe
Current LogonId is 0:0x396cf
Cached Tickets: (1)
#0> Client: admin @ ALD.COMPANY.LAN
Server: krbtgt/ALD.COMPANY.LAN @ ALD.COMPANY.LAN
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
Start Time: 11/19/2023 6:26:37 (local)
End Time: 11/20/2023 6:26:37 (local)
Renew Time: 11/26/2023 6:26:37 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0x1 -> PRIMARY
Kdc Called: dc-1.ald.company.lan
Чтобы определить, какой именно контроллер обслуживает Windows-компьютер, можно воспользоваться утилитами systeminfo или nltest:
> systeminfo.exe | find /i "logon server"
Logon Server: \\DC-1
> nltest.exe /dsgetdc:ALD.COMPANY.LAN
DC: \\dc-1.ald.company.lan
Address: \\10.0.1.11
Dom Guid: 808d0975-5d36-47ed-8825-4b4227a348b9
Dom Name: ald.company.lan
Forest Name: ald.company.lan
Dc Site Name: Default-First-Site-Name
Our Site Name: Default-First-Site-Name
Flags: PDC GC DS LDAP KDC TIMESERV GTIMESERV WRITABLE DNS_DC DNS_DOMAIN DNS_FOREST CLOSE_SITE
The command completed successfully
Первый вход в систему может выполняться около минуты, так как создается профиль пользователя. Второй и последующие входы выполняются значительно быстрее, примерно за 5-10 секунд. При недоступности отдельных контроллеров время входа значительно возрастает.
Совет: не забудьте отключить NetBIOS для сетевого подключения, это значительно ускоряет время входа.
5.2 Автономный вход в систему
Операционная система Windows сохраняет хеш пользовательского пароля, что позволяет ей выполнять автономную аутентификацию пользователей без доступа к контроллерам домена.
Продолжительность автономного входа зависит от настроек сетевого интерфейса: если доступа к сети нет или сетевой интерфейс настроен на работу с публичным DNS-сервером, который отклоняет запросы на разрешение локальных имен, то автономный вход будет выполняться без задержек. Если интерфейс включен, но DNS-сервер недоступен, то компьютер будет отправлять до 15 запросов на поиск SRV-записей Kerberos и LDAP-сервисов — общая задержка может составить больше минуты.
Очевидно, что при автономном входе TGT-билет в системе будет отсутствовать:
> whoami
ald\admin
> whoami /groups
GROUP INFORMATION
-----------------
Group Name Type SID
========================================== ================ =============================================
Unknown SID type S-1-5-21-1491017894-2377586105-2170988794-512
Everyone Well-known group S-1-1-0
BUILTIN\Users Alias S-1-5-32-545
NT AUTHORITY\INTERACTIVE Well-known group S-1-5-4
CONSOLE LOGON Well-known group S-1-2-1
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11
NT AUTHORITY\This Organization Well-known group S-1-5-15
LOCAL Well-known group S-1-2-0
Authentication authority asserted identity Well-known group S-1-18-1
Mandatory Label\Medium Mandatory Level Label S-1-16-8192
> klist
Current LogonId is 0:0x95e78b
Cached Tickets: (0)
> systeminfo | find /i "logon server"
Logon Server: \\DC-1
> nltest /dsgetdc:ALD.COMPANY.LAN
Getting DC name failed: Status = 1355 0x54b ERROR_NO_SUCH_DOMAIN
После восстановления доступа к локальной сети билеты Kerberos появляются при первом же успешном обращении к керберизированному сервису. Например, при обращении к общим папкам автоматически появятся билеты krbtgt и cifs:
> whoami
ald\admin
> whoami /groups
GROUP INFORMATION
-----------------
Group Name Type SID
========================================== ================ =============================================
Unknown SID type S-1-5-21-1491017894-2377586105-2170988794-512
Everyone Well-known group S-1-1-0
BUILTIN\Users Alias S-1-5-32-545
NT AUTHORITY\INTERACTIVE Well-known group S-1-5-4
CONSOLE LOGON Well-known group S-1-2-1
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11
NT AUTHORITY\This Organization Well-known group S-1-5-15
LOCAL Well-known group S-1-2-0
Authentication authority asserted identity Well-known group S-1-18-1
Mandatory Label\Medium Mandatory Level Label S-1-16-8192
> klist
Current LogonId is 0:0x95e78b
Cached Tickets: (2)
#0> Client: admin @ ALD.COMPANY.LAN
Server: krbtgt/ALD.COMPANY.LAN @ ALD.COMPANY.LAN
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
Start Time: 2/4/2024 11:52:59 (local)
End Time: 2/5/2024 11:52:59 (local)
Renew Time: 2/11/2024 11:52:59 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0x1 -> PRIMARY
Kdc Called: dc-1.ald.company.lan
#1> Client: admin @ ALD.COMPANY.LAN
Server: cifs/dc-1.ald.company.lan @ ALD.COMPANY.LAN
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40a90000 -> forwardable renewable pre_authent name_canonicalize 0x80000
Start Time: 2/4/2024 11:52:59 (local)
End Time: 2/5/2024 11:52:59 (local)
Renew Time: 2/11/2024 11:52:59 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0
Kdc Called: dc-1.ald.company.lan
> systeminfo | find /i "logon server"
Logon Server: \\DC-1
> nltest /dsgetdc:ALD.COMPANY.LAN
DC: \\dc-1.ald.company.lan
Address: \\10.0.1.11
Dom Guid: 808d0975-5d36-47ed-8825-4b4227a348b9
Dom Name: ald.company.lan
Forest Name: ald.company.lan
Dc Site Name: Default-First-Site-Name
Our Site Name: Default-First-Site-Name
Flags: PDC GC DS LDAP KDC TIMESERV GTIMESERV WRITABLE DNS_DC DNS_DOMAIN DNS_FOREST CLOSE_SITE
The command completed successfully
5.3 Смена пароля
Функция смены пароля работает штатным образом, если при входе в систему пользователь ввел имя в формате login@REALM.FQDN или это значение было скорректировано автоматически после входа с помощью скриптов, см. рис. 9.
5.4 Прозрачная аутентификация при обращении к сетевой папке
Прозрачная Kerberos-аутентификация при обращении к керберизированным сервисам будет работать, так как у пользователя в системе есть TGT-билет.
Для проверки вы можете создать сетевую папку с именем «testshare» прямо на контроллере домена и предоставить к ней доступ пользователю с именем «admin». Для этого в конец файла /etc/samba/smb.conf допишите следующие строки:
# nano /etc/samba/smb.conf
...
[testshare]
path = /srv/testshare
writable = yes
valid users = admin
write list = admin
После чего создайте указанную папку и перезапустите службу smbd:
# mkdir /srv/testshare
# systemctl restart smbd.service
Откройте сетевую папку в проводнике Windows по адресу «\\dc-1.ald.company.lan\testshare» и проверьте, что у вас есть доступ без ввода пароля и возможность создавать и редактировать файлы, см. рис. 10.
Выполните команду klist в терминале и убедитесь, что там появился дополнительный билет на доступ к службе cifs/dc-1.ald.company.lan:
5.5 Назначение доменным пользователям прав доступа в локальной системе
Как мы убедились ранее, внутри операционной системы пользователь работает под своей доменной учетной записью, но назначать ему какие-то дополнительные права, используя стандартное окно поиска пользователей, не получится — доменных пользователей в нем не будет. Обойти указанную проблему можно путем создания локальных групп, в список участников которых можно включить идентификаторы безопасности из домена.
Текущие идентификаторы пользователей и групп можно посмотреть на контроллере домена FreeIPA с помощью утилиты ipa:
$ ipa user-show admin --all | grep ipantsecurityidentifier
ipantsecurityidentifier: S-1-5-21-1491017894-2377586105-2170988794-500
$ ipa group-show admins --all | grep ipantsecurityidentifier
ipantsecurityidentifier: S-1-5-21-1491017894-2377586105-2170988794-512
Создать локальные группы на Windows-компьютере и добавить в них участников по идентификаторам можно из PowerShell с помощью командлетов New-LocalGroup и Add-LocalGroupMember, см. рис. 11:
> New-LocalGroup -Name "ALD-User-Admin" -Description "Domain user"
Name Description
---- -----------
ALD-User-Admin Domain user
> Add-LocalGroupMember -Group "ALD-User-Admin" -Member "S-1-5-21-1491017894-2377586105-2170988794-500"
> New-LocalGroup -Name "ALD-Group-Admins" -Description "Domain group"
Name Description
---- -----------
ALD-Group-Admins Domain group
> Add-LocalGroupMember -Group "ALD-Group-Admins" -Member "S-1-5-21-1491017894-2377586105-2170988794-512"
Целесообразно добавить администраторов домена также в группу локальных администраторов, чтобы у пользователей были все необходимые привилегии для настройки системы без переключения на учетную запись локального администратора:
Add-LocalGroupMember -Group "Administrators" -Member "S-1-5-21-1491017894-2377586105-2170988794-512"
Вместо заключения
Приведенный способ значительно расширяет возможности построения гибридной инфраструктуры, но требует много времени для настройки рабочих станций. Это не проблема, если у вас почасовая оплата, но в большинстве случаев создает значительные затруднения. Поэтому команда ALD Pro разработала графическую утилиту aldpro-join, которая позволяет выполнить все настройки в пару кликов, см. рисунок 12.
Приложение написано на языке Python и доступно в публичном репозитории продуктовой команды на GitFlic как в виде исходных кодов, так и в виде скомпилированного с помощью Pyinstaller исполняемого exe-файла.
Чтобы утилита смогла внести необходимые изменения и на локальном компьютере, и в домене, запускать ее нужно от имени локального администратора, а при появлении окна аутентификации требуется предоставить учетные данные привилегированного пользователя домена.
Еще раз акцентирую внимание на том, что утилита работает как для домена ALD Pro, так и для «ванильных» инсталляций FreeIPA. Команда ALD Pro прикладывает значительные усилия для выработки лучших практик использования продуктов технологического стека, и мы будем рады, если наши наработки помогут вам в реализации программы импортозамещения в вашей компании.
Введение
Из этого модуля вы узнаете о том, как подступиться к проектам импортозамещения и чем вам помогут доверительные отношения Kerberos. Мы рассмотрим, зачем в ALD Pro нужен модуль глобального каталога и как он работает. В конечном итоге, чем больше инструментов гибридного развертывания вы задействуете, тем проще вам будет выполнить миграцию инфраструктуры.
Стратегии миграции
Возможности гибридного развертывания
В настоящее время многие компании задумываются над миграцией в инфраструктуру Linux и вместо Microsoft AD DS планируют использовать службу каталога с открытым исходным кодом FreeIPA или более функциональные решения на ее основе, такие как ALD Pro. Но сколь бы ни были амбициозны планы по миграции, перевести сразу все сервисы и все рабочие места на Linux может оказаться непосильной задачей даже для очень сильных команд, потому что в один момент нужно сразу очень много ресурсов:
-
Нужны квалифицированные администраторы, чтобы перенастроить информационные системы для работы в Linux-домене. Не всегда есть готовые решения, особенно для корпоративных приложений, поэтому требуются дополнительные исследования и длительное тестирование.
-
Нужны разработчики, чтобы внести изменения в пользовательские данные (как минимум изменить идентификаторы безопасности) или даже в программный код. Причем по некоторым корпоративным системам могут быть утеряны компетенции и отсутствовать документация разработчика, что потребует выполнения обратного проектирования.
-
Нужны инженеры поддержки, чтобы обучить пользователей работе с новыми клиентскими приложениями в новой операционной системе и ответить на все их вопросы.
Учитывая нехватку кадров, при планировании импортозамещения следует максимально полно использовать все доступные механизмы гибридного развертывания для организации поэтапного перехода:
-
Доверительные отношения. Позволяют пользователям одного домена получать доступ к ресурсам другого домена.
Между доменами MS Active Directory и ALD Pro (FreeIPA) возможно установление одно- и двусторонних транзитивных доверительных отношений лес к лесу и одно- и двусторонних нетранзитивных доверительных отношений домен к домену (external trusts).
Для полноценной поддержки двусторонних отношений на стороне ALD Pro реализована функция глобального каталога, чего нет в ванильной версии FreeIPA, — это позволяет на стороне Windows при назначении прав доступа в стандартных оснастках Windows выполнять поиск по объектам доверенного леса ALD Pro.
-
Синхронизация данных каталогов. Позволяет обеспечить доступ пользователей к серверным приложениям по логину/паролю вне зависимости от того, к какому каталогу подключена эта система напрямую. В продукте ALD Pro реализован модуль синхронизации, который позволяет поддерживать целостность информации двух доменов, включая пароли. Захват паролей на стороне AD выполняется с помощью фильтра паролей, передача данных выполняется с использованием асимметричного шифрования.
-
Прямая работа Linux машин в домене MS AD. Позволяет пользователям AD входить в Linux машины и выполнять прозрачную аутентификацию при обращении к «керберизированным» сервисам в домене. Реализация сценария возможна с помощью старой клиентской части Winbind или улучшенной альтернативы SSSD. Служба SSSD поддерживает и более экзотические сценарии работы, например, когда машина находится в двух доменах сразу.
-
Прямая работа Windows машин в домене ALD Pro (FreeIPA). Позволяет пользователям ALD Pro входить на рабочие станции Windows и выполнять прозрачную аутентификацию при обращении к «керберизированным» сервисам в домене. Реализация сценария возможна в силу нативной поддержки Kerberos-доменов со стороны Windows и расширенных возможностей FreeIPA, которые дает интеграция с Samba AD.
-
Реализация единого входа для веб-приложений через обмен цифровыми удостоверениями по протоколам OAuth, OpenID, SAML.
Задачи гибридного развертывания следует рассматривать в следующих трех аспектах:
-
серверные приложения,
-
рабочие места клиентов и
-
типы учетных записей пользователей.
Серверные приложения по сложности миграции можно классифицировать на несколько групп:
-
Непереносимые:
-
Приложения, которые работают только с AD DS, например, MS Exchange. Потребуют замены на аналоги (RuPost, CommuniGate или VK WorkMail).
-
Приложения, которые интегрированы с каталогом через NTLM, могут потребовать существенных доработок, хотя на контроллерах домена для работы в доверительных отношениях интегрирован компонент Samba AD, который предоставляет этот интерфейс.
-
-
Переносимые:
-
Приложения, которые интегрированы с каталогом через Kerberos, например, 1С, и, соответственно, вся линейка этих учетных систем.
-
Приложения, которые интегрированы через LDAP, например, Bitrix24.
-
Web-приложения, которые интегрированы через обмен цифровыми удостоверениями по протоколам OAuth, OpenID, SAML.
-
рис. 313 Основные способы подключения к информационным системам
В качестве рабочих мест следует рассмотреть следующие варианты:
-
MS Windows в домене MS AD — это исходные данные для начала миграции.
-
Astra Linux в домене MS AD через SSSD или Winbind — промежуточный сценарий, который позволит начать замену клиентских приложений.
-
MS Windows в домене ALD Pro — промежуточный этап, который поможет в тех случаях, когда невозможно заменить или переписать какие-то специфичные клиентские приложения. Вместе с тем не забывайте, что в некоторых случаях может помочь среда для запуска Windows-приложений Wine.
-
Astra Linux в домене ALD Pro через SSSD — это то, к чему рекомендуется прийти.
Учетные записи могут быть:
-
Из домена ALD Pro (FreeIPA);
-
Из домена MS AD (в т.ч. Samba AD DC 4.7+);
-
Локальные (не рекомендуется).
Таким образом, мы получаем множество способов входа в компьютер и подключения к серверным приложениям, причем для каждого приложения и каждой группы пользователей следует прорабатывать свой индивидуальный план миграции, см. рис. 313.
Типовые сценарии развертывания
Сценарий «Сервисный домен»
В домен ALD Pro вводятся только Linux-серверы, обеспечивающие работу корпоративных информационных систем, пользователи и сами корпоративные приложения остаются в домене Active Directory.
рис. 314 Архитектура сервисного домена
Такой сценарий развертывания упрощает администрирование серверной группировки, предоставляя следующие возможности:
-
Централизованное управление учетными записями администраторов системы, включая их SSH-ключи.
-
Автоматизация настройки ОС Astra Linux на серверах через механизм групповых политик ALD Pro (через Salt-скрипты).
-
Контроль доступа к серверам через правила HBAC и SUDO.
Сценарий «Ресурсный домен»
В домен ALD Pro переносятся не только серверы, но и «керберизированные» сетевые приложения (ресурсы), такие как файловые серверы, корпоративные веб-приложения и т.д. Пользователи и рабочие места сотрудников остаются в домене AD, доступ к ресурсам осуществляется через механизм доверительных отношений.
рис. 315 Архитектура ресурсного домена
Такой сценарий развертывания потребует участия разработчиков и квалифицированных администраторов, но станет значительным шагом в
направлении импортозамещения и предоставит следующие возможности:
-
Прозрачная аутентификация пользователей при обращении к ресурсам в Linux-домене через механизм доверительных отношений.
-
Возможность постепенного переноса корпоративных приложений в Linux-инфраструктуру по мере их готовности.
-
Возможность переноса учетных записей пользователей в Linux-домен, как только все нужные приложения окажутся в новой инфраструктуре.
Сценарий «Управление рабочими местами»
Сценарий предполагает, что в домен ALD Pro вводятся только рабочие места, и это позволяет обеспечить централизованное управление инфраструктурой Linux-компьютеров, а пользователи и ресурсы остаются в домене MS AD. Вход пользователей в компьютер осуществляется через механизм доверительных отношений.
рис. 316 Архитектура для управления рабочими местами
Этот сценарий позволит быстро заместить клиентскую инфраструктуру и отлично подходит организациям, у которых большинство корпоративных приложений не имеют толстых клиентов и работают как веб-приложения из браузера. Такой сценарий развертывания предоставит следующие возможности по управлению рабочими местами:
-
Автоматизация настройки рабочих станций через механизм групповых политик.
-
Контроль доступа к рабочим станциям через правила HBAC и SUDO.
-
Установка ОС на рабочие станции пользователей по сети.
Служба каталога FreeIPA поддерживает транзитивные двусторонние доверительные отношения с лесом Active Directory, извлекая информацию обо всех поддоменах. Первый и второй уровни работают по умолчанию, для поддержки третьего и последующих уровней требуется внесение дополнительных настроек.
Права доступа и политики в домене ALD Pro можно будет назначать как на отдельных пользователей доверенных доменов, так и на группы, используя механизм внешних групп (External Groups).
Для интеграции приложений потребуется минимум усилий, т.к. Керберос-билеты пользователям будут выдаваться центрами распространения ключей MS AD на тех же принципалов, с теми же PAC-сертификатами, содержащими полный набор идентификаторов безопасности, в т.ч. по участию в универсальных группах.
При этом централизованное управление инфраструктурой рабочих станций через привычный механизм групповых политик позволит удержать затраты по администрированию на прежнем уровне. Из коробки сотрудникам будут доступны сотни параметров и более 800 атрибутов для конфигурирования рабочих станций Astra Linux, а для управления корпоративными приложениями возможно будет разработать дополнительные параметры.
Если в компании используются толстые клиенты, разработанные под операционную систему Windows, в некоторых случаях их получится запускать из-под Linux, используя среду для запуска Windows-приложений Wine, с пробросом Kerberos-ключей через GSSAPI и связку ключей ядра Linux. Wine — это не самый стабильный продукт, но в случае бизнес-приложений, которые не используют аппаратное ускорение и другие продвинутые API, этот способ может вполне сработать.
Сценарий «Полное развертывание инфраструктуры»
В данном сценарии пользователи и сервисы работают в домене ALD Pro, интеграция с Active Directory не используется. Этот сценарий не является примером гибридного развертывания, его следует считать результатом полного импортозамещения, когда все пользователи и сервисы переведены на Linux и интеграция с инфраструктурой Windows больше не требуется.
рис. 317 Автономное развертывание
Доверительные отношения
Механизм работы доверительных отношений
Доверительные отношения дают возможность пользователям одного домена выполнять прозрачную аутентификацию по протоколу Kerberos V5 при обращении к ресурсам другого домена. Например, вы можете разрешить пользователям из домена AD DS входить в операционную систему компьютеров под управлением Astra Linux из домена ALD Pro или, наоборот, дать возможность пользователям ALD Pro подключаться с компьютеров Astra Linux к общим файловым ресурсам, находящимся в домене AD DS, см. рис. 318.
рис. 318 Схема доверительных отношений ALD Pro — AD DS
Система ALD Pro построена на базе службы каталога FreeIPA, в которой поддержка доверительных отношений с AD DS появилась с версии 3.0 путем интеграции с пакетом программ Samba. Доверительные отношения могут быть установлены как между лесами, где FreeIPA выступает в роли леса с одним доменом (Forest Trust), так и между конкретными доменами (External Trust), что в определенных случаях может быть предпочтительнее, например, чтобы сократить количество рекурсивных запросов на получение cross-realm билетов.
Механизм доверительных отношений реализован в протоколе аутентификации Kerberos V5, и понятие доверия является его фундаментом. Например, когда вы выполняете первый вход в операционную систему, у службы SSSD нет прямого доступа к вашим учетным данным, поэтому она не может выполнить проверку аутентичности самостоятельно и вынуждена доверять сервисному билету, выданному контроллером домена. Основанием для доверия является тот факт, что билет зашифрован паролем учетной записи компьютера, который известен только контроллерам домена и самому компьютеру. На стороне контроллера пароль хранится в LDAP-каталоге в атрибуте krbPrincipalKey учетной записи хоста, а на стороне компьютера в специальном файле на диске, см. klist -k /etc/krb5.keytab
.
Доверие между доменами работает похожим образом: в момент установления отношений в каждом из доменов создается специальная учетная запись доверенного домена с общим ключом или так называемый объект доверенного домена (trusted domain object, TDO). С помощью этого ключа «доверенный домен» (англ. trusted domain) шифрует кросс-доменные билеты пользователей, а «доверяющий домен» (англ. trusting domain) эти билеты расшифровывает и проверяет. Для доверяющего домена такое отношение считается исходящим (outgoing), а для доверенного домена оно считается входящим (incoming), т.е. направление доверия и направление доступа
противоположны друг другу, см. рис. 319.
рис. 319 Направление доверия и доступа
Если между двумя доменами установлено только одно доверительное отношение, то такое отношение называется односторонним. Если же между доменами установлено два доверительных отношения и домены доверяют друг другу, то такие отношения называются двусторонними.
рис. 320 Поток данных при выполнении Kerberos-аутентификации в доверительных отношениях
Рассмотрим, как работает аутентификация с использованием доверительных отношений, когда пользователю доверенного домена ALD.COMPANY.LAN нужно пройти аутентификацию в службе из доверяющего домена WIN.COMPANY.LAN, см. рис. 320:
-
Пользователь ALD запрашивает TGT-билет krbtgt/ALD.COMPANY.LAN@ALD.COMPANY.LAN у контроллера из своего родного домена ALD для выполнения последующей аутентификации на контроллерах ALD.
-
Контроллер ALD располагает учетными данными пользователя из своего домена, поэтому может подтвердить аутентичность запроса и выдать ему TGT-билет. Если пользователь сможет расшифровать ответ, он подтвердит тем самым свою аутентичность.
-
Пользователь ALD, используя TGT-билет krbtgt/ALD.COMPANY.LAN@ALD.COMPANY.LAN, обращается к контроллеру ALD за билетом cifs/fs-1.win.company.lan@ALD.COMPANY.LAN для последующей аутентификации в службе cifs на файловом сервере fs-1 из доверяющего домена WIN.
-
Контроллер ALD располагает мастер-ключом домена ALD, поэтому может успешно проверить аутентичность пользователя, но у него нет учетных данных службы из доверяющего домена WIN, поэтому контроллер возвращает ошибку KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN.
-
Пользователь ALD, используя TGT-билет krbtgt/ALD.COMPANY.LAN@ALD.COMPANY.LAN, обращается к своему контроллеру ALD за кросс-доменным TGT-билетом krbtgt/WIN.COMPANY.LAN@ALD.COMPANY.LAN для последующей аутентификации на контроллерах домена WIN.
-
Контроллер ALD располагает мастер-ключом домена ALD, поэтому может успешно проверить аутентичность пользователя. Контроллер ALD располагает также паролем доверительных отношений с доменом WIN, поэтому успешно выдает пользователю кросс-доменный TGT-билет.
Кросс-доменный билет является вспомогательным, поэтому не сохраняется в связке ключей, и вы не сможете увидеть его командой
klist
, если только не запросите его целевым образом с помощью командыkvno krbtgt/WIN.COMPANY.LAN@ALD.COMPANY.LAN
.Далее шаги 5 и 6 могут повториться рекурсивно несколько раз по количеству доменов, которые будут стоять на пути между клиентом и сервисом. Если домен A доверяет домену B, а домен B доверяет домену C, то пользователи из домена C могут получить доступ к сервисам из домена A транзитивно через домен B. По умолчанию доверительные отношения между ALD Pro и AD DS устанавливаются транзитивными.
-
Пользователь ALD, используя TGT-билет krbtgt/WIN.COMPANY.LAN@ALD.COMPANY.LAN, обращается к контроллеру WIN за полноценным TGT-билетом krbtgt/WIN.COMPANY.LAN@WIN.COMPANY.LAN.
-
Контроллер WIN располагает паролем доверительных отношений, поэтому успешно проверяет запрос, пересчитывает PAC-сертификат с учетом правил фильтрации и выдает пользователю полноценный TGT-билет из своего домена.
-
Пользователь ALD, используя TGT-билет krbtgt/WIN.COMPANY.LAN@WIN.COMPANY.LAN, обращается к контроллеру WIN за билетом cifs/fs-1.win.company.lan@WIN.COMPANY.LAN для аутентификации в службе cifs на файловом сервере fs-1 из этого домена.
-
Контроллер WIN располагает мастер-ключом домена WIN, поэтому может успешно проверить аутентичность пользователя. Контроллер WIN располагает также учетными данными сервиса из своего домена, поэтому успешно выдает пользователю TGS-билет cifs/fs-1.win.company.lan@WIN.COMPANY.LAN.
-
Пользователь ALD, используя TGS-билет cifs/fs-1.win.company.lan@WIN.COMPANY.LAN, обращается к службе cifs на файловом сервере fs-1 из домена WIN.
-
Файловый сервер располагает паролем службы cifs, поэтому может проверить и подтвердить аутентичность пользователя.
Примечание
В настройках службы SSSD можно задать опцию AD Site, с помощью которой можно настроить географическую балансировку между лесами доменов ALD Pro и AD DS. Опцию следует задать как на клиенте, так и на сервере ALD Pro. В этом случае при выполнении автоматического обнаружения сервисов клиент будет в первую очередь обращаться к SRV-записям указанного сайта.
Протокол Kerberos V5 регламентирует не только порядок аутентификации, но и позволяет передавать внутри билетов авторизационную информацию (поле AuthorizationData). Разработчики Active Directory разработали свой собственный стандарт MS-KILE, в соответствии с которым в этом поле можно передавать сертификат атрибута привилегий (Privilege Attribute Certificate, PAC), который содержит идентификаторы безопасности всех групп, участником которых является пользователь.
Сертификат MS-PAC формируется при выдаче TGT-билета и перекладывается из него во все сервисные билеты, поэтому для того чтобы изменения по участию пользователя в группах вступили в силу, ему нужно обновить свой TGT-билет, т.е. выйти из операционной системы и зайти в нее еще раз.
Для того чтобы пользователь из ALD Pro мог проходить на стороне MS AD не только аутентификацию, но и авторизацию, т. е. получать права доступа в соответствии со своим участием в группах, в службе каталога FreeIPA есть плагин ipa-kdb, который отвечает за формирование сертификата атрибута привилегий по стандарту MS-PAC.
При формировании сертификата используются значения атрибута ipaNTSecurityIdentifier, в котором хранится SID в формате MS Windows. Это значение рассчитывается в момент создания субъекта безопасности в соответствии с настройками текущего диапазона идентификаторов, за что отвечает плагин sidgen.
Посмотреть SID любого объекта можно, например, с помощью команды sudo wbinfo -n 'ALD\\admin'
, где ALD — это NetBIOS имя домена ald.company.lan, admin — это имя субъекта:
admin@dc-1:~$ sudo wbinfo -n 'ALD\\admin' S-1-5-21-1724891028-2898148248-1736958143-500 SID_USER (1)
Как мы видим, последний компонент идентификатора RID для пользователя admin из домена ALD Pro равен 500, что по соглашению MS соответствует идентификатору учетной записи Administrator. Можно добавить, что идентификатор группы admins равен 512, что соответствует группе Domain Admins. Относительные идентификаторы обычных пользователей и групп начинаются с 1000.
При желании вы можете исследовать PAC-сертификат Kerberos-билетов пользователей FreeIPA с помощью команды net ads kerberos pac
и убедиться, что все необходимые идентификаторы там присутствуют. Но вы не сможете назначить права доступа пользователям FreeIPA, т.к. стандартные оснастки Windows выполняют поиск объектов доверенного леса путем обращения к глобальному каталогу на порт 3268/TCP.
Именно по этой причине довольно часто можно встретить утверждение, что FreeIPA не поддерживает двусторонние доверительные отношения, т.к. с одной стороны они есть, но пользоваться ими невозможно. Для решения этой проблемы в системе ALD Pro был реализован модуль глобального каталога, см. рис. 321:
рис. 321 Иллюстрация работы модуля глобального каталога в ALD Pro
Пользователям ванильных версий FreeIPA можно только предложить пару обходных решений. Во-первых, на объекты файловой системы доступ можно назначить напрямую по идентификатору безопасности субъекта с помощью утилиты ICACLS (Integrity Control Access Control List).
c:\> ICACLS "C:\\Common" /grant:r "\*S-1-5-21-896088827-1417987318-1335504985-500 " /T
Кстати, в стандартном окне свойств файлового менеджера такие пользователи будут отображаться под своими обычными именами, т. к. процедура разрешения имен работает через RPC-вызов по протоколу SMB (445/TCP) без участия глобального каталога.
Во-вторых, можно воспользоваться более универсальным способом и назначать права через группы безопасности с областью действия «Локальный домен» (Domain Local). Добавить пользователей доверенного домена FreeIPA в локальную доменную группу можно следующим образом на powershell:
#SID Из леса ALD_Pro(Пользователь или группа) $AldSid = 'S-1-5-21-1784717832-1844364183-3442789864-1013' #Domain Local Group из леса Active Directory $DomainLocalGroupDN = 'CN=Contoso-Group-DL,CN=Users,DC=contoso,DC=dom' #Создание нового Directory Entry $group = New-Object DirectoryServices.DirectoryEntry("LDAP://$($DomainLocalGroupDN)") #Добавление AldSid в DomainLocal группу [void]$group.member.Add("<SID=$AldSid>") $group.CommitChanges() $group.Close()
В обратном направлении работа с авторизационной информацией поставлена немного иначе. В билетах Kerberos, конечно же, есть PAC-сертификат, но Linux-приложения запрашивают эту информацию через вызовы к системным библиотекам, которые обрабатываются службой SSSD. Например, при вызове утилиты id
никакие Kerberos-билеты пользователя не требуются:
admin@dc-1:~$ id Administrator@WIN.COMPANY.LAN uid=1633600500(administrator@win.company.lan) gid=1633600500(administrator@win.company.lan) группы=1633600500(administrator@win.company.lan),1633600520(group policy creator owners@win.company.lan),1633600519(enterprise admins@win.company.lan),1633600512(domain admins@win.company.lan),1633600518(schema admins@win.company.lan),1633600513(domain users@win.company.lan),959800006(fs_users)
Для получения авторизационной информации на пользователя Administrator из домена WIN.COMPANY.LAN служба SSSD делает не обычный поисковый LDAP-запрос, а отправляет расширенную операцию, которую на стороне сервера обрабатывает плагин exdom. Учитывая, что в LDAP-каталоге нужной информации нет, плагин обращается к службе SSSD на сервере, которая обрабатывает этот запрос по-разному в зависимости от того, какая роль назначена серверу:
-
На контроллерах доверия служба SSSD напрямую обращается к контроллерам AD DS по протоколу LDAP для преобразования идентификаторов и извлечения информации об участии пользователей доверенного домена в группах.
-
На агентах доверия служба SSSD проксирует такие запросы на один из контроллеров доверия ALD Pro, опять же, путем выполнения расширенной LDAP-операции.
Примечание
В домене ALD Pro всем контроллерам назначается роль контроллеров доверия, поэтому на них устанавливается пакет программ Samba, и вы с любого из них можете установить доверительные отношения с доменом AD DS.
Если при повышении роли сервера пользователь, выполняющий эту операцию, не входил в состав участников группы «ald trust admin», то продвижение завершится с ошибкой и контроллер будет обладать только ролью агента доверия. Для того чтобы завершить установку и назначить серверу роль контроллера доверия, нужно включить пользователя в указанную группу и запустить повторно скрипт ipa-aldtrust-install
Осталось только разобраться с идентификаторами. Учитывая, что в среде Linux используются не SID, а POSIX-идентификаторы, на стороне ALD Pro служба SSSD выполняет сопоставление идентификаторов одним из двух способов:
-
Если в AD DS установлен компонент Identity Management for UNIX (что маловероятно), то у объектов будут заданы атрибуты uidnumber/gidnumber, и вы сможете их использовать. Для этого в момент установления доверительных отношений следует указать параметр ipa-ad-trust-posix.
-
Если компонента Identity Management for UNIX нет (что вероятно), то параметр ipa-ad-trust-posix задавать не нужно, и по умолчанию идентификаторы будут рассчитываться математически. Для этого на стороне FreeIPA каждому доверенному домену из леса AD DS будет назначен диапазон POSIX-идентификаторов. Размер этого диапазона по умолчанию составляет 200 тысяч идентификаторов, поэтому для крупных доменов AD DS его нужно будет расширить вручную.
Вы можете назначать права доступа непосредственно на эти идентификаторы или задействовать внешние группы (External groups), которые являются аналогом Domain Local групп AD DS, т.к. позволяют добавлять субъекты из доверенного домена. Единственно, учтите, что у внешних групп нет POSIX-идентификаторов, поэтому для предоставления доступа к файловым ресурсам вам нужно будет включить их в состав обычных POSIX-групп.
Например, в следующем примере показано, как доменных администраторов AD DS можно включить в группу доменных администраторов ALD Pro:
admin@dc-1:~$ ipa group-add 'ad_admins_external' --external --desc='Группа администраторов AD DS' admin@dc-1:~$ ipa -n group-add-member 'ad_admins_external' --external 'WIN.COMPANY.LAN\\Domain Admins' admin@dc-1:~$ ipa group-add-member admins --groups='ad_admins_external' admin@dc-1:~$ id Administrator@WIN.COMPANY.LAN … 959800000(admins) …
Настройка доверительных отношений
Взаимное перенаправление DNS-зон
Для работы доверительных отношений нужно, чтобы из домена ald.company.lan разрешались доменные имена зоны win.company.lan и наоборот. Для этого нам нужно сделать взаимное перенаправление DNS-зон.
Для создания перенаправителя в домене win.company.lan выполните на контроллере домена AD DS следующую команду PowerShell:
PS> Add-DnsServerConditionalForwarderZone -Name "ald.company.lan" -ReplicationScope "Forest" -MasterServers [IP адрес ALDPro контроллера]
Проверьте возможность разрешения имен из зоны ald.company.lan:
admin@dc-1:~$ ping dc-1.ald.company.lan
Из интерфейса DNS-перенаправитель можно создать в оснастке DNS Manager, см.:numref:mod9_figure_image15:
рис. 322 Создание перенаправителя в DNS Manager Windows
Для создания перенаправителя в домене ald.company.lan выполните на контроллере домена ALD Pro следующую команду bash:
admin@dc-1:~$ ipa dnsforwardzone-add win.company.lan --forwarder=[IP адрес контроллера MS AD] --forward-policy=only
Проверьте возможность разрешения имен из зоны win.company.lan:
admin@dc-1:~$ ping dc-1.win.company.lan
Из интерфейса DNS-перенаправитель можно создать на странице , см. рис. 323:
рис. 323 Создание перенаправителя в портале управления ALD Pro
Настройка DNS-доверительных сетей (необязательно)
Если вы не хотите разрешать полный доступ к DNS на стороне ALD Pro, вам нужно будет настроить доверенные сети на каждом контроллере ALD Pro (FreeIPA). В файле /etc/bind/ipa-options-ext.conf
нужно внести trusted_network в список разрешенных сетей:
allow-recursion { trusted_network; }; allow-query-cache { trusted_network; } listen-on-v6 { any; }; dnssec-validation no;
В файле /etc/bind/ipa-ext.conf
перечислите доверенные сети:
acl "trusted_network" { localnets; localhost; 192.168.88.0/24; 172.19.3.0/24; 172.19.4.0/24; };
Проверка настройки времени
Для работы протокола Kerberos требуется, чтобы время на контроллерах домена ALD Pro и MS AD отличалось не более, чем на 5 минут. Виртуальные машины по умолчанию берут время с хостовой машины, поэтому при запуске стенда на одной физической машине проблем обычно не возникает, а в реальной инфраструктуре синхронизация времени является прямой задачей администратора.
Примечание
Протокол Kerberos использует время в формате UTC, т.е. без временных зон, поэтому, если в Windows временные зоны работают некорректно из-за отсутствия актуального обновления системы, то вы должны использовать неправильною зону, но ни в коем случае не сбивать фактическое значение времени по UTC на эмуляторе PDC.
На стороне ALD Pro используйте команды:
admin@dc-1:~$ systemctl status chrony.service admin@dc-1:~$ chronyc sources -v admin@dc-1:~$ chronyc tracking
На стороне MS AD используйте в терминале PowerShell команды:
c:\> w32tm.exe /query /configuration c:\> w32tm.exe /query /status (Get-Date).ToUniversalTime()
Создание траста между лесами (Forest Trust)
Во всех инструкциях создание траста начинают с выполнения команды ipa-adtrust-install
, которая подготавливает домен FreeIPA к работе с доверительными отношениями, в частности добавляет атрибут для хранения windows security identifier (SID). В случае ALD Pro это не требуется. Попробуйте команду ipa trustconfig-show
, чтобы убедиться в наличии идентификатора безопасности SID у домена:
admin@dc-1:~$ ipa trustconfig-show Домен: ald.company.lan Идентификатор безопасности: S-1-5-21-1307086432-2724870100-1147875473 Имя NetBIOS: ALD GUID домена: 7a522ccc-a0d7-4eac-a46a-46b12c93fa0e Резервная основная группа: Default SMB Group Агенты отношений доверия AD IPA: dc-1.ald.company.lan Контролёры отношений доверия AD IPA: dc-1.ald.company.lan
Перед созданием доверительных отношений нужно получить TGT-билет для учетной записи администратора домена admin:
admin@dc-1:~$ kinit admin
Траст можно добавить на стороне ALD Pro из командной строки.
admin@dc-1:~$ ipa -d -v trust-add --type=ad win.company.lan --admin administrator --password --two-way=true -------------------------------------------------------------------------------- Добавлено отношение доверия Active Directory для области (realm) "win.company.lan" -------------------------------------------------------------------------------- Имя области (realm): win.company.lan Имя домена NetBIOS: WIN Идентификатор безопасности домена: S-1-5-21-292663598-2229028806-4201728183 Направление отношения доверия: Двустороннее отношение доверия Тип отношения доверия: Домен Active Directory Состояние отношения доверия: Установлено и проверено
Где:
-
win.company.lan
— задает FQDN имя домена AD DS, с которым требуется установить доверительные отношения. -
Ключ
-d
— активируют режим отладки. -
Ключ
-v
— активирует расширенный режим вывода информации. -
Ключ
--admin
— задает имя привилегированной учетной записи из домена AD. -
Ключ
--password
— указывает, что у пользователя нужно запросить пароль для учетной записи, которая указана ключом--admin
.При установлении отношений рекомендуется указывать пароль, так как в этом случае все настройки будут выполнены автоматически. Но, если указанные учетные данные вам недоступны, вы можете попросить администратора домена AD DS создать траст на своей стороне и сообщить вам пароль доверительных отношений (trust password). В этом случае при установлении отношений нужно будет использовать ключ
--trust-secret
. -
Ключ
--two-way
— указывает на то, что доверительные отношения должны быть двусторонними.
Через графический интерфейс создать доверительные отношения можно на странице , см. рис. 324:
рис. 324 Создание доверительных отношений из графического интерфейса ALD Pro
Если в этот момент отслеживать сетевой траффик, то можно будет увидеть, что аутентификация в домене AD DS выполняется по Kerberos, а установление траста выполняется по транспортному протоколу SMB2 путем вызова удаленных команд RPC (да-да, вы уже знаете, что SMB-протокол — это не только файлы и принтеры). В тоже время билет на доступ к службе krbtgt в Windows домене не сохраняется в кэше sssd, поэтому команда klist
после установления траста не покажет вам дополнительных билетов.
После создания доверия можно посмотреть информацию о созданном трасте командами ipa trust-find
и ipa trust-show
:
admin@dc-1:~$ ipa trust-find --------------------------- найдено 1 отношение доверия --------------------------- Имя области (realm): win.company.lan Имя домена NetBIOS: WIN Идентификатор безопасности домена: S-1-5-21-292663598-2229028806-4201728183 Тип отношения доверия: Домен Active Directory --------------------------------- Количество возвращённых записей 1 --------------------------------- admin@dc-1:~$ ipa trust-show win.company.lan Имя области (realm): win.company.lan Имя домена NetBIOS: WIN Идентификатор безопасности домена: S-1-5-21-292663598-2229028806-4201728183 Направление отношения доверия: Двустороннее отношение доверия Тип отношения доверия: Домен Active Directory
И не забудьте, что для больших доменов AD DS нужно расширить диапазон идентификаторов, который по умолчанию составляет 200 тысяч. Для этого нужно воспользоваться командой ipa idrange-mod
утилиты ipa
. Точное имя диапазона можно посмотреть командой ipa idrange-find
.
admin@dc-1:~$ ipa idrange-find ------------------- найдено 2 диапазона ------------------- Имя диапазона: ALD.COMPANY.LAN_id_range Первый идентификатор POSIX диапазона: 959800000 Количество идентификаторов в диапазоне: 200000 Первый RID соответствующего диапазона RID: 1000 Первый RID вторичного диапазона RID: 100000000 Тип диапазона: local domain range Имя диапазона: WIN.COMPANY.LAN_id_range Первый идентификатор POSIX диапазона: 1633600000 Количество идентификаторов в диапазоне: 200000 Первый RID соответствующего диапазона RID: 0 SID доверенного домена: S-1-5-21-3250248711-3862619044-3424259349 Тип диапазона: Active Directory domain range --------------------------------- Количество возвращённых записей 2 --------------------------------- admin@dc-1:~$ ipa idrange-mod --range-size=1000000 WIN.COMPANY.LAN_id_range ipa: WARNING: Для применения изменений конфигурации необходимо перезапустить службу sssd.service на IPA-сервере WIN.COMPANY.LAN_id_range. ------------------------------------------------------------- Изменён диапазон идентификаторов "WIN.COMPANY.LAN_id_range" ------------------------------------------------------------- Имя диапазона: WIN.COMPANY.LAN_id_range Первый идентификатор POSIX диапазона: 1633600000 Количество идентификаторов в диапазоне: 1000000 Первый RID соответствующего диапазона RID: 0 SID доверенного домена: S-1-5-21-3250248711-3862619044-3424259349 Тип диапазона: Active Directory domain range
Если со временем в лесу Active Directory появятся дополнительные поддомены, нужно будет выполнить вручную команду trust-fetch-domains
утилиты ipa
, чтобы для этих доменов были созданы диапазоны идентификаторов:
admin@dc-1:~$ ipa trust-fetch-domains "WIN.COMPANY.LAN"
Создание внешнего траста между доменами (External Trust)
Доверительные отношения можно создать не только «лес к лесу», но и «домен к домену». Такие отношения называются внешними (External) и являются нетранзитивными. Создать такие отношения можно из командной строки, используя дополнительный ключ --external
.
admin@dc-1:~$ ipa -d -v trust-add --type=ad win.company.lan --admin administrator --password --two-way=true --external=true -------------------------------------------------------------------------------- Добавлено отношение доверия Active Directory для области (realm) "win.company.lan" -------------------------------------------------------------------------------- Имя области (realm): win.company.lan Имя домена NetBIOS: WIN Идентификатор безопасности домена: S-1-5-21-292663598-2229028806-4201728183 Направление отношения доверия: Двустороннее отношение доверия Тип отношения доверия: Нетранзитивное внешнее отношение доверия с доменом в другом лесу Active Directory Состояние отношения доверия: Установлено и проверено
Удаление траста
Удалить траст можно из командной строки и через веб-интерфейс ALD Pro:
admin@dc-1:~$ ipa trust-del win.company.lan
Обратите внимание, что на стороне Windows доверительные отношения нужно будет удалить вручную через оснастку Active Directory Domains and Trusts. Также не будут автоматически удалены диапазоны идентификаторов, что позволит вам повторно создать доверительные отношения с этим лесом/доменом в будущем, сохранив настройки сопоставления идентификаторов.
Проверка работоспособности доверительных отношений
Рассмотрим несколько диагностических действий, которые вы можете использовать для отладки работы доверительных отношений.
Посмотреть настройки доверия можно командой ipa trustconfig-show
:
admin@dc-1:~$ ipa trustconfig-show Домен: ald.company.lan Идентификатор безопасности: S-1-5-21-1307086432-2724870100-1147875473 Имя NetBIOS: ALD GUID домена: 7a522ccc-a0d7-4eac-a46a-46b12c93fa0e Резервная основная группа: Default SMB Group Агенты отношений доверия AD IPA: dc-1.ald.company.lan dc-XX.ald.company.lan Контролёры отношений доверия AD IPA: dc-1.ald.company.lan dc-XX.ald.company.lan
Посмотреть все доверительные отношения можно командой ipa trust-find
:
admin@dc-1:~$ ipa trust-find --------------------------- найдено 1 отношение доверия --------------------------- Имя области (realm): win.company.lan Имя домена NetBIOS: WIN Идентификатор безопасности домена: S-1-5-21-3250248711-3862619044-3424259349 Тип отношения доверия: Домен Active Directory --------------------------------- Количество возвращённых записей 1 ---------------------------------
Детальную информацию о конкретном трасте покажет команда ipa trust-show <REALM>
:
admin@dc-1:~$ ipa trust-show win.company.lan Имя области (realm): win.company.lan Имя домена NetBIOS: WIN Идентификатор безопасности домена: S-1-5-21-3250248711-3862619044-3424259349 Направление отношения доверия: Двустороннее отношение доверия Тип отношения доверия: Домен Active Directory
Проверить возможность извлечения авторизационной информации из доверенного домена можно с помощью команды id
. Предварительно целесообразно очистить кэш службы SSSD как на клиенте, так и на сервере:
admin@dc-1:~$ rm -rf /var/lib/sss/db/\* /var/lib/sss/mc/\* && systemctl restart sssd admin@dc-1:~$ id 'win\\administrator' admin@dc-1:~$ id administrator@win.company.lan
Пример результата:
admin@dc-1:~$ id administrator@win.company.lan uid=1131400500(administrator@win.company.lan) gid=1131400500(administrator@win.company.lan) группы=1131400500(administrator@win.company.lan),1131400520(group policy creator owners@win.company.lan),1131400513(domain users@win.company.lan),1131400519(enterprise admins@win.company.lan),1131400518(schema admins@win.company.lan),1131400512(domain admi ns@win.company.lan)
Проверять работу аутентификации в доверительных отношениях, выполняя kinit
на машине ALD Pro пользователем из доверенного домена AD DS, на самом деле совершенно бесполезно. Доверительные отношения в этом случае не используются. Для корректной работы этого механизма вполне достаточно, чтобы было настроено перенаправление DNS-зон. Вы можете включить расширенную трассировку, чтобы увидеть, что запрос уходит сразу на IP-адрес контроллера домена WIN.
admin@dc-1:~$ KRB5_TRACE=/dev/stderr kinit administrator@win.company.lan [30804] 1698829046.855690: Resolving unique ccache of type KEYRING [30804] 1698829046.855691: Getting initial credentials for administrator@win.company.lan [30804] 1698829046.855693: Sending unauthenticated request [30804] 1698829046.855694: Sending request (195 bytes) to win.company.lan [30804] 1698829046.855695: Initiating TCP connection to stream 192.168.88.85:88 [30804] 1698829046.855696: Sending TCP request to stream 192.168.88.85:88 [30804] 1698829046.855697: Received answer (198 bytes) from stream 192.168.88.85:88 [30804] 1698829046.855698: Terminating TCP connection to stream 192.168.88.85:88 [30804] 1698829046.855699: Response was from master KDC [30804] 1698829046.855700: Received error from KDC: -1765328359/Additional pre-authentication required [30804] 1698829046.855703: Preauthenticating using KDC method data [30804] 1698829046.855704: Processing preauth types: PA-PK-AS-REQ (16), PA-PK-AS-REP_OLD (15), PA-ETYPE-INFO2 (19), PA-ENC-TIMESTAMP (2) [30804] 1698829046.855705: Selected etype info: etype aes256-cts, salt "WIN- F8I3I8FPJ70Administrator", params "" [30804] 1698829046.855706: PKINIT client has no configured identity; giving up [30804] 1698829046.855707: PKINIT client has no configured identity; giving up [30804] 1698829046.855708: Preauth module pkinit (16) (real) returned: 22/Недопустимый аргумент Password for administrator@win.company.lan:
В проверке доверительных отношений очень помогает утилита kvno
. С ее помощью вы можете запросить билет на любой сервис доверенного домена:
admin@dc-1:~$ kinit admin Password for admin@ALD.COMPANY.LAN: admin@dc-1:~$ kvno cifs/dc-1.win.company.lan@WIN.COMPANY.LAN cifs/dc-1.win.company.lan@WIN.COMPANY.LAN: kvno = 5 admin@dc-1:~$ klist Ticket cache: KEYRING:persistent:959800000:krb_ccache_bkldI6V Default principal: admin@ALD.COMPANY.LAN Valid starting Expires Service principal 24.04.2024 13:58:37 25.04.2024 23:58:37 cifs/dc-1.win.company.lan@WIN.COMPANY.LAN 24.04.2024 13:58:37 25.04.2024 23:58:37 krbtgt/WIN.COMPANY.LAN@WIN.COMPANY.LAN 24.04.2024 13:58:37 25.04.2024 13:58:32 krbtgt/ALD.COMPANY.LAN@ALD.COMPANY.LAN
Точно также можно получить даже кросс-доменный билет, который обычно не сохраняется в связке ключей:
admin@dc-1:~$ kvno krbtgt/WIN.COMPANY.LAN@ALD.COMPANY.LAN krbtgt/WIN.COMPANY.LAN@ALD.COMPANY.LAN: kvno = 1
Глобальный каталог
Глобальный каталог AD
В лесу Active Directory может быть много поддоменов, и, чтобы ускорить поиск нужной информации, разработчики Microsoft придумали такую роль, как глобальный каталог (англ. Global Catalog).
Контроллер домена, которому назначена роль глобального каталога, с помощью штатной процедуры репликации извлекает из всех поддоменов краткую информацию об объектах (Partial Attribute Set, PAT) и предоставляет ее приложениям по запросу. При желании вы можете расширить набор реплицируемых атрибутов. Для этого в редакторе схемы для нужного атрибута достаточно установить флажок «Копировать этот атрибут в глобальный каталог» (Replicate this attribute to the Global Catalog).
Глобальный каталог предоставляет данные по протоколу LDAP на портах 3268/tcp (LDAP) и 3269/tcp (LDAPS). В Active Directory первый контроллер автоматически получает роль глобального каталога, но она может быть назначена не всем контроллерам в домене. Автоматическое обнаружение серверов, которым назначена роль глобального каталога, выполняется по SRV-записям вида _ gc._tcp.<DNSDomainName>.
Глобальный каталог ALD Pro
В службе каталога FreeIPA нет глобального каталога, что становится большой проблемой при использовании системы в гибридных сценариях развертывания, поэтому в ALD Pro эта функция была реализована в виде дополнительного модуля.
рис. 325 Архитектура глобального каталога ALD Pro
Модуль глобального каталога устанавливается на всех контроллерах в домене, и за его работу отвечают службы dirsrv@GLOBAL-CATALOG
и ipa-gcsyncd
, см. рис. 325. Первая служба обеспечивает работу дополнительного LDAP-бэкенда на порту 3268/TCP, а вторая синхронизирует информацию глобального каталога с основным каталогом, выполняя необходимую трансформацию данных.
Синхронизация работает на основе механизма репликации syncrepl. Служба ipa-gcsyncd
извлекает из основного LDAP-каталога информацию о пользователях и группах, модифицирует ее с учетом схемы AD DS, которую ожидают увидеть клиенты Windows, и сохраняет в базу глобального каталога. Модификация данных выполняется по следующим шаблонам.
Шаблон модификации учетных записей пользователей
{% macro first_val(attr) -%} {{ entry[attr][0] }} {%- endmacro %} dn: cn={{ first_val('uid') }},cn=users,{{ suffix }} objectClass: top objectClass: person objectClass: organizationalPerson objectClass: ad-top objectClass: ad-organizationalPerson objectClass: user objectClass: securityPrincipal objectClass: posixAccount objectClass: inetUser objectClass: gcobject cn: {{ first_val('uid') }} sn: {{ first_val('sn') }} {%- if entry['givenname'] %} givenName: {{ first_val('givenname') }} {%- endif %} instanceType: 4 {%- if entry['displayname'] %} displayName: {{ entry.single_value['displayname'] }} {%- endif %} name: {{ first_val('cn') }} objectGUID:: {{ guid }} userAccountControl: 66048 primaryGroupID: 513 objectSid:: {{ sid }} sAMAccountName: {{ pkey }} sAMAccountType: 805306368 {%- if entry['krbcanonicalname'] %} userPrincipalName: {{ entry.single_value['krbcanonicalname'] }} {%- else %} userPrincipalName: {{ first_val('krbprincipalname') }} {%- endif %} objectCategory: CN=Person,CN=Schema,CN=Configuration,{{ suffix }} {%- if entry['mail'] %} mail: {{ first_val('mail') }} {%- endif %} uidnumber: {{ first_val('uidnumber') }} gidnumber: {{ first_val('gidnumber') }} {%- for uid in entry['uid'] %} uid: {{ uid }} {%- endfor %} homeDirectory: {{ first_val('homedirectory') }} {%- for group in entry['memberof'] %} memberof: {{ group }} {%- endfor %} nTSecurityDescriptor: D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(OA;;WP;736e4812-af31-11d2-b7df-00805f48caeb;bf967ab8-0de6-11d0-a285-00aa003049e2;CO)(A;;SD;;;CO) gcuuid: {{ entryuuid }}
Шаблон модификации групп
{% macro first_val(attr) -%} {{ entry[attr][0] }} {%- endmacro %} dn: cn={{ pkey }},cn=users,{{ suffix }} objectClass: top objectClass: ad-top objectClass: group objectClass: securityprincipal objectClass: nsmemberof objectClass: gcobject objectClass: posixGroup cn: {{ pkey }} instanceType: 4 name: {{ pkey }} objectGUID:: {{ guid }} objectSid:: {{ sid }} sAMAccountName: {{ pkey }} sAMAccountType: 268435456 objectCategory: CN=Group,CN=Schema,CN=Configuration,{{ suffix }} ntsecuritydescriptor: D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;AO)(A;;RPLCLORC;;;PS)(OA;;CR;ab721a55-1e2f-11d0-9819-0aa0040529b;;AU) {%- for member in entry['member'] %} member: {{ member }} {%- endfor %} {%- for group in entry['memberof'] %} memberof: {{ group }} {%- endfor %} gidnumber: {{ gidnumber }} groupType: {{ groupType }} gcuuid: {{ entryuuid }}
Установка глобального каталога ALD Pro
Вы можете поставить модуль глобального каталога при установке первого контроллера домена. Для этого вам необходимо дополнительно установить пакет aldpro-gc и выполнять продвижение с ключом --setup_gc
:
sudo DEBIAN_FRONTEND=noninteractive apt-get install -q -y aldpro-mp aldpro-gc sudo aldpro-server-install -d ald.company.lan -n dc-1 -p 'AstraLinux_174' --ip 10.0.1.11 --no-reboot --setup_gc
В дальнейшем вы можете доустановить модуль, используя подсистему обновления. Достаточно вызвать следующую команду на dc-1, после чего глобальный каталог установится на все контроллеры в домене:
sudo aldpro-update-all --repo 'deb https://dl.astralinux.ru/aldpro/frozen/01/2.2.0 1.7_x86-64 main base'--username admin --password 'AstraLinux_174' --all --setup_gc
Ключ --repo
указывает репозиторий, откуда будет взят пакет глобального каталога. Ключ является обязательным, т.е. его нужно указать даже в случае предварительной установки пакета глобального каталога на контроллер домена.
После установки вы можете убедиться, что ГК был установлен, выполнив команду:
До установки ГК:
admin@dc-1:~$ sudo ipactl status Directory Service: RUNNING krb5kdc Service: RUNNING kadmin Service: RUNNING named Service: RUNNING httpd Service: RUNNING ipa-custodia Service: RUNNING smb Service: RUNNING winbind Service: RUNNING ipa-otpd Service: RUNNING ipa-dnskeysyncd Service: RUNNING ipa: INFO: The ipactl command was successful
После установки ГК:
admin@dc-1:~$ sudo ipactl status Directory Service: RUNNING krb5kdc Service: RUNNING kadmin Service: RUNNING named Service: RUNNING httpd Service: RUNNING ipa-custodia Service: RUNNING smb Service: RUNNING winbind Service: RUNNING ipa-otpd Service: RUNNING ipa-dnskeysyncd Service: RUNNING dirsrv@GLOBAL-CATALOG Service: RUNNING ipa-gcsyncd Service: RUNNING ipa: INFO: The ipactl command was successful
Далее вы обнаружите systemd службу ipa-gcsyncd.service
, которая отвечает за синхронизацию глобального каталога.
admin@dc-1:~$ systemctl status ipa-gcsyncd.service ● ipa-gcsyncd.service - Служба синхронизации Глобального каталога Loaded: loaded (/lib/systemd/system/ipa-gcsyncd.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2024-03-29 17:09:05 MSK; 35min ago Main PID: 2253 (gcsyncd.py) Tasks: 1 (limit: 4915) Memory: 87.5M CPU: 2.978s CGroup: /system.slice/ipa-gcsyncd.service └─2253 /usr/bin/python3 /opt/gc/exec/gcsyncd.py мар 29 17:09:05 dc-1.aldpro.mycompany.lan systemd[1]: Started Служба синхронизации Глобального каталога. мар 29 17:09:12 dc-1.aldpro.mycompany.lan gcsyncd.py[2253]: ipa: INFO: LDAP bind... мар 29 17:09:12 dc-1.aldpro.mycompany.lan gcsyncd.py[2253]: ipa: INFO: Commencing sync process мар 29 17:09:12 dc-1.aldpro.mycompany.lan gcsyncd.py[2253]: ipa: INFO: Initial LDAP dump is done, now synchronizing
Вы также обнаружите после установки ГК, что в DNS создались дополнительные SRV-записи для автоматического обнаружения сервиса со стороны Windows-клиентов.
_ldap._tcp.Default-First-Site-Name._sites.gc._msdcs _ldap._tcp.gc._msdcs _gc._tcp.Default-First-Site-Name._sites _gc._tcp
Найти их можно с помощью утилиты ipa
, отфильтровав по слову «gc» с помощью утилиты grep
:
admin@dc-1:~$ ipa dnsrecord-find ald.company.lan | grep gc Имя записи: \_ldap._tcp.Default-First-Site-Name._sites.gc._msdcs Имя записи: \_ldap._tcp.gc._msdcs Имя записи: \_gc._tcp.Default-First-Site-Name._sites Имя записи: \_gc._tcp
Потом можно посмотреть каждую по отдельности:
admin@dc-1:~$ sudo ipa dnsrecord-find ald.company.lan --name=_gc._tcp ... Имя записи: \_gc._tcp SRV record: 0 100 3268 dc-1.ald.company.lan. --------------------------------- Количество возвращённых записей 1 ---------------------------------
Присоединение Windows-машины к домену ALD Pro
Конечная цель проектов импортозамещения в ИТ — полный отказ от операционной системы Windows. Но, как говорится, гладко было на бумаге, да забыли про овраги. Может так оказаться, что быстро заменить какие-то клиентские корпоративные приложения, написанные под эту операционную систему, не получится. В этом случае вам может пригодиться возможность присоединения Windows-компьютеров к домену ALD Pro.
Присоединение Windows-клиентов к домену FreeIPA не находится в фокусе внимания команды разработчиков этой службы каталога, так как проект ставит своей целью не заменить Active Directory для Windows-компьютеров, а создать аналогичное решение для компьютеров под управлением операционной системы Linux. Однако компания Microsoft еще с версии Windows 2000 поддерживает возможность интеграции своих ОС с областями Kerberos, которые совместимы с RFC 2136, а центр распределения ключей FreeIPA работает как раз на базе эталонной реализации MIT KDC. То есть, ничто не препятствует тому, чтобы вводить Windows-компьютеры напрямую в домен FreeIPA.
Более того, разработчики FreeIPA реализовали возможность интеграции своего домена с Active Directory на уровне доверительных отношений за счет компонента Samba AD, поэтому контроллеры домена, помимо Kerberos, поддерживают такие протоколы, как NetBIOS, SMB, Netlogon (MS-NRPC) и NTLM. В базе данных DNS есть SRV-записи по стандартам Microsoft, а Kerberos-билеты содержат не только аутентификационные данные, но и сертификат PAC, включающий SID’ы пользователя и всех его групп.
Все эти особенности открывают дополнительные возможности по работе Windows-компьютеров в составе домена FreeIPA. Далее мы расскажем, как правильно задействовать эти отличительные черты, чтобы получить доступ к следующим функциям:
-
вход в ОС Windows с помощью учетных записей из домена ALD Pro;
-
прозрачная аутентификация при обращении пользователя к керберизированным ресурсам, например, файловым серверам;
-
получение уведомлений об истечении срока действия пароля и возможность сменить пароль штатными функциями ОС Windows;
-
предоставление доменным пользователям прав доступа к локальным ресурсам Windows-компьютера с учетом их участия в доменных группах;
-
синхронизация времени рабочей станции с временем на контроллерах домена;
-
динамическое изменение DNS-записей в домене при изменении IP-адреса на сетевом интерфейсе Windows-компьютера.
Полная инструкция занимает два десятка страниц и подробно рассказывает о том, как настроить Kerberos-аутентификацию, синхронизацию времени, динамическое обновление DNS-записей, домен для входа по умолчанию и многие другие аспекты. Вы можете ознакомиться с этой информацией в нашей статье на Хабре, поэтому укажем только, что команда ALD Pro разработала для вас специальную графическую утилиту aldpro-join.exe
, которая позволяет выполнить все настройки в пару кликов, см. рис. 326:
рис. 326 Присоединение компьютера к домену с помощью утилиты aldpro-join.exe
Приложение написано на языке Python и доступно в публичном репозитории продуктовой команды на GitFlic как в виде исходных кодов, так и в виде скомпилированного с помощью Pyinstaller исполняемого exe-файла.
Практика и тестирование
- Практическая работа: Модуль 9. Миграция и гибридное развертывание. Интеграция с Microsoft Active Directory
- Тест: Модуль 9. Миграция и гибридное развертывание. Интеграция с Microsoft Active Directory
Заключение
В этом модуле мы рассмотрели один из наиболее действенных механизмов гибридного развертывания, без которого не обойдется ни один проект импортозамещения! Далее займемся резервным копированием.
Дополнительные источники информации:
-
Статья «Двусторонние трасты с AD DS и реализация глобального каталога в ALD Pro»
-
Статья «Хотите присоединить Windows к домену ALD Pro (FreeIPA)? Спросите меня как»
Сначала было слово. Потом появилось MS Active Directory, а чуть позже ALD Pro на Astra Linux. И настало время подружить их. Первым шагом к этому будет настройка доверительных отношений, благодаря которым пользователи одного домена смогут авторизовываться в другом. В статье описываются работы на стенде с Astra Linux 1.7.4, ALD Pro 2.0.1 и MS AD на Windows Server 2022 (уровень леса 2016).
Со стороны Windos для начала надо озаботиться видимостью домена ALD Pro. Для этого добавим DNS зону условной пересылки. Для этого открываем DNS Manager -> правой кнопкой по «Conditional Forwarders» -> «New Conditional Forwarder…». В открывшемся окне указываем имя домена, запросы к которому хотим пересылать:
Поначалу напротив IP-адреса может показываться крестик, но если вы настроили всё правильно, можно не обращать на него внимания. Далее нажимаем «OK».
Должно получиться нечто следующее:
Если теперь зайти в свойства новой записи и нажать «Edit», то можно увидеть, что теперь напротив IP-адреса стоит зеленая галочка и значит всё настроено правильно:
Теперь переходим к настройке доверительных отношений. Открываем Active Directory Domains and Trusts. Правой кнопкой по конфигурируемому домену и открыть свойства:
Открываем вкладку «Trusts» и нажимаем «New Trust…». Откроется визард по настройке доверительных отношений:
Нажимаем «Next» и в поле Name указываем имя линуксового домена:
Далее указываем тип отношений, тут надо выбирать под задачи. В примере выбираем «Forest Trust»:
Здесь указвыаем направление доверия, опять же надо исходить из своих задач. В примере будут двусторонние:
Далее указываем, что доверие настроить только на текущем домене:
Выбираем «Forest-wide authentication»:
Указываем пароль для настройки доверия:
Потом везде нажимаем далее и выбираем не подтверждать исходящее доверие и не подтверждать входящее доверие.
Далее настраиваем доверие со стороны ALD Pro.
Первым делом выключаем dnssec-validation на КД ALD Pro:
sudo nano /etc/bind/ipa-options-ext.conf
Находим строку:
dnssec-validation yes;
И исправляем её на:
dnssec-validation no;
Сохраняем и перезапускаем FreeIPA (ALD Pro работает поверх FreeIPA)
sudo ipactl restart
Далее приступаем к настройке доверительных отношений.
Для этого открываем веб-панель управления ALD Pro и переходим в раздел «Управление доменом» -> «Интеграция с MS AD»
Там нажимаем «Новое подключение к Active Directory»
Заполняем поля:
«Домен» — имя домена, с которым настраиваем доверительные отношения
Влючаем «Перенаправление зоны DNS», чтобы имя windows-домена могло резолвиться
«IP-адрес DNS сервера» — IP-адрес DNS сервера, который может резолвить имя windows-домена
Ставим галку на «Доверительные отношения» и если надо, то и на «Двусторонние доверительные отношения»
и нажимаем сохранить
Если возникает ошибка
Далее идём в интерфейс управления FreeIPA (ALD Pro работает на её основе) по адресу
https://adc01.astra.lab/ipa/ui/ (только укажите имя вашего домена)
изначально появится окошко с предложением ввести логин и пароль
нажимаем Cancel пару раз и загрузится уже веб-интерфейс FreeIPA с предложением логина и пароля
Здесь уже вводим учётные данные администратора домена (имя admin и пароль, указанный при настройке ALD Pro)
Идём в «IPA Server» -> «Trusts» -> «Trusts»
И нажимаем кнопку Add
Появится окно настройки, которое заполняем следующим образом
нажимаем Add, он какое-то время думает и выдает следующую ошибку:
нажимаем Cancel, закрываем окно добавления доверия. Нажимаем Refresh и видим созданное доверие:
после данной операции доверительные отношения в ALD Pro будут создаваться без ошибок.
Автор: Фирсин Сергей Викторович
Организация: СПб ГБ ПОУ «Радиотехнический колледж»
Населенный пункт: г. Санкт-Петербург
Аннотация:
В данной статье рассматривается процесс интеграции двух популярных систем управления идентификацией и доступом — ALD Pro и Active Directory. ALD Pro представляет собой мощный инструмент для управления доступом в корпоративных средах, тогда как Active Directory является стандартным каталогом служб Windows, широко применяемым в организациях по всему миру. Мы исследуем методы и средства, доступные для этих двух систем без использования сторонних решений.
Введение:
Целью проектов по импорт замещению в области информационных технологий является полный переход от операционной системы Windows. Однако, как говорят, планы могут столкнуться с препятствиями на практике. Замена некоторых корпоративных приложений, написанных под Windows, может оказаться нетривиальной задачей. В таком случае вам может пригодиться возможность подключения компьютеров с Windows к домену ALD Pro.
В этой статье мы рассмотрим, как добиться максимальной эффективности при таком сценарии развертывания. Если вы искали информацию по этой теме, но не знали, где ее найти, то вы на правильном пути. Давайте начнем!
Даже если ваша инфраструктура пока еще использует стандартную систему FreeIPA, этот материал будет полезен.
Присоединение клиентов с Windows к домену FreeIPA не является основной целью команды разработчиков этой службы каталога, так как их задача — не заменить Active Directory для компьютеров с Windows, а предоставить аналогичное решение для систем с Linux. Тем не менее, компания Microsoft поддерживает возможность интеграции своих операционных систем с областями Kerberos, совместимыми с RFC 2136, начиная с версии Windows 2000, а центр распределения ключей FreeIPA работает на базе эталонной реализации MIT KDC. Таким образом, нет препятствий для включения компьютеров с Windows в домен FreeIPA.
Инициирование соединения со стороны АЛД Про
— с любого компьютера в локальной сети зайти в веб-консоль управления FreeIPA, не самого АЛД:
- https://dc/ipa/ui
(проще всего включить обратно глобальный интерфейс на клиенте АЛД и скачать пакеты браузера Firefox:
- sudo apt install firefox
после того как пакеты установятся, запустить браузер можно через Пуск – поиск; далее снова отключить глобальный интерфейс)
- IPA-сервер – Отношения доверия – Отношения доверия — Добавить
- домен: [имя домена Active Directory]
- галочка «двустороннее отношение»
- установить с помощью: [ввести учетные данные «администратора для синхронизации доменов», которого ранее создавали на контроллере AD]
- тип диапазона: Домен AD
кнопка «Добавить»
Принятие соединения со стороны Active Directory
— Диспетчер серверов – оснастка «Домены и доверие» — «Свойства» вашего домена – Отношения доверия
— здесь отношение доверия уже может настроиться автоматически, в таком случае перейти к пункту 2). Если доверия еще нет, перейти к пункту 1)
1)
-
-
- «Создать отношение доверия»
- имя: [ваш.домен АЛД]
- тип доверия: доверие леса
- направление: двунаправленное
- для кого создать: только для этого домена
- проверка: проверка леса
- пароль доверия: [любой, но его желательно запомнить]
- подтвердить исходящее доверие
- подтвердить входящее доверие (учетные данные admin/[ваш пароль администратора АЛД]
-
2) Проверка применения настроек пересылки DNS:
Свойства – Отношения доверия – Свойства – Маршрутизация суффиксов имен: здесь должен автоматически настроиться редирект суффикса «*.ваш.домен АЛД»:
Выполнение перекрестного входа в домен
— перезагрузить AD, АЛД, клиента АЛД
— на клиенте АЛД совершить вход в домен Active Directory с учетными данными пользователя-клиента (создавали ранее при настройке контроллера Active Directory)
(в списке доступных доменов AD может появиться не сразу; стоит подождать около 5 минут, прежде чем считать недоступность ошибкой)
Заключение:
Интеграция ALD Pro и Active Directory с использованием стандартных средств представляет собой важный шаг в обеспечении безопасности и эффективного управления доступом в корпоративной среде. Реализация данного процесса требует внимательной настройки и тщательного тестирования, однако результаты могут значительно повысить эффективность управления информационными ресурсами организации.
Опубликовано: 11.05.2024
В этой статье будет рассмотрена установка Astra Linux Directory – реализация службы каталогов от компании АО «НПО РусБИТех» (Astra Linux). Особо отмечу, что речь идет про бесплатную версию Astra Linux Directory, а не Pro версию.
Цель статьи – это подготовить руководство для быстрого старта, которое позволило бы вам в разумные строки развернуть стенд для тестирования службы каталогов Astra Linux Directory.
Краткое описание служб каталогов ALD
Существует две версии продукта – Astra Linux Directory и Astra Linux Directory Pro. Как бы это странно не звучало, но технически это два разных продукта. Astra Linux Directory используются свой вариант каталога, а в основе служб каталогов Astra Linux Directory Pro лежит FreeIPA.
Astra Linux Directory доступна из коробки в бесплатной редакции Astra Linux Common Edition.
Кратко опишу основные возможности бесплатной версии Astra Linux Directory:
- Позволяет организовать централизованное хранение и управление учетными записями пользователей и групп.
- Предоставляет сквозную аутентификацию пользователей в домене с использованием протокола Kerberos.
- Обеспечивает функционирование глобального хранилища домашних директорий, доступных по Samba/CIFS.
К основным особенностям я бы отнес следующие:
- Поддерживает только клиенты с ОС Astra Linux.
- Добавление машины ОС MS Windows в домен ALD штатными средствами ОС MS Windows невозможно.
- Одновременной работы нескольких серверов ALD не предусмотрено.
- Переключение на резервный сервер ALD только вручную.
- «Плоская» иерархия пользователей и ПК, т.е. нет возможности, например, создавать OU.
Все приведенные мной выше умозаключения отражают только мое видение продукта и относятся к версии 1.7.37.
Планируемая схема установки
Планируемая к развертыванию схема приведена ниже:
Она включает в себя один сервер (ADC01) и один клиент (ACLT01). В качестве службы разрешения имен я буду использовать сервер BIND. В целом для такой схемы можно вообще не использовать BIND, а просто сделать соответствующие записи в /etc/hosts.
Подготовка операционных систем
У Astra Linux Directory Common Edition нет градации на серверных и клиентские редакции ОС. Поэтому предварительная подготовка сервера и клиента ничем не отличаются.
Во всех примерах этой статьи использовалась версия Astra Linux Directory Common Edition релиза “Орёл” (2.12.43). Версия ядра – 5.10.0.-1038.40-hardened.
Итого подготовка серверной и клиентской системы включает в себя следующие шаги:
1. Установка и первоначальная настройка операционной системы. Можете использовать как физическое устройство, так и виртуальную машину. В целом можно использовать стандартные параметры установки, но вот версия ядра должна быть именно “hardened”:
2. Актуализация репозиториев:
apt update
3. Обновление установленных пакетов:
apt upgrade
Установка Astra Linux Directory включает в себя следующие верхнеуровневые шаги:
- Настройка BIND.
- Установка и настройка серверных служб ALD.
Предварительно неоходимо указать в качестве DNS сервера на сетевом интерфейсе адрес самого сервера.
Настройка BIND
Нам нужен вариант с локальным DNS сервером.
- Устанавливаем пакет BIND:
apt install bind9
2. Устанавливаем пакет утилит для работы с DNS (например, в этот пакет входит утилита dig):
apt install dnsutils
3. Корректируем настройка BIND. Нужно указать на каких IP-адресах сервера прослушивать запросы и на какие внешние DNS следует перенаправлять запросы. Открываем на редактирование конфигурационный файл:
nano /etc/bind/named.conf.options
Нам нужно скорректировать секции “forwarders” и “listen-on”. В секции “forwarders” нужно указать на какие внешние DNS перенаправлять запросы, а в секции “listen-on” нужно указать локальные адреса, на которых сервер будет прослушивать подключения. Пример моего файла конфигурации:
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
forwarders {
8.8.8.8;
};
listen-on {
127.0.0.1;
10.10.10.37;
};
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
4. Теперь необходимо внести информацию и прямой и обратной зоне. В моем случае DNS-имя зоны будет itproblog.ru. Открываем на редактирование конфигурационный файл:
nano /etc/bind/named.conf.local
Пример моего конфигурационного файла named.conf.local:
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "itproblog.ru" {
type master;
file "/etc/bind/zones/db.itproblog.ru";
};
zone "10.10.10.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.10.10.10";
};
В секции type указан тип зоны (основная зона), а в секции file расположение файла с текстом зоны (его мы настроим далее).
5. Создаем каталог для файлов DNS зон, создаем пустые файлы зон и назначаем необходимые разрешения:
mkdir /etc/bind/zones
touch /etc/bind/zones/db.itproblog.ru
touch /etc/bind/zones/db.10.10.10
chown -R bind:bind /etc/bind/zones
6. Редактируем файл с прямой зоной:
nano /etc/bind/zones/db.itproblog.ru
Пример моего файла прямой зоны:
$TTL 604800
@ IN SOA adc01.itproblog.ru. root.itproblog.ru. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS adc01.itproblog.ru.
adc01 IN A 10.10.10.37
aclt01 IN A 10.10.10.36
7. Редактируем файл с обратной зоной:
nano /etc/bind/zones/db.10.10.10
Пример моего файла обратной зоны:
$TTL 604800
@ IN SOA itproblog.ru. root.itproblog.ru. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS adc01.itproblog.ru
37 IN PTR adc01.itproblog.ru
36 IN PTR aclt01.itproblog.ru
8. Проверяем корректность заполнения конфигурационного файла и файлов зон:
named-checkconf
named-checkzone itproblog.ru /etc/bind/zones/db.itproblog.ru
named-checkzone 10.10.10.in-addr.arpa /etc/bind/zones/db.10.10.10
Если ваш вывод на консоль отличается от вывода со скриншота выше, то, вероятно, нужно скорректировать ошибки в конфигурационных файлах.
9. Перезагружаем сервис BIND:
systemctl restart bind9
10. Проверяем разрешение имени через наш DNS сервер:
dig @localhost adc01.itproblog.ru
dig 10.10.10.37 aclt01.itproblog.ru
т.е. имена сервера и клиента успешно разрешаются в IP-адреса.
Установка служб Astra Linux Directory
- Устанавливаем основной пакет ALD сервера и графический интерфейс администрирования Fly:
apt install ald-server-common fly-admin-ald-server
В процессе установки нас попросят указать пароль администратора LDAP. Указываем его:
2. Указываем полное доменное имя сервера:
hostnamectl set-hostname adc01.itproblog.ru
Проверяем:
hostnamectl
Да, полное доменное имя применилось корректно.
3. Перезагружаем сервер.
4. Теперь необходимо создать домен. Переходим по следующему пути в графическом режиме: “Пуск” – “Панель управления” – “Сеть” – “Доменная политика безопасности“.
5. Указываем пароль, который мы задали на этапе установки сервера ALD.
6. Поскольку пока еще сервер ALD не настроен, то могут возникать ошибки в диалоговых окна. Пока просто игнорируем их.
7. Указываем пароль базы данных Kerberos, пароль администратора ALD.
Я также отметил опцию “Использовать свои настройки сети” и выбрал IP-адрес для службы. После этого нажимаем кнопку “Создать сервер”.
8. Нажимаем “Да” в подтверждении о том, что мы согласны с тем, что предыдущая БД будет перезаписана (если она имеется).
9. В случае успешного завершения создания сервера мы получим соответствующее уведомление:
10. Перезагружаем сервер.
Проверка работы серверных служб ALD
Выполнил проверку сервиса ALD:
ald-init status
Сообщение говорит о том, что сервис сконфигурирован, клиент и сервис работают корректно.
Теперь попробуем открыть графическую оснастку администрирования. Переходим по следующему пути в графическом режиме: “Пуск” – “Панель управления” – “Сеть” – “Доменная политика безопасности“:
Нажимаем кнопку “Подключиться”.
Указываем пароль администратора ALD:
В случае успешного подключения мы должны увидеть древовидно меню слева, как указано на скриншоте ниже.
Создание тестовых пользователей
Для того, чтобы проверить подключение клиента и работу под доменной УЗ создадим две учетные записи – user1 и user2.
Переходим по следующему пути в графическом режиме: “Пуск” – “Панель управления” – “Сеть” – “Доменная политика безопасности“. Указываем пароль администратора ALD.
В контекстном меню элемента “Пользователи” выбираем пункт “Создать“:
“:
Заполняем имя пользователя и указываем первичную группу “Domain Users”:
Подтверждаем наши намерения создать пользователя (зеленая галочка).
Создаем пароль для учетной записи:
Выполняем аналогичные действия для учетной записи user2.
Итого, в нашей директории должно быть два пользователя – user1 и user2:
Предварительно на клиентском ПК необходимо указать в качестве DNS сервера наш сервер с ALD, т.к. именно там мы настроили BIND DNS.
Перезагружаем клиент и проверяем, что имя нашего сервера ALD разрешается в IP:
ping adc01.itproblog.ru
Указываем полное доменное имя клиента:
hostnamectl set-hostname aclt01.itproblog.ru
1. Устанавливаем необходимые пакеты:
apt install ald-client-common ald-admin
2. Для разнообразия присоединим клиент через командную строку. Это можно сделать вот такой небольшой командой:
ald-client join adc01.itproblog.ru
где последним параметром передается имя контроллера домена ALD.
Подтверждаем изменения.
3. На этапе выбора пользователя с правами присоединения к домену нажимаем Enter и указываем пароль администратора ALD.
4. В случае успешного присоединения вы должны увидеть следующий вывод:
Если теперь посмотреть в консоль управления ALD на сервере, то вы можете увидеть новый объект компьютера:
Проверка работы клиента ALD
Если мы попробуем сейчас выполнить вход на клиентский компьютер под доменной учетной записью user1, то увидим следующее сообщение – “Доступ запрещен”:
С кем это связано? Все дело в том, что в оснастке управления ALD для учетной записи пользователя необходимо явно указать – на какие клиентские ПК ему разрешен доступ. Давайте добавим доменному user1 разрешения локального входа на доменный ПК aclt01.itproblog.ru.
Для этого на сервере ALD необходимо открыть оснастку управления ALD и в свойствам УЗ user1 на вкладке “Привилегии домена” добавим компьютер aclt01.itproblog.ru:
Сохраните внесенные изменения.
Попробуем выполнить вход теперь:
Да теперь мы успешно выполнили вход под доменной учетной записью.