SCROLL
Среднее время на прочтение: 4 мин.

Как ввести Debian в домен Windows (Active Directory) с помощью realmd, SSSD.

Интеграция Linux-серверов в домен Windows Active Directory (AD) позволяет централизованно управлять пользователями и упростить аутентификацию. В этой статье мы рассмотрим, как добавить Debian в домен Windows AD, используя realmd и SSSD.

Описание используемых служб:

  • Realmd (Realm Discovery) – сервис D-Bus, позволяющий производить настройку сетевой аутентификации и членства в домене (Active Directory) без сложных настроек. Информация о домене обнаруживается автоматически. Для аутентификации и проверки учетных записей realmd использует SSSD (через Kerberos и LDAP) или Winbind.
  • SSSD (System Security Services Daemon) — это клиентский компонент централизованных решений для управления идентификацией, таких как Microsoft Active Directory, Kerberos, OpenLDAP  и других серверов каталогов. SSSD обслуживает и кэширует информацию, хранящуюся на удаленном сервере каталогов, и предоставляет услуги идентификации, аутентификации и авторизации хост-машине.

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

  • Контроллер домена (DC1) на Windows Server 2019, домен JAKONDA.LOCAL (IP — 192.168.1.100)
  • Linux система (debian) на Debian 11 Bullseye (IP — 192.168.1.10)

Подготовка системы

Перед началом убедитесь, что ваша система Debian обновлена:

apt-get update && apt-get upgrade -y

Указываем FQDN (Fully Qualified Domain Name) имя системы, в файле /etc/hostname:

/etc/hostname
debian.jakonda.local

Файл /etc/hosts приводим к виду таким образом, чтобы в нём была запись с полным доменным именем компьютера и с коротким именем, ссылающаяся на один из внутренних IP хоста:

/etc/hosts
127.0.0.1	localhost
192.168.1.10	debian.jakonda.local debian

Настраиваем клиент DNS на хосте. Файл /etc/resolv.conf приводим к виду с учетом ваших данных:

/etc/resolv.conf
domain jakonda.local
search jakonda.local
nameserver 192.168.1.100

Настройка синхронизации времени

Для корректной аутентификации по протоколу Kerberos необходимо синхронизировать время сервера и клиента. Если системные часы расходятся более чем на 5 минут, то аутентификация не будет выполнена.

Установим NTP сервер и выполним синхронизацию времени с контроллером домена:

apt-get install ntp ntpdate -y

ntpdate dc1.jakonda.local

Установка необходимых пакетов

Устанавливаем необходимые пакеты:

apt-get install realmd sssd sssd-tools libnss-sss libpam-sss adcli samba-common-bin oddjob oddjob-mkhomedir packagekit -y

Проверка доступности домена

Проверим, доступен ли домен для обнаружения через DNS:

realm discover jakonda.local -v

 * Resolving: _ldap._tcp.jakonda.local
 * Performing LDAP DSE lookup on: 192.168.1.10
 * Successfully discovered: jakonda.local
jakonda.local
  type: kerberos
  realm-name: JAKONDA.LOCAL
  domain-name: jakonda.local
  configured: no
  server-software: active-directory
  client-software: sssd
  required-package: sssd-tools
  required-package: sssd
  required-package: libnss-sss
  required-package: libpam-sss
  required-package: adcli
  required-package: samba-common-bin
jakonda.local
  type: kerberos
  realm-name: JAKONDA.LOCAL
  domain-name: jakonda.local
  configured: no
Команда realm discover возвращает полную конфигурацию домена и список пакетов, которые необходимо установить, чтобы система была зарегистрирована в домене.

Предварительная настройка

Перед вводом в домен, можно настроить realmd переопределив настройки по-умолчанию. Это делается путем размещения настроек в файле /etc/realmd.conf1.

Настройки в этом файле применяются только в момент присоединения к домену или области.

Для примера зададим атрибуты системы для объекта компьютера в Active Directory (атрибуты operatingSystem и operatingSystemVersion) и укажем в какую OU поместить объект:

/etc/realmd.conf
[active-directory]
os-name = Debian GNU/Linux
os-version = 11.8 (Bullseye)

[jakonda.local] 
computer-ou = OU=Linux Computers,DC=jakonda,DC=local

Ввод в домен

Для ввода системы в домен выполните команду:

realm join jakonda.local -U Administrator
Password for Administrator:

Замените Administrator на учетную запись с правами на добавление компьютеров в домен.

Проверим, что система находится в домене:

realm list

jakonda.local
  type: kerberos
  realm-name: JAKONDA.LOCAL
  domain-name: jakonda.local
  configured: kerberos-member
  server-software: active-directory
  client-software: sssd
  required-package: sssd-tools
  required-package: sssd
  required-package: libnss-sss
  required-package: libpam-sss
  required-package: adcli
  required-package: samba-common-bin
  login-formats: %U@jakonda.local
  login-policy: allow-realm-logins

Настройка SSSD

Инструмент realmd после ввода системы в домен, создает файл конфигурации — /etc/sssd/sssd.conf:

/etc/sssd/sssd.conf
[sssd]
domains = jakonda.local
config_file_version = 2
services = nss, pam

[domain/jakonda.local]
default_shell = /bin/bash
krb5_store_password_if_offline = True
cache_credentials = True
krb5_realm = JAKONDA.LOCAL
realmd_tags = manages-system joined-with-adcli
id_provider = ad
fallback_homedir = /home/%u@%d
ad_domain = jakonda.local
use_fully_qualified_names = True
ldap_id_mapping = True
access_provider = ad

Этих параметров достаточно для авторизации доменных пользователей в системе.

Важно помнить, что файл /etc/sssd/sssd.conf должен иметь разрешения 600 и root:root, иначе демон sssd не будет запускаться.

В случае внесения каких то изменений в файл конфигурации, то после этого всегда необходимо перезапускать SSSD:

systemctl restart sssd

Проверка работы

Проверим, что учетные записи из домена доступны. Получим информацию о доменном пользователе — jakonda@jakonda.local.

getent passwd jakonda@jakonda.local
jakonda@jakonda.local:*:1851201887:1851200513:Jakonda:/home/jakonda@jakonda.local:/bin/bash

Проверим в каких группах пользователь jakonda@jakonda.local состоит:

groups jakonda@jakonda.local
jakonda@jakonda.local : domain users@jakonda.local domain admins@jakonda.local
Если вы только что изменили членство пользователя в группе, может пройти некоторое время, прежде чем sssd заметит это из-за кэширования.

Попробуем войти в систему:

sudo login

debian.jakonda.local имя пользователя: Jakonda
Пароль:
Linux debian.jakonda.local 5.10.0-23-amd64 #1 SMP Debian 5.10.179-3 (2023-07-27) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Создание каталога /home/jakonda@jakonda.local.

Автоматическое создание домашнего каталога

Чтобы доменным пользователям создавался их домашний каталог при входе в систему, выполним команду:

pam-auth-update --enable mkhomedir

Результатом выполнения команды будет, добавление в /etc/pam.d/common-session строки:

session optional                        pam_mkhomedir.so umask=0022 skel=/etc/skel

Управление разрешениями на вход для пользователей домена

Чтобы задать правила доступа, используйте следующие две команды:

  • realm deny
  • realm permit

Глобальные разрешения

Чтобы предоставить или запретить доступ для всех пользователей, используется команда с параметром --all:

realm permit --all
realm deny --all

Разрешения по пользователям

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

realm permit user@jakonda.local
realm permit 'JAKONDA.LOCAL\user'

Разрешения по группам безопасности

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

ream permit -g %Domain\admins@jakonda.local

Запрещающие правила

Чтобы запретить доступ указанным пользователям, используется команда с параметром -x:

realm permit -x user@jakonda.local

SUDO разрешения

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

Создаем файл /etc/sudoers.d/admins со следующим содержанием:

/etc/sudoers.d/admins
%ServerAdmins ALL=(ALL) ALL
Хочу заместить если группа безопасности содержит пробелы, например — Domain admins, то указывать ее нужно в формате — %Domain\admins

Вывод из домена

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

Сперва выводим список сконфигурированных доменов:

realm list

jakonda.local
  type: kerberos
  realm-name: JAKONDA.LOCAL
  domain-name: jakonda.local
  configured: kerberos-member
  server-software: active-directory
  client-software: sssd
  required-package: sssd-tools
  required-package: sssd
  required-package: libnss-sss
  required-package: libpam-sss
  required-package: adcli
  required-package: samba-common-bin
  login-formats: %U
  login-policy: allow-realm-logins

Для вывода системы из домена, выполняем команду:

realm leave -v -U Administrator@jakonda.local

Замените Administrator на учетную запись с правами на удаление компьютеров в домен и jakonda.local на свой домен.

Если в выводе сконфигурированных доменов присутствует две записи (две записи присутствуют при использовании двух client-softwarewinbind и sssd), к примеру вот так это выглядит:

realm list

jakonda.local
  type: kerberos
  realm-name: JAKONDA.LOCAL
  domain-name: jakonda.local
  configured: kerberos-member
  server-software: active-directory
  client-software: winbind
  required-package: winbind
  required-package: libpam-winbind
  required-package: samba-common-bin
  login-formats: JAKONDA\%U
  login-policy: allow-any-login
jakonda.local
  type: kerberos
  realm-name: JAKONDA.LOCAL
  domain-name: jakonda.local
  configured: kerberos-member
  server-software: active-directory
  client-software: sssd
  required-package: sssd-tools
  required-package: sssd
  required-package: libnss-sss
  required-package: libpam-sss
  required-package: adcli
  required-package: samba-common-bin
  login-formats: %U
  login-policy: allow-realm-logins

Тогда нужно выполнить две команды, для вывода системы из домена:

realm leave -v --client-software=sssd -U Administrator@jakonda.local
realm leave -v --client-software=winbind -U Administrator@jakonda.local

Очистка системы

После вывода системы из домена, удаляем кеш SSSD и Kerberos.

Останавливаем SSSD демон:

systemctl stop sssd

Удаляем SSSD кеш:

rm -rf /var/lib/sss/db/*

Удаляем Kerberos кеш:

rm -f /tmp/krb5*
  1. Подробное описание realmd-conf — https://www.freedesktop.org/software/realmd/docs/realmd-conf.html ↩︎
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

0 комментариев

Нет комментариев.