Winbind, Samba, имя домена Active Directory и Drakxtools

Тестировали ввод ROSA Fresh/RED в домен Microsoft Active Directory. Ниже записал, что нашел, чтобы потом можно было вспомнить.

drakxtools 14.87, samba 4.6.14, MIT kerberos krb5 1.14.4.

Домен Windows называется «KELEG-HOME.RU». Вводили в домен через графическую утилиту Drakauth из состава drakxtools.

Проблема в том, что после ввода в домен создались 2 папки: /home/KELEG-HOME/ и /home/KELEG-HOME.RU. Доменные пользователи создались в /home/KELEG-HOME/, а /home/KELEG-HOME.RU осталась пустой.

В Drakauth можно выбрать 2 типа домена: Windows NT и Active Directory. Разница минимальна:
разница только в конфиге самбы, который будет записан.
Если выбран NT-домен, то будет security = domain, если AD, то security = ads и будет немного доп. параметров winbind, и все, в этом вся разница. См man smb.conf https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html#SECURITY
В drakxtools/perl-install/fs/remote/smb.pm функция write_smb_conf пишет конфиг Samba, если выбрано NT, а функция write_smb_ads_conf — если выбран домен AD, разница минимальна, как видите (выше приведены ссылки не на ветку master, а на дерево исходников на коммите, по которому я смотрел, чтобы в будущем ссылки из этой статьи вели именно на тот код, который упомянут, а не тот, который будет с накопившимися изменениями).

В drakxtools/perl-install/authentication.pm есть вызовы функции mkdir_p для создания папок в /home. Однако Samba сама может создавать эти папки.

В обоих случаях есть шаблон пути к автоматически создаваемой домашней папке доменного пользователя:
template homedir = /home/%D/%U
где, согласно man smb.conf, %D заменяется на имя домена или имя рабочей группы (workgroup), по документации не ясно, как именно получается %D, а %U — это имя пользователя, например, administrator.

Из-за неясности с методом формирования %D лезем в код Samba.

По коду winbind в составе Samba посмотрел, насколько понял, он спрашивает у Windows: как зовется твой домен? Если тот ему отвечает, то используется имя из ответа, а в ответ Windows посылает имя из ключа реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomainName, судя по всему. Если Windows не отвечает, какое имя домена, то winbind использует имя домена , которое у него есть (а вот откуда оно у него, не могу точно сказать).
Ключ реестра нашел так: в коде winbind grep-ом нашел base.logon_domain.string и загуглил эту строку.

Выдержка из samba/source3/winbindd/winbindd_pam.c, этот код присваивает домену имеющееся имя, если Windows не ответил, как зовут домен:

if (!nt_domain) {
/* If the server didn't give us one, just use the one
* we sent them */
nt_domain = name_domain;
}

Это отвечает на вопрос, почему доменные пользователи создались в папке /home/KELEG-HOME, а не /home/KELEG-HOME.RU. Скорее всего, drakxtools создал /home/KELEG-HOME.RU, а Samba создала /home/KELEG-HOME/administrator. Собственно, можно запатчить winbind, но лучше таким не заниматься, последствия непредсказуемы.

Далее запишу, какие были автоматически созданные drakauth’ом конфиги Samba и Kerberos.
/etc/samba/smb.conf:

[global]
passdb backend = tdbsam
winbind nss info = rfc2307
kerberos method = secrets only
workgroup = KELEG-HOME
realm  = KELEG-HOME.RU
netbios name = red
security = ads
encrypt passwords = Yes
password server = *
log file = /var/log/samba/log.%m
max log size = 50
socket options = TCP_NODELAY
os level = 0
local master = No
dns proxy = No
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind separator = +
template homedir = /home/%D/%U
template shell = /bin/bash
winbind enum groups = Yes
winbind enum users = Yes
winbind refresh tickets = true
winbind offline logon = true
winbind cache time = 1440
winbind use default domain = Yes

/etc/krb5.conf:

[libdefaults]
 dns_lookup_kdc = false
 dns_lookup_realm = false
 default_realm = KELEG-HOME.RU

[realms]
 KELEG-HOME.RU = {
  kdc = WINSERVER.KELEG-HOME.RU:88
  admin_server = WINSERVER.KELEG-HOME.RU:749
  default_domain = KELEG-HOME.RU
 }

[domain_realm]
 .KELEG-HOME.RU = KELEG-HOME.RU
 KELEG-HOME.RU = KELEG-HOME.RU

[kdc]
 profile = /etc/kerberos/krb5kdc/kdc.conf

[pam]
 debug = false
 ticket_lifetime = 36000
 renew_lifetime = 36000
 forwardable = true
 krb4_convert = false

[login]
 krb4_convert = false
 krb4_get_tickets = false

ls -la /etc | grep krb

-rw-r--r--   1 root root      539 дек 12 14:40 krb5.conf
drwxr-xr-x   2 root root     4096 фев  7  2018 krb5.conf.d/
-rw-r--r--   1 root root      462 дек 13 06:36 krb5.conf.orig

Отправить ответ

avatar
  Subscribe  
Сообщать по почте