Найчастіше виникає потреба ввести Linux-машину в існуючий домен Windows. Наприклад, щоб створити файловий сервер за допомогою Samba. Зробити це дуже просто, для цього вам знадобляться клієнт Kerberos, Samba та Winbind.
Перше, що нам знадобиться, встановити ці пакети:
sudo apt update -y
sudo apt upgrade -y
sudo apt install krb5-user samba winbind -y
sudo apt install libpam-krb5 libpam-winbind libnss-winbind -y
Далі вам потрібно налаштувати всі перераховані вище інструменти для роботи з вашим доменом. Допустимо, ви хочете увійти до домену K2Y.LOCAL, доменконтроллером якого є сервер dc.k2y.local з IP адресою 192.168.0.1.
Цей сервер є і первинним DNS сервером домену. Крім того, припустимо у вас є другий доменконтроллер1), він же DNS - dc2.domain.com з IP 192.168.0.2. Ваш комп'ютер буде називатися ubuntu.
Настройка DNS
Для початку необхідно змінити налаштування DNS на вашій машині, прописавши як DNS сервер доменконтроллер2) і в якості домену пошуку - потрібний домен.
Якщо у вас статична IP-адреса, то в Ubuntu Desktop це можна зробити через Network Manager, в Ubuntu Server необхідно змінити вміст файлу /etc/resolv.conf приблизно таке:
sudo nano /etc/resolv.conf
domain k2y.local
search k2y.local
nameserver 192.168.0.1
У сучасних дистрибутивах файл resolv.conf створюється автоматично і правити вручну не потрібно. Для отримання потрібного результату потрібно додати необхідні зміни до файлу: /etc/resolvconf/resolv.conf.d/head
Дані, які будуть додані до нього, будуть автоматично вставлені у файл /etc/resolv.conf
Якщо IP-адреса динамічна і присвоюється DHCP сервером то після перезавантаження resolv.conf може формуватися "неправильний" resolv.conf' , наприклад є тільки один nameserver 192.168.0.1 і не вказані domain і search.
sudo apt install resolvconf -y
sudo nano /etc/resolvconf/resolv.conf.d/head
domain k2y.local
nameserver 192.168.0.1
sudo nano /etc/dhcp/dhclient.conf
supersede domain-name "k2y.local"
Для застосування змін залишається перезапустити службу:
sudo netplanpl apy
Тепер переконайтеся, що ви задали потрібне ім'я комп'ютера у файлі /etc/hostname:
sudo nano /etc/hostname
ubuntu - (ім'я машеко комп'ютера)
Крім того, необхідно відредагувати файл /etc/hosts так, щоб у ньому був запис з повним доменним ім'ям комп'ютера і обов'язково коротким ім'ям хоста, що посилається на один із внутрішніх IP:
sudo nano /etc/hosts
# Імена цього комп'ютера
127.0.0.1 localhost
127.0.1.1 dc.k2y.local dc
192.168.0.1 dc.k2y.local dc
Відразу потрібно перевірити, чи нормально пінгується наш контролер домену, за коротким і повним ім'ям, щоб у майбутньому не отримувати помилки, що контролер домену не знайдено:
ping dc
ping dc.k2y.local
Налаштування синхронізації часу
Далі необхідно налаштувати синхронізацію часу із доменконтроллером. Якщо різниця буде більше 5 хвилин, ми не зможемо отримати лист від Kerberos. Для одноразової синхронізації можна скористатися командою:
sudo net time set -S dc
Автоматична синхронізація налаштовується за допомогою ntpd, це демон буде періодично виконувати синхронізацію. Для початку його необхідно встановити:
sudo apt install ntp -y
Тепер виправте файл /etc/ntp.conf, додавши до нього інформацію про ваш сервер часу:
sudo nano /etc/ntp.conf
# You do need to talk to an NTP server or two (or three).
server dc.k2y.local
Після цього перезапустіть демон ntpd:
sudo /etc/init.d/ntp restart
Налаштування авторизації через Kerberos
Почнемо з налаштування авторизації в домені через протокол Kerberos. Вам потрібно змінити файл /etc/krb5.conf. Загалом він виглядає так:
sudo mv /etc/krb5.conf /etc/krb5.conf.save
sudo nano /etc/krb5.conf
[libdefaults]
default_realm = K2Y.LOCAL
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
K2Y.LOCAL = {
kdc = dc
admin_server = dc
default_domain = K2Y.LOCAL
}
[domain_realm]
.k2y.local = K2Y.LOCAL
k2y.local = K2Y.LOCAL
[login]
krb4_convert = false
krb4_get_tickets = false
Це не всі можливі опції налаштування Kerberos, лише основні. Однак їх зазвичай достатньо.
Тепер настав час перевірити, чи ми можемо авторизуватися в домені. Для цього виконайте команду
sudo kinit username@K2Y.LOCAL
Замість username, звичайно, варто вписати ім'я існуючого користувача домену.
Ім'я домену необхідно писати великими літерами!
Якщо ви не отримали жодних помилок - значить ви налаштували все правильно і домен віддає вам квиток Kerberos. До речі, деякі поширені помилки перераховані трохи нижче.
Переконатись у тому, що квиток отримано, можна виконавши команду
sudo klist
Видалити всі квитки (вони вам взагалі не потрібні) можна командою
sudo kdestroy
Отже, будемо вважати, що авторизацію ви налаштували, настав час налаштувати безпосередньо вхід у домен, про це після списку поширених помилок kinit.
Найпоширеніші помилки kinit
kinit(v5): Clock skew too great while getting initial credentials
Это значит, что у вашего компьютера не синхронизировано время с доменконтроллером (см. выше).
kinit(v5): Preauthentication failed while getting initial credentials
Вы ввели неверный пароль.
kinit(v5): KDC reply did not match expectations while getting initial credentials
Самая странная ошибка. Убедитесь, что имя realm в krb5.conf, а так же домен в команде kinit введены большими буквами:
K2Y.LOCAL = {
# ...
kinit username@K2Y.LOCAL
kinit(v5): Client not found in Kerberos database while getting initial credentials
Зазначеного користувача немає в домені.
Настройка Samba и вход в домен
Для того, щоб увійти до домену, необхідно прописати правильні налаштування у файлі /etc/samba/smb.conf. На даному етапі вас повинні цікавити лише деякі опції із секції [global]. Нижче – приклад частини файлу конфігурації Samba з коментарями щодо значення важливих параметрів:
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.save
sudo nano /etc/samba/smb.conf
[global]
# Возможность оффлайн-авторизации при недоступности доменконтроллера
winbind offline logon = yes
# Период кэширования учетных записей, по умолчанию равен 300 секунд
winbind cache time = 300
# Необязательная настройка, но избавляет от нудных пауз, указываем контроллер домена dc,
# можно указать и ip, но это является плохим тоном
password server = dc
# Эти две опции нужно писать именно в заглавном регистре, причём workgroup без
# последней секции после точки, а realm - полное имя домена
workgroup = K2Y
realm = K2Y.LOCAL
# Эти две опции отвечают как раз за авторизацию через AD
security = ADS
encrypt passwords = true
# Просто важные
dns proxy = no
socket options = TCP_NODELAY
# Если вы не хотите, чтобы самба пыталась при случае вылезти в лидеры в домене или рабочей группе,
# или даже стать доменконтроллером, то всегда прописывайте эти пять опций именно в таком виде
domain master = no
local master = no
preferred master = no
os level = 0
domain logons = no
# Опции сопоставления доменных пользователей и виртуальных пользователей в системе через Winbind.
# Диапазоны идентификаторов для виртуальных пользователей и групп.
idmap config * : range = 10000-20000
idmap config * : backend = tdb
# Эти опции не стоит выключать.
winbind enum groups = yes
winbind enum users = yes
# Использовать домен по умолчанию для имён пользователей. Без этой опции имена пользователей и групп
# будут использоваться с доменом, т.е. вместо username - DOMAIN\username.
# Возможно именно это вам и нужно, однако обычно проще этот параметр включить.
winbind use default domain = yes
# Если вы хотите разрещить использовать командную строку для пользователей домена, то
# добавьте следующую строку, иначе в качестве shell'а будет вызываться /bin/false
template shell = /bin/bash
# Для автоматического обновления билета Kerberos модулем pam_winbind.so нужно добавить строчку
winbind refresh tickets = yes
Відредагувати файл /etc/security/limits.conf
sudo nano /etc/security/limits.conf
# Добавить в конец файла строки:
* - nofile 16384
root - nofile 16384
Перегрузить компьютер.
Виконайте команду
sudo testparm
Вона перевірить вашу конфігурацію на помилки та видасть сумарне зведення про нього:
Як видно, ми задали правильні параметри для того, щоб наш комп'ютер став членом домену. Тепер настав час спробувати безпосередньо увійти в домен. Для цього введіть команду:
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions
Як видно, ми задали правильні параметри для того, щоб наш комп'ютер став членом домену. Тепер настав час спробувати безпосередньо увійти в домен. Для цього введіть команду:ду:
sudo net ads join -U username -D K2Y.LOCAL
І у разі успіху ви побачите щось схоже на:
Enter username's password:
Using short domain name -- K2Y
Joined 'ubuntu' to realm 'k2y.local.'
Також можна набрати команду:
sudo net ads testjoin
Якщо все добре, можна побачити:
Join is OK
Якщо все пройшло без помилок, то вітаємо, ви успішно увійшли до домену! Ви можете заглянути в AD і переконатися в цьому. Крім того, добре б перевірити, що ви можете бачити ресурси в домені. Для цього встановіть smbclient:
sudo apt install smbclient
Після перезапуску перевірте, що Winbind встановив довірчі відносини з командою AD:
sudo wbinfo -t
Повинні побачити:
checking the trust secret for domain DCN via RPC calls succeeded
А так само, що Winbind побачив користувачів та групи з AD:
sudo wbinfo -u
sudo wbinfo -g
Отже, Winbind працює, але в систему він ще не інтегрований.
Додавання Winbind як джерело користувачів та груп
Для того, щоб ваша Ubuntu прозоро працювала з користувачами домену, зокрема, щоб ви могли призначати користувачів домену власниками папок та файлів, необхідно вказати Ubuntu використовувати Winbind як додаткове джерело інформації про користувачів та групи.
Для цього змініть два рядки у файлі /etc/nsswitch.conf:
sudo nano /etc/nsswitch.conf
passwd: compat
group: compat
добавив к ним в конец winbind:
passwd: compat winbind
group: compat winbind
также рекомендую привести строку hosts к виду:
hosts: dns mdns4_minimal[NotFoud=return] mdns4
Тепер перевірте, що Ubuntu запитує у Winbind інформацію про користувачів та групи, виконавши
sudo getent passwd
sudo getent group
Перша команда повинна вам повернути весь вміст вашого файлу /etc/passwd, тобто ваших локальних користувачів плюс користувачів домену з ID із заданого вами в smb.conf діапазону. Друга має зробити те саме для груп.
Тепер ви можете взяти будь-якого користувача домену і зробити його, наприклад, власником якогось файлу.
Авторизація в Ubuntu через користувачів домену
Незважаючи на те, що всі користувачі домену фактично стали повноцінними користувачами системи (у чому можна переконатися, виконавши останні дві команди з попереднього розділу), зайти ні під ким із них до системи все ще не можна. Для увімкнення можливості авторизації користувачів домену на комп'ютері з Ubuntu необхідно налаштувати PAM на роботу з Winbind.
Для Ubuntu 10.04 та вище додайте лише один рядок у файлі /etc/pam.d/common-session, т.к. PAM і так непогано справляється з авторизацією:
sudo nano /etc/pam.d/common-session
session optional pam_mkhomedir.so skel=/etc/skel/ umask=0077
sudo nano /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
greeter-show-manual-login=true
Готово, всі налаштування завершено. Перезавантажуйтеся та намагайтеся увійти з обліковим записом користувача домену.
Коментарі до статті (2):