Привет, Хабр! Меня зовут Владлен, я ― инженер-программист отдела разработки РЕД ОС. Ко мне пришли с предложением рассказать об утилите, которую мы создали для быстрого ввода устройств на базе РЕД ОС в домен. Тема интересная, ведь join-to-domain умеет в несколько механизмов подключения, пережил перенос на другой язык программирования и дружит с РЕД АДМ. Итак, сегодня я расскажу подробнее о том, как мы создали join-to-domain и как использовать его на благо вашей ИТ-инфраструктуры.

Изначально утилита появилась под запрос клиентов: потребовалось решение, которое поможет быстро ввести ПК в домен с минимальными усилиями со стороны админа. Утилита сама по настройкам сети находит контроллер домена, получает с него данные и на их основе формирует конфигурационные файлы.

Такое решение мы собрали. Join-to-domain — это обёртка над существующими утилитами adcli, realmd и netads. Однако обёртка не простая, а с улучшениями в логике работы, встроенной автоматизацией и интерфейсом. Но обо всём по порядку.

У самурая нет цели, есть только путь от Bash до Python

Первая версия join-to-domain писалась на Bash — мы создавали утилиту для автоматизации задачи, отложив «красоты» на потом. В итоге появился хороший инструмент, но процесс подготовки к вводу насчитывал более 10 шагов по инструкции через консольные команды.

Это лучше, чем ничего, но далеко на Bash не уедешь.

Встала задача перевода утилиты на Python. Этот язык подходит для реализации более сложных задач, прост в поддержке и гораздо читаемее. Несколько недель экранирования спецсимволов спустя мы получили новую версию join-to-domain с более удобной системой логирования.

Смотря какой UX, смотря сколько frameworks

Новую версию join-to-domain снабдили интерфейсом и нещадно оказуалили: причесали, добавили графический режим работы, подогнали под дизайн-систему РЕД ОС 8.

Утилита прошла путь Zenity → Yad → QT. На QT мы и остановились. В РЕД ОС 8 утилита подтягивает специальный QT Tweaker, который автоматически адаптирует интерфейс под нужное оформление. О том, как создали решение для унификации интерфейса Linux-приложений в разных фреймворках РЕД ОС 8 ра��ее рассказывал мой коллега Артём.

Результат преображения:

Левый ― коронный, правый ― Winbindовый

Главная фишка join-to-domain ― способность работать по нескольким предустановленным сценариям ввода: SSSD и Winbind.

Механизм SSSD. Считается современным, но у него есть ограничения при работе с сетевыми каталогами.

Механизм Winbind позволяет клиентам сразу использовать домен «из коробки» и получить доступ к сетевым папкам.

Администратор может выбрать, будет он использовать один механизм или сразу два.

Что под капотом:

Сначала ввод в домен осуществляется командой realm с ключом join. Перед этим настраиваются все необходимые конфиги, создаётся тикет Kerberos. Когда ввод в SSSD осуществлён, начинается ввод с помощью Winbind при поддержке утилиты NetADS.

Большой секрет автоматизации:

Итак, у каждого домена используются свои протоколы безопасности. Берём Microsoft Active Directory 2008 года ― и это уникальный набор криптоалгоритмов, отличающийся от других версий. Та же ситуация с Samba и FreeIPA. Как автоматизировать ввод в домен, подружив утилиту со всеми протоколами?

Волшебной таблетки тут нет. За магией автоматизации кроется ручная работа: нам пришлось выстраивать заранее шаблоны конфигурационных файлов в зависимости от того, какой контроллер домена будет обнаружен. Зато теперь админ может забыть про мануалы :)

Мануал для админа: как забыть про мануалы, используя join-to-domain

Небольшой дисклеймер. Join-to-domain ― это хорошее решение для быстрого ввода в домен клиентской тачки на базе РЕД ОС. Поставил-подключил. Но, если вам нужно что-то более глобальное, умеющее в инвентаризацию, работу с DHCP, миграцию и управление учётками, что-то, что массово введёт в домен сразу много устройств, то лучше погрузитесь в тему РЕД АДМ Промышленной редакции.

А теперь я расскажу вам, как избавиться от стопки мануалов и подключить устройство к домену с помощью простого советского есть в каждом доме join-to-domain.

Шаг 1. Установите утилиту

Командой sudo dnf in join-to-domain

join-to-domain может выполняться в трех режимах:

— с графическим интерфейсом*;

— в консоли (интерактивный режим);

— в консоли с входными параметрами.

* Лучше делать с графическим интерфейсом. Он хорош, и не зря же мы его старались-рисовали.

Шаг 2. Подготовка к вводу в домен

Перед вводом РЕД ОС в домен проверьте настройки сети. Контроллер домена должен быть доступен по имени. Это можно проверить, запустив команду ping:

ping -c 3 win.red

PING win.red (10.81.186.215) 56(84) bytes of data.

64 bytes from dc1.win.red (10.81.186.215): icmp_seq=1 ttl=255 time=77.5 ms

64 bytes from dc1.win.red (10.81.186.215): icmp_seq=2 ttl=255 time=95.0 ms

64 bytes from dc1.win.red (10.81.186.215): icmp_seq=3 ttl=255 time=304 ms

Если ваш DHCP-сервер не раздает клиентам доменный суффикс, то укажите его в сетевых настройках, поле «Поисковый домен».

После внесения изменений в сетевых настройках, необходимо перезагрузить ПК или NetworkManager.

Шаг 3. Подключение компьютера к домену

Для запуска join-to-domain в графическом режиме перейдите в «Главное меню» — «Прочее» — «Ввод ПК в домен».После успешной аутентификации откроется окно выбора типа домена на базе SAMBA или FreeIPA. Для ввода в домен SAMBA выберите пункт «Домен Windows/SAMBA».

Откроется основное окно, в котором необходимо заполнить поля:

Обратите внимание: допустимое имя компьютера должно иметь длину от 3 до 15 символов и содержать только латинские буквы, цифры и дефис.

Перейдите на вкладку «Дополнительные параметры» и при необходимости укажите дополнительные настройки. Здесь можно выбрать:

— используемый механизм аутентификации: sssd или winbind,

— использование собственного профиля authselect,

— назначение прав на группу «wheel» для доменной группы,  

— включение принудительного ввода в домен,

— активацию аутентификации по Kerberos на SSH-сервере.

После нажатия на кнопку «Сохранить» потребуется ввести пароль от пользователя root.

И после этого начнется процесс присоединения ПК к домену.

Типовые ошибки и как с ними быть

Что-то пошло на по плану? Есть несколько типовых ошибок, которые можно легко устранить. Идём изучать журнал логов: /var/log/join-to-domain.log

Ошибка №1. Недоступен домен

Если недоступен домен, то просто проверьте, правильно ли настроены сеть и поисковый домен.

nslookup домен

Если есть ошибки в имени/dns ― то команда выдаст сообщение, что что-то работает не так.

Ошибка №2. Не удалось авторизоваться доменным пользователем на этапе ввода в домен

А точно ли пользователь имеет права на ввод в домен? Доверяй, но проверяй.

Поищите в логах запись на этапе после промежуточных настроек, когда утилита пробует сама авторизоваться в домене. В описании ошибки будет информация, под каким пользователем не получилось ввести устройство в домен.

Ошибка №3. «В домене уже существует компьютер»

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

1. Принудительное присоединение к домену.

Можно принудительно записать введенное имя компьютера в домен, используя ключи -f или --force. Этот метод заставляет домен принять компьютер с указанным именем, при этом стирая предыдущее регистрационное имя.

Пример использования команды:

join-to-domain -f

2. Изменение имени компьютера.

Можно присвоить новому компьютеру уникальное имя, отличное от существующего в домене.

***

Разумеется, join-to-domain в текущем виде ― не финальная версия утилиты. Мы постоянно придумываем что-нибудь новенькое и выкатываем обновления для всех продуктов. Если вам интересно узнать подробности про разработку на РЕД ОС ― пишите в комментариях!