Как ввести Debian в домен Windows (Active Directory) с помощью realmd, SSSD.
Рассмотрим как ввести систему Debian в домен Windows с помощью 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)
Подготовка системы
# Обновляем информацию о репозиториях и обновляем установленные пакеты:
apt-get update && apt-get upgrade -y
Указываем FQDN (Fully Qualified Domain Name) имя системы, в файле /etc/hostname
:
debian.jakonda.local
Файл /etc/hosts
приводим к виду таким образом, чтобы в нём была запись с полным доменным именем компьютера и с коротким именем, ссылающаяся на один из внутренних IP хоста:
127.0.0.1 localhost 192.168.1.10 debian.jakonda.local debian
Настраиваем клиент DNS на хосте. Файл /etc/resolv.conf
приводим к виду с учетом ваших данных:
domain jakonda.local search jakonda.local nameserver 192.168.1.100
Настройка синхронизации времени
Очень важно для корректной работы чтобы разница во времени между хостом и домен контроллером была минимальная или не превышала более 5 минут, в противном случае не возможно получить билет от Kerberos. Настроим синхронизацию времени с контроллером домена.
# Устанавливаем необходимые пакеты:
apt-get install ntp ntpdate
В файле /etc/ntp.conf
, указываем контроллер домена в качестве точки синхранизации, остальные комментируем :
# You do need to talk to an NTP server or two (or three). server dc1.jakonda.local # pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will # pick a different set every time it starts up. Please consider joining the # pool: <http://www.pool.ntp.org/join.html> # pool 0.debian.pool.ntp.org iburst # pool 1.debian.pool.ntp.org iburst # pool 2.debian.pool.ntp.org iburst # pool 3.debian.pool.ntp.org iburst
Выполняем единовременную синхронизацию времени с контроллером домена и запускаем службу:
/etc/init.d/ntp stop ntpdate -bs jakonda.local /etc/init.d/ntp start
Ввод в домен
Мы будем использовать команду realm
из пакета realmd
, чтобы присоединиться к домену и создать конфигурацию sssd
.
# Устанавливаем необходимые пакеты:
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
[stextbox id=’info’]ИНФОРМАЦИЯ. Команда realm discover
возвращает полную конфигурацию домена и список пакетов, которые необходимо установить, чтобы система была зарегистрирована в домене.[/stextbox]
Перед вводом в домен, можно настроить realmd
переопределив настройки по-умолчанию. Это делается путем размещения настроек в файле /etc/realmd.conf
. Настройки в этом файле применяются только в момент присоединения к домену или области. Как только область настроена, настройки не вступают в силу. Последующая конфигурация выполняется в созданном файле конфигурации sssd — /etc/sssd/sssd.conf
.
Для примера зададим атрибуты хоста для учетной записи компьютера в Active Directory (атрибуты operatingSystem и operatingSystemVersion) и укажем в какую OU его поместить:
[active-directory] os-name = Debian GNU/Linux os-version = 11.8 (Bullseye) [jakonda.local] computer-ou = OU=Linux Computers,DC=jakonda,DC=local
[stextbox id=’info’]ИНФОРМАЦИЯ. Более подробно можно почитать — https://www.freedesktop.org/software/realmd/docs/realmd-conf.html[/stextbox]
Введем хост в домен Active Directory. Для выполнения операции понадобится учетная запись AD с правами администратора домена (или пользователь, которому делегированы права на добавление компьютеров в домен):
realm join -U Jakonda jakonda.local Password for Administrator:
Проверим, что хост теперь находится в домене Active Directory:
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 после ввода хоста в домен, создает файл конфигурации sssd (/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
Этих параметров достаточно для авторизации доменных пользователей в системе.
[stextbox id=’warning’]ИНФОРМАЦИЯ. Важно помнить, что файл /etc/sssd/sssd.conf
должен иметь разрешения 600
и root:root
, иначе демон sssd
не будет запускаться.[/stextbox]
Вывод из домена
Опишу процедуру вывода машины из домена.
Сперва выводим список сконфигурированных доменов:
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 <username>@<domain>
Если в выводе присутствует две записи (две записи присутствуют при использовании двух client-software
— winbind
и sssd
), к примеру вот так это выглядит:
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 <username>@<domain> realm leave -v --client-software=winbind -U <username>@<domain>
Подчищаем после вывода машины из домена, удаляем кеш SSSD и Kerberos.
Останавливаем SSSD демон:
systemctl stop sssd
Удаляем SSSD кеш:
rm -rf /var/lib/sss/db/*
Удаляем Kerberos кеш:
rm -f /tmp/krb5*
Автоматическое создание домашнего каталога
Чтобы пользователям Active Directory создавался их домашний каталог при входе в систему, выполним команду:
pam-auth-update --enable mkhomedir
Результатом выполненения команды будет, добавление в /etc/pam.d/common-session
строки:
session optional pam_mkhomedir.so umask=0022 skel=/etc/skel
Проверка работы
Получим информацию о пользователе Active Directory — jakonda@jakonda.local
.
getent passwd jakonda@jakonda.local jakonda@jakonda.local:*:1851201887:1851200513:Jakonda:/home/jakonda@jakonda.local:/bin/bash
Посмотрим в каких группах он состоит:
groups jakonda@jakonda.local jakonda@jakonda.local : domain users@jakonda.local domain admins@jakonda.local
[stextbox id=’info’]ИНФОРМАЦИЯ. Если вы только что изменили членство пользователя в группе, может пройти некоторое время, прежде чем sssd
заметит это из-за кэширования.[/stextbox]
Попробуем войти в систему:
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.
Управление разрешениями на вход для пользователей домена
Чтобы задать правила доступа, используйте следующие две команды:
realm deny
realm permit
К примеру чтобы предоставить или запретить доступ для всех пользователей, используется команда с параметром --all
:
realm permit --all realm deny --all
Чтобы предоставить доступ указанным пользователям, используется команда:
realm permit user@jakonda.local realm permit 'JAKONDA.LOCAL\user'
Для пользователей доменных групп безопасности, используется команда:
ream permit -g ServerAdmins@jakonda.local
Чтобы запретить доступ указанным пользователям, используется команда с параметром -x
:
realm permit -x user@jakonda.local
Для разрешения определенным доменным пользователями возможность выполнения sudo
, создадим отдельный файл в котором укажем доменную группу безопасности в которую уже будут входить нужные пользователи.
Создаем файл /etc/sudoers.d/admins
со следующим содержанием:
%ServerAdmins ALL=(ALL) ALL
[stextbox id=’warning’]ИНФОРМАЦИЯ: Хочу заместить если группа безопасности содержит пробелы, например — Domain admins, то указывать ее нужно в формате — %Domain\admins[/stextbox]
Обсуждение
Нет комментариев.