Аутентифікація Active Directory
Передумови¶
- Деяке розуміння Active Directory
- Деяке розуміння LDAP
Вступ¶
Microsoft Active Directory (AD) є системою автентифікації за замовчуванням для систем Windows і зовнішніх служб, підключених через LDAP, на більшості підприємств. Він дозволяє налаштовувати користувачів і групи, контролювати доступ, дозволи, автоматичне монтування тощо.
Тепер, хоча підключення Linux до кластера AD не може підтримувати усі згадані функції, воно може працювати з користувачами, групами та контролем доступу. Розповсюджувати ключі SSH за допомогою AD можливо (хоча деякі налаштування конфігурації на стороні Linux і деякі додаткові параметри на стороні AD).
Однак у цьому посібнику йдеться лише про налаштування автентифікації для Active Directory і не включатиме жодних додаткових налаштувань для Windows.
Виявлення та приєднання до AD за допомогою SSSD¶
Примітка
Доменне ім’я ad.company.local у цьому посібнику представлятиме домен Active Directory. Щоб слідувати цьому посібнику, замініть його ім’ям свого домену AD.
Першим кроком до приєднання системи Linux до AD є виявлення вашого кластера AD, щоб переконатися, що конфігурація мережі правильна з обох сторін.
Підготовка¶
- Переконайтеся, що такі порти відкриті для хосту Linux на контролері домену:
Служба | Порт(и) | Примітки |
---|---|---|
DNS | 53 (TCP+UDP) | |
Kerberos | 88, 464 (TCP+UDP) | Використовується kadmin для налаштування та оновлення паролів |
LDAP | 389 (TCP+UDP) | |
LDAP-GC | 3268 (TCP) | Глобальний каталог LDAP – дозволяє отримувати ідентифікатори користувачів з AD |
- Переконайтеся, що ви налаштували контролер домену AD як DNS-сервер на хості Rocky Linux:
З NetworkManager:
# де основним підключенням NetworkManager є «System eth0», а AD
# сервер доступний за IP-адресою 10.0.0.2.
[root@host ~]$ nmcli con mod 'System eth0' ipv4.dns 10.0.0.2
- Переконайтеся, що час на обох сторонах (хост AD і система Linux) синхронізовано (див. Chronyd)
Щоб перевірити час у Rocky Linux:
[user@host ~]$ date
Wed 22 Sep 17:11:35 BST 2021
- Встановіть необхідні пакети для підключення AD на стороні Linux:
[user@host ~]$ sudo dnf install realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation
Відкриття¶
Тепер ви зможете виявити сервер(и) AD на хості Linux.
[user@host ~]$ realm discover ad.company.local
ad.company.local
type: kerberos
realm-name: AD.COMPANY.LOCAL
domain-name: ad.company.local
configured: no
server-software: active-directory
client-software: sssd
required-package: oddjob
required-package: oddjob-mkhomedir
required-package: sssd
required-package: adcli
required-package: samba-common
Це буде виявлено за допомогою відповідних записів SRV, що зберігаються у вашій службі DNS Active Directory.
Приєднання¶
Після того, як ви успішно виявите свою інсталяцію Active Directory на хості Linux, ви зможете використовувати realmd
для приєднання до домену, який організує конфігурацію sssd
за допомогою adcli
та деякі інші подібні інструменти.
[user@host ~]$ sudo realm join ad.company.local
Якщо цей процес скаржиться на шифрування з KDC не підтримує тип шифрування
, спробуйте оновити глобальну політику шифрування, щоб дозволити старі алгоритми шифрування:
[user@host ~]$ sudo update-crypto-policies --set DEFAULT:AD-SUPPORT
Якщо цей процес завершиться успішно, тепер ви зможете отримати інформацію passwd
для користувача Active Directory.
[user@host ~]$ sudo getent passwd administrator@ad.company.local
administrator@ad.company.local:*:1450400500:1450400513:Administrator:/home/administrator@ad.company.local:/bin/bash
Примітка
getent
отримує записи з бібліотек перемикання служб імен (NSS). Це означає, що, наприклад, на відміну від passwd
або dig
, він запитуватиме різні бази даних, у тому числі /etc/hosts
для getent hosts
або з sssd
у випадку getent passwd
.
realm
надає кілька цікавих параметрів, якими можна скористатися:
Опція | Функціональність |
---|---|
--computer-ou='OU=LINUX,OU=SERVERS,dc=ad,dc=company.local' | Підрозділ, де зберігати обліковий запис сервера |
--os-name='rocky' | Укажіть назву ОС, яка зберігається в AD |
--os-version='8' | Укажіть версію ОС, яка зберігається в AD |
-U admin_username | Вкажіть обліковий запис адміністратора |
Спроба автентифікації¶
Тепер ваші користувачі мають мати змогу автентифікуватися на вашому хості Linux у Active Directory.
У Windows 10: (яка надає власну копію OpenSSH)
C:\Users\John.Doe> ssh -l john.doe@ad.company.local linux.host
Password for john.doe@ad.company.local:
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Wed Sep 15 17:37:03 2021 from 10.0.10.241
[john.doe@ad.company.local@host ~]$
Якщо це вдається, ви успішно налаштували Linux на використання Active Directory як джерела автентифікації.
Встановлення домену за замовчуванням¶
У повному налаштуванні за замовчуванням вам потрібно буде ввійти за допомогою свого облікового запису AD, вказавши домен у своєму імені користувача (наприклад, john.doe@ad.company.local
). Якщо це не бажана поведінка, і ви натомість хочете мати можливість опускати доменне ім’я під час автентифікації, ви можете налаштувати SSSD на певний домен за замовчуванням.
Це відносно простий процес, який потребує налаштування конфігурації у файлі конфігурації SSSD.
[user@host ~]$ sudo vi /etc/sssd/sssd.conf
[sssd]
...
default_domain_suffix = ad.company.local
Додавши default_domain_suffix
, ви вказуєте SSSD (якщо не вказано інший домен) зробити висновок, що користувач намагається автентифікуватися як користувач із ad.company.local
домен. Це дозволяє вам автентифікуватись як щось на зразок john.doe
замість john.doe@ad.company.local
.
Щоб ця зміна конфігурації набула чинності, потрібно перезапустити модуль sssd.service
за допомогою systemctl
.
[user@host ~]$ sudo systemctl restart sssd
Таким же чином, якщо ви не бажаєте, щоб ваші домашні каталоги суфіксувалися доменним іменем, ви можете додати ці параметри у свій файл конфігурації /etc/sssd/sssd.conf
:
[domain/ad.company.local]
use_fully_qualified_names = False
override_homedir = /home/%u
Не забудьте перезапустити службу sssd
.
Обмеження для певних користувачів¶
Існують різні способи обмеження доступу до сервера для обмеженого списку користувачів, але цей, як випливає з назви, безперечно найпростіший:
Додайте ці параметри у свій файл конфігурації /etc/sssd/sssd.conf
і перезапустіть службу:
access_provider = simple
simple_allow_groups = group1, group2
simple_allow_users = user1, user2
Тепер тільки користувачі з group1 і group2 або user1 і user2 зможуть підключитися до сервера за допомогою sssd!
Взаємодія з AD за допомогою adcli
¶
adcli
— це CLI для виконання дій у домені Active Directory.
- Якщо ще не встановлено, встановіть необхідний пакет:
[user@host ~]$ sudo dnf install adcli
- Перевірте, чи приєднувалися ви коли-небудь до домену Active Directory:
[user@host ~]$ sudo adcli testjoin
Successfully validated join to domain ad.company.local
- Отримайте більш детальну інформацію про домен:
[user@host ~]$ adcli info ad.company.local
[domain]
domain-name = ad.company.local
domain-short = AD
domain-forest = ad.company.local
domain-controller = dc1.ad.company.local
domain-controller-site = site1
domain-controller-flags = gc ldap ds kdc timeserv closest writable full-secret ads-web
domain-controller-usable = yes
domain-controllers = dc1.ad.company.local dc2.ad.company.local
[computer]
computer-site = site1
- Ви можете використовувати adcli більше, ніж інструмент консультування, щоб взаємодіяти зі своїм доменом: керувати користувачами чи групами, змінювати пароль тощо.
Приклад: використовуйте adcli
, щоб отримати інформацію про комп’ютер:
Примітка
Цього разу ми надамо ім’я користувача адміністратора завдяки параметру -U
[user@host ~]$ adcli show-computer pctest -U admin_username
Password for admin_username@AD:
sAMAccountName:
pctest$
userPrincipalName:
- not set -
msDS-KeyVersionNumber:
9
msDS-supportedEncryptionTypes:
24
dNSHostName:
pctest.ad.company.local
servicePrincipalName:
RestrictedKrbHost/pctest.ad.company.local
RestrictedKrbHost/pctest
host/pctest.ad.company.local
host/pctest
operatingSystem:
Rocky
operatingSystemVersion:
8
operatingSystemServicePack:
- not set -
pwdLastSet:
133189248188488832
userAccountControl:
69632
description:
- not set -
Приклад: використовуйте adcli
, щоб змінити пароль користувача:
[user@host ~]$ adcli passwd-user user_test -U admin_username
Password for admin_username@AD:
Password for user_test:
[user@host ~]$
Вирішення проблем¶
Іноді мережева служба запускається після SSSD, що спричиняє проблеми з автентифікацією.
Користувачі AD не зможуть підключитися, доки ви не перезапустите службу.
У такому випадку ви повинні змінити службовий файл systemd, щоб вирішити цю проблему.
Скопіюйте цей вміст у /etc/systemd/system/sssd.service
:
[Unit]
Description=System Security Services Daemon
# SSSD must be running before we permit user sessions
Before=systemd-user-sessions.service nss-user-lookup.target
Wants=nss-user-lookup.target
After=network-online.target
[Service]
Environment=DEBUG_LOGGER=--logger=files
EnvironmentFile=-/etc/sysconfig/sssd
ExecStart=/usr/sbin/sssd -i ${DEBUG_LOGGER}
Type=notify
NotifyAccess=main
PIDFile=/var/run/sssd.pid
[Install]
WantedBy=multi-user.target
При наступному перезавантаженні служба запуститься відповідно до своїх вимог, і все пройде добре.
Вихід з Active Directory¶
Іноді необхідно вийти з AD.
Ви можете ще раз продовжити з realm
, а потім видалити пакети, які більше не потрібні:
[user@host ~]$ sudo realm leave ad.company.local
[user@host ~]$ sudo dnf remove realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation
Author: Hayden Young
Contributors: Steven Spencer, Sambhav Saggi, Antoine Le Morvan, Krista Burdine, Ganna Zhyrnova, Neel Chauhan