Автентифікація Active Directory за допомогою Samba
Передумови¶
- Деяке розуміння Active Directory
- Деяке розуміння LDAP
Вступ¶
Microsoft Active Directory (AD) є системою автентифікації за замовчуванням для систем Windows і зовнішніх служб, підключених через LDAP, на більшості підприємств. Він дозволяє налаштовувати користувачів і групи, контролювати доступ, дозволи, автоматичне монтування тощо.
Хоча підключення Linux до кластера AD не може підтримувати всі згадані функції, воно може працювати з користувачами, групами та контролем доступу. Розповсюджувати ключі SSH за допомогою AD можливо (хоча деякі налаштування конфігурації на стороні Linux і деякі додаткові параметри на стороні AD).
Стандартним способом використання Active Directory у Rocky Linux є використання SSSD, але Samba є більш повнофункціональною альтернативою. Наприклад, обмін файлами можна здійснювати за допомогою Samba, але не SSSD. Однак цей посібник охоплюватиме налаштування автентифікації для Active Directory за допомогою Samba та не міститиме жодних додаткових налаштувань на стороні Windows.
Виявлення та приєднання до AD за допомогою Samba¶
Примітка
Доменне ім’я 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:
# where your primary NetworkManager connection is 'System eth0' and your AD
# server is accessible on the IP address 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 samba samba-winbind samba-client
Відкриття¶
Тепер ви зможете виявити сервер(и) 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
, щоб приєднатися до домену, який організує конфігурацію Samba за допомогою adcli
та деяких інших подібних інструментів.
[user@host ~]$ sudo realm join -v --membership-software=samba --client-software=winbind 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
AD\administrator:*:1450400500:1450400513:Administrator:/home/administrator@ad.company.local:/bin/bash
Примітка
`getent` отримує записи з бібліотек перемикання служб імен (NSS). Це означає, що, наприклад, на відміну від `passwd` або `dig`, він запитуватиме різні бази даних, зокрема `/etc/hosts` для `getent hosts` або з `samba` у випадку `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
). Якщо це не бажана поведінка, і ви натомість хочете мати можливість пропустити ім’я домену за замовчуванням під час автентифікації, ви можете налаштувати Samba на певний домен за замовчуванням.
Це відносно простий процес, який потребує налаштування конфігурації у файлі конфігурації SSSD.
[user@host ~]$ sudo vi /etc/samba/smb.conf
[global]
...
winbind use default domain = yes
Додаючи winbind use default domain
, ви наказуєте Samba зробити висновок, що користувач намагається автентифікуватися як користувач із домену ad.company.local
. Це дозволяє вам автентифікуватись як щось на зразок john.doe
замість john.doe@ad.company.local
.
Щоб ця зміна конфігурації вступила в силу, потрібно перезапустити служби smb
і winbind
за допомогою systemctl
.
[user@host ~]$ sudo systemctl restart smb winbind
Таким же чином, якщо ви не бажаєте, щоб ваші домашні каталоги суфіксувалися доменним іменем, ви можете додати ці параметри у свій файл конфігурації /etc/samba/smb.conf
:
[global]
template homedir = /home/%U
Не забудьте перезапустити служби smb
і winbind
.
Author: Neel Chauhan
Contributors: Steven Spencer