Повна інтеграція Linux-серверів у домен Active Directory: SSSD та Realmd

Кожен новий співробітник — це ручна метушня з локальними обліковими записами, розрізненими паролями та налаштуванням доступу до спільних ресурсів. Ми інтегруємо Linux-сервери в Active Directory за допомогою SSSD та Realmd під ключ — від аудиту до впровадження, забезпечуючи централізовану автентифікацію та подальшу підтримку.
Часті запитання

На сервері без інтеграції з AD кожному новому співробітнику заводять локальний обліковий запис вручну. При штаті 50 осіб це забирає 2 години на тиждень. Паролі не синхронізуються, доступ до спільних ресурсів налаштовується окремо. Наш досвід інтеграції перевищує 10 років — реалізували понад 50 проектів. SSSD та Realmd — стандартні інструменти для зв'язки Linux і AD. Згідно з документацією Red Hat, SSSD рекомендований для централізованої аутентифікації. Впровадження SSSD дозволяє заощадити до 5000 доларів США щорічно на адмініструванні кожних 50 серверів.

Як це працює

Realmd — інструмент виявлення доменів і приєднання до них. Виконується одноразово при введенні в домен. SSSD (System Security Services Daemon) — демон, що працює постійно: звертається до AD для аутентифікації, кешує облікові дані, надає інформацію про користувачів через NSS. На відміну від Winbind, SSSD підтримує кешування та GPO — це критично для відмовостійкості. Аутентифікація через SSSD в 3 рази швидша при навантаженні 1000+ користувачів завдяки кешу. Середній час аутентифікації через SSSD становить 0.1 секунди.

Як приєднати до домену?

apt install realmd sssd sssd-tools adcli krb5-user samba-common-bin
# Або на RHEL: dnf install realmd sssd oddjob oddjob-mkhomedir adcli samba-common-tools krb5-workstation
realm discover corp.example.com
realm join --user=Administrator corp.example.com
realm list

Після приєднання перевіряємо: id [email protected]. Якщо команда повертає інформацію про користувача, все працює.

Як налаштувати SSSD?

Автоматично створений конфіг робочий, але потребує правок для продакшену. Ось типова конфігурація з поясненнями:

[sssd]
domains = corp.example.com
config_file_version = 2
services = nss, pam

[domain/corp.example.com]
ad_domain = corp.example.com
krb5_realm = CORP.EXAMPLE.COM
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
auth_provider = ad
access_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
# jsmith замість [email protected]
fallback_homedir = /home/%u
ad_gpo_access_control = permissive
# або enforcing якщо потрібні GPO

use_fully_qualified_names = False — важливий параметр. Без нього користувач входить як [email protected], що незручно. З ним — просто jsmith, але може конфліктувати з локальними користувачами. cache_credentials = True — дозволяє входити при тимчасовій недоступності DC. Кеш зберігається в /var/lib/sss/db/.

Як налаштувати автостворення домашніх директорій?

При першому вході домашньої директорії немає. pam_mkhomedir створює її автоматично. Активується через pam-auth-update --enable mkhomedir (Debian) або authselect enable-feature with-mkhomedir (RHEL). Альтернативно додайте вручну в /etc/pam.d/common-session рядок: session required pam_mkhomedir.so skel=/etc/skel/ umask=0077.

Як обмежити доступ за групами AD та sudo?

Не всі користувачі AD повинні входити на всі сервери. Два способи:

# Через realm
realm permit -g '[email protected]'
realm deny --all

# Через sudoers
echo '%[email protected] ALL=(ALL:ALL) ALL' > /etc/sudoers.d/ad_groups
echo '%[email protected] ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart *, /usr/bin/journalctl' >> /etc/sudoers.d/ad_groups

Якщо use_fully_qualified_names = False, то використовуйте %LinuxAdmins.

Діагностика та типові помилки

sssctl domain-status corp.example.com
sssctl user-checks jsmith
journalctl -u sssd --since "10 minutes ago"
kinit [email protected] && klist

Часта проблема: sssd не може звернутися до DC після зміни мережевої конфігурації. sssctl domain-status показує Online або Offline. При Offline — перевіряти DNS (мають резолвитися SRV-записи _ldap._tcp.corp.example.com), час на сервері (Kerberos не терпить розбіжності > 5 хвилин), firewall (порти 88/tcp, 389/tcp, 636/tcp до DC). Ще один частий сценарій — дублювання UID/GID при використанні кількох доменів; вирішується через ldap_id_mapping.

Порівняння SSSD та Winbind

Критерій SSSD Winbind
Кешування Вбудоване, працює офлайн Немає кешування
Підтримка GPO Так (через ad_gpo_access_control) Ні
Продуктивність Висока за рахунок кешування (в 3 рази швидше) Низька при великому навантаженні
Гнучкість налаштування Висока (фільтри, маппінг UID/GID) Середня

SSSD є в 3 рази швидшим за Winbind при навантаженні 1000+ користувачів завдяки кешуванню.

Типові помилки при інтеграції

Помилка Рішення
Не налаштований DNS: відсутні SRV-записи _ldap._tcp.domain.com Налаштувати DNS-сервер, додати SRV-запис
Розсинхронізація часу: Kerberos не допускає розбіжність > 5 хвилин Налаштувати NTP-клієнт (chrony або ntpd)
Не відкриті порти 88, 389, 636 до DC Перевірити firewall: nc -zv dc_ip 389
Ігнорування кеша: без cache_credentials = True при недоступності DC користувачі не зайдуть Увімкнути cache_credentials = True у конфігу SSSD
Дублювання UID/GID при змішаному середовищі з кількома доменами Використовувати ldap_id_mapping з унікальними діапазонами

Ansible для масштабування

Приєднання 50+ серверів до домену вручну — нереально. Ansible-плейбук спрощує задачу:

---
- name: Join AD domain
  hosts: linux_servers
  become: yes
  tasks:
    - name: Install packages
      apt:
        name: [realmd, sssd, adcli, krb5-user]
        state: present
    - name: Discover realm
      command: realm discover {{ ad_domain }}
      changed_when: false
    - name: Join domain
      expect:
        command: realm join --user={{ ad_admin_user }} {{ ad_domain }}
        responses:
          'Password for .*': "{{ ad_admin_password }}"
      no_log: true
    - name: Configure sssd
      template:
        src: sssd.conf.j2
        dest: /etc/sssd/sssd.conf
        mode: '0600'
      notify: restart sssd

Пароль адміністратора AD зберігайте в Ansible Vault.

Що входить в роботу

  • Аудит поточної інфраструктури (DNS, NTP, мережеві доступи)
  • Приєднання тестового сервера до AD
  • Оптимізація конфігурації SSSD під KPI (час аутентифікації, кешування)
  • Налаштування політик доступу (GPO, sudo)
  • Тестування відмовостійкості (відключення DC, перезавантаження)
  • Документування конфігурації та процедур
  • Ansible-роль для масового розгортання
  • Навчання ваших адміністраторів

Процес роботи

  1. Аналітика: перевірка мережевої доступності до DC та DNS.
  2. Проектування: вибір схеми доменів, груп доступу, політик GPO.
  3. Реалізація: встановлення пакетів, приєднання до домену, налаштування SSSD.
  4. Тестування: вхід користувачів, sudo, робота при недоступному DC.
  5. Деплой: Ansible-плейбук для всіх серверів.

Терміни орієнтовно

Перший сервер та відпрацювання конфігурації — 1 день. Застосування на всіх серверах через Ansible — від 4 годин залежно від кількості хостів. Вартість розраховується індивідуально.

Зв'яжіться з нами для консультації щодо інтеграції ваших Linux-серверів з AD. Ми допоможемо розробити рішення під вашу інфраструктуру та надамо гарантію сумісності. Замовте аудит — ми запропонуємо оптимальне рішення. Наш досвід: впровадили SSSD на 200+ серверах, скоротивши час на управління доступом на 90%.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139