Ubuntu

Введіть Ubuntu 18.04 в AD

Найчастіше виникає потреба ввести 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):

Большое спасибо, действительно толково и понятно все написано, все получилось, проблемы только с DNS были, но это были косяки на виндовом сервере

svetoch

Спасибо, единственно рабочая статья в сети пожалуй, остальное так и не заработало.

Мои отличия.

Пользовался nano вместо gedit.

Настройка DNS:

sudo nano /etc/resolvconf/resolv.conf.d/base
#Указываем DNS нашего домена
domain domain.local
search domain.local
nameserver 192.168.1.250

sudo resolvconf -u

и есть ньюанс, если у вас после join машина в домен села но не появились записи в DNS, либо правильно настроить виндовый DNS, либо сделайте там A и  PTR  записи для него руками. Мне было проще второе.

Сергей