Samba DC като втори контролер в домейн AD Windows 2012R2 и преносими папки за клиенти на Windows и Linux.

Samba DC като втори контролер в домейн AD Windows 2012R2 и преносими папки за клиенти на Windows и Linux.
Осъзнаването, че съм попаднал в импортозаместяване, не дойде веднага. Само когато от по-висшата организация свежите доставки на компютри започнаха стабилно да пристигат с дистрибутив «Алт Линукс» на борда, заподозрях нещо нередно.

Но в процеса на преминаване през етапите на приемане на неизбежното, се увлякох и даже започнах да получавам приятно усещане от процеса. В един момент си помислих, че при такива темпове рано или късно ще трябва да се разделя с решенията за организация на службите каталози от Microsoft и да се насоча към нещо по-екзотично. Затова, за да се подготвя предварително за неизбежното и да улавя колкото се може повече подводни камъни, реших да разгръща тестова среда, включваща:

  • DC1 — Windows Server 2012R2
  • DC2 — Алт Сервер 8.2
  • File Server — Windows Server 2012R2
  • PC1 — Windows 7
  • PC2 — Алт Рабоча станция 8.2

Задачи на стенда:

  1. Да се разгръне домейн на база w2k12r2. Да се създаде минимален набор от групови политики (аналогично на използващите се в работната инфраструктура), включително политика за преместване на работни папки на потребителите (Изтегляния/Документи/Работен плот). В крайна сметка желая, при смяна на работното място от Windows на Linux и обратно, потребителят да има комфортен достъп до своите работни документи.
  2. Въвеждане на Samba DC като втори контролер. Проверка на репликацията на службите каталози и DNS.
  3. Настройка на клиенти от Linux за работа с преместваните папки.

Реализация:

  1. Инсталиране и въвеждане на нов контролер.С инсталацията на MS Windows 2012R2 всичко е просто и по-или-мене понятно. В интернет има 1001 ръководство за разгръщане на домейн на Windows как с помощта на GUI така и средства от Powershell, затова няма да повтарям излишно, оставям само линка на официалната документация, за любопитните и тези, които искат да си освежат паметта.

    Но има един важен момент в тази точка. Към днешна дата Samba не може да работи с каталожни схеми по-високи от 2008R2.

    Заглавие на спойлера По-скоро разработчиците са обявили тази поддръжка за експериментална. Но на практика опитът за въвеждане на Samba като втори DC в съществуващ домейн на Windows с схема 69 ще ви срещне с следната грешка.

    DsAddEntry не успя с статус WERR_ACCESS_DENIED информация (8567, ‘WERR_DS_INCOMPATIBLE_VERSION’)

    Проблемата е, че Windows 2012 и 2012R2 използват инструменти WMI за работа с домейни и гори, чиято стабилна поддръжка е обявена само за версия Samba 4.11, която трябва да излезе до края на тази година.
    Оттук следва, че единствената опция за въвеждане на Samba в AD домейн, разположен на сървър 2012R2, е понижаване на схемата от 69 до 47. Разбира се, в работна инфраструктура без основателни причини това не трябва да се прави, но тук имаме тестова среда, така че защо не.

    Инсталираме Alt Server 8.2. По време на инсталацията избираме профила „Сървър Samba-DC (контролер AD)“. На разположения сървър извършваме пълно обновление на системата и инсталираме пакета task-samba-dc, който ще изтегли всичко необходимо.

    # apt-get install task-samba-dc

    Ако случайно task-samba-dc, в противоречие с уверенията на документацията на Alt, откаже да инсталира всичко необходимо.

    # apt-get install python-module-samba-DC samba-DC-common samba-DC-winbind-clients samba-DC-winbind samba-DC-common-libs libpytalloc-devel

    Следва да преминем към настройката на Kerberos и получаването на билет. Отваряме файла krb5.conf, преминаваме в секцията [libdefaults] и го променяме на следния вид:

    # vim /etc/krb5.conf
     dns_lookup_kdc = true
     dns_lookup_realm = true
     default_realm = TEST.LOCAL

    Изискваме билет.

    # kinit administrator
    Password for administrator@TEST.LOCAL:

    Проверяваме списъка с получените тикети Kerberos.

    # klist
    Ticket cache: KEYRING:persistent:0:0
    Default principal: administrator@TEST.LOCAL
    
    Valid starting       Expires              Service principal
    16.05.2019 11:51:38  16.05.2019 21:51:38  krbtgt/TEST.LOCAL@TEST.LOCAL
            renew until 23.05.2019 11:51:35

    Сега изтриваме или преименуваме съществуващия конфиг на Samba.

    # mv smb.conf smb.conf.bak1

    И накрая въвеждаме в домейн AD втори контролер:

    # samba-tool domain join test.local DC -U"TESTadministrator"

    Успешното въвеждане ще бъде съпроводено с следния лог.

    Намиране на записваем DC за домейн 'test.local'
    Намерено DC DC1.TEST.LOCAL
    Парола за [TESTadministrator]:
    Преподключване към именния майстор e31d7da6-8f56-4420-8473-80f2b3a31338._msdcs.TEST.LOCAL
    DNS името на новия именен майстор е DC1.TEST.LOCAL
    работна група е TEST
    област е TEST.LOCAL
    Добавяне на CN=DC2,OU=Domain Controllers,DC=TEST,DC=LOCAL
    Добавяне на CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=TEST,DC=LOCAL
    Добавяне на CN=NTDS Settings,CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=TEST,DC=LOCAL
    Добавяне на СПН на CN=DC2,OU=Domain Controllers,DC=TEST,DC=LOCAL
    Настройка на паролата за акаунта DC2$
    Активиране на акаунта
    Извикване на голяма инсталация
    Търсене на IPv4 адреси
    Търсене на IPv6 адреси
    Няма да бъде присвоен IPv6 адрес
    Настройка на share.ldb
    Настройка на secrets.ldb
    Настройка на регистъра
    Настройка на базата данни с привилегии
    Настройка на idmap db
    Настройка на SAM db
    Настройка на раздели и настройки на sam.ldb
    Настройка на sam.ldb rootDSE
    Предварително зареждане на схемата на Samba 4 и AD
    Конфигурация на Kerberos, подходяща за Samba AD, е генерирана в /var/lib/samba/private/krb5.conf
    Инсталиране на домейн DN DC=TEST,DC=LOCAL
    Започване на репликация
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] обекти[402/1426] свързани_стойности[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] обекти[804/1426] свързани_стойности[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] обекти[1206/1426] свързани_стойности[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] обекти[1608/1426] свързани_стойности[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] обекти[1743/1426] свързани_стойности[0/0]
    Анализиране и прилагане на схематични обекти
    Част[CN=Configuration,DC=TEST,DC=LOCAL] обекти[402/2240] свързани_стойности[0/24]
    Част[CN=Configuration,DC=TEST,DC=LOCAL] обекти[804/2240] свързани_стойности[0/24]
    Част[CN=Configuration,DC=TEST,DC=LOCAL] обекти[1206/2240] свързани_стойности[0/24]
    Част[CN=Configuration,DC=TEST,DC=LOCAL] обекти[1608/2240] свързани_стойности[0/24]
    Част[CN=Configuration,DC=TEST,DC=LOCAL] обекти[1772/2240] свързани_стойности[24/24]
    Репликиране на критични обекти от базовия DN на домейна
    Част[DC=TEST,DC=LOCAL] обекти[109/110] свързани_стойности[26/29]
    Част[DC=TEST,DC=LOCAL] обекти[394/5008] свързани_стойности[29/29]
    Завършено с винаги репликиран NC (база, конфигурация, схема)
    Репликиране на DC=DomainDnsZones,DC=TEST,DC=LOCAL
    Част[DC=DomainDnsZones,DC=TEST,DC=LOCAL] обекти[42/42] свързани_стойности[0/0]
    Репликиране на DC=ForestDnsZones,DC=TEST,DC=LOCAL
    Част[DC=ForestDnsZones,DC=TEST,DC=LOCAL] обекти[20/20] свързани_стойности[0/0]
    Exop на[CN=RID Manager$,CN=System,DC=TEST,DC=LOCAL] обекти[3] свързани_стойности[0]
    Записване на SAM базата данни
    Добавяне на 1 отдалечени DNS записи за DC2.TEST.LOCAL
    Добавяне на DNS A запис DC2.TEST.LOCAL за IPv4 IP: 192.168.90.201
    Добавяне на DNS CNAME запис 6ff1df40-cbb5-41f0-b7b3-53a27dde8edf._msdcs.TEST.LOCAL за DC2.TEST.LOCAL
    Всички останали DNS записи (като _ldap SRV записи) ще бъдат създадени при първото стартиране на samba_dnsupdate
    Репликиране на нови DNS записи в DC=DomainDnsZones,DC=TEST,DC=LOCAL
    Част[DC=DomainDnsZones,DC=TEST,DC=LOCAL] обекти[1/42] свързани_стойности[0/0]
    Репликиране на нови DNS записи в DC=ForestDnsZones,DC=TEST,DC=LOCAL
    Част[DC=ForestDnsZones,DC=TEST,DC=LOCAL] обекти[1/20] свързани_стойности[0/0]
    Изпращане на DsReplicaUpdateRefs за всички репликирани части
    Настройка на isSynchronized и dsServiceName
    Настройка на базата данни със семена
    Присъединих се към домейн TEST (SID S-1-5-21-3959064270-1572045903-2556826204) като DC

    В инструмента ADUC трябва да се появи запис за новия DC в домена TEST.LOCAL, а в DNS диспетчера — нов А запис, съответстващ на DC2.

  2. Репликация между контролеритеНека първо проверим работата на службата за репликация на каталози (DRS)
    # samba-tool drs showrepl

    Всички опити за репликация в изхода трябва да са успешни. В списъка с обекти KCC, в рамките на 15 минути след въвеждането, нашият DC1 на Windows трябва да се появи.

    Основен-Първи-Сайт-ИмеDC2
    	DSA Опции: 0x00000001
    	DSA обект GUID: 0e9f5bce-ff59-401e-bdbd-fc69df3fc6bf
    	DSA invocationId: 017997b5-d718-41d7-a3f3-e57ab5151b5c
    
    	==== ВХОДЯЩИ СЪСЕДИ ====
    
    	DC=ForestDnsZones,DC=test,DC=local
    	        Основен-Първи-Сайт-ИмеDC1 чрез RPC
    	                DSA обект GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Последен опит @ Пн 27 Май 12:56:31 2019 MSK беше успешен
    	                0 последователни неуспеха.
    	                Последен успех @ Пн 27 Май 12:56:31 2019 MSK
    
    	DC=DomainDnsZones,DC=test,DC=local
    	        Основен-Първи-Сайт-ИмеDC1 чрез RPC
    	                DSA обект GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Последен опит @ Пн 27 Май 12:56:32 2019 MSK беше успешен
    	                0 последователни неуспеха.
    	                Последен успех @ Пн 27 Май 12:56:32 2019 MSK
    
    	CN=Schema,CN=Configuration,DC=test,DC=local
    	        Основен-Първи-Сайт-ИмеDC1 чрез RPC
    	                DSA обект GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Последен опит @ Пн 27 Май 12:56:32 2019 MSK беше успешен
    	                0 последователни неуспеха.
    	                Последен успех @ Пн 27 Май 12:56:32 2019 MSK
    
    	DC=test,DC=local
    	        Основен-Първи-Сайт-ИмеDC1 чрез RPC
    	                DSA обект GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Последен опит @ Пн 27 Май 12:56:32 2019 MSK беше успешен
    	                0 последователни неуспеха.
    	                Последен успех @ Пн 27 Май 12:56:32 2019 MSK
    
    	CN=Configuration,DC=test,DC=local
    	        Основен-Първи-Сайт-ИмеDC1 чрез RPC
    	                DSA обект GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Последен опит @ Пн 27 Май 12:56:33 2019 MSK беше успешен
    	                0 последователни неуспеха.
    	                Последен успех @ Пн 27 Май 12:56:33 2019 MSK
    
    	==== ИЗХОДЯЩИ СЪСЕДИ ====
    
    	DC=ForestDnsZones,DC=test,DC=local
    	        Основен-Първи-Сайт-ИмеDC1 чрез RPC
    	                DSA обект GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Последен опит @ Чт 23 Май 16:40:03 2019 MSK беше успешен
    	                0 последователни неуспеха.
    	                Последен успех @ Чт 23 Май 16:40:03 2019 MSK
    
    	DC=DomainDnsZones,DC=test,DC=local
    	        Основен-Първи-Сайт-ИмеDC1 чрез RPC
    	                DSA обект GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Последен опит @ Чт 23 Май 16:40:03 2019 MSK беше успешен
    	                0 последователни неуспеха.
    	                Последен успех @ Чт 23 Май 16:40:03 2019 MSK
    
    	CN=Schema,CN=Configuration,DC=test,DC=local
    	        Основен-Първи-Сайт-ИмеDC1 чрез RPC
    	                DSA обект GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Последен опит @ Чт 23 Май 16:40:08 2019 MSK беше успешен
    	                0 последователни неуспеха.
    	                Последен успех @ Чт 23 Май 16:40:08 2019 MSK
    
    	DC=test,DC=local
    	        Основен-Първи-Сайт-ИмеDC1 чрез RPC
    	                DSA обект GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Последен опит @ Чт 23 Май 16:40:08 2019 MSK беше успешен
    	                0 последователни неуспеха.
    	                Последен успех @ Чт 23 Май 16:40:08 2019 MSK
    
    	CN=Configuration,DC=test,DC=local
    	        Основен-Първи-Сайт-ИмеDC1 чрез RPC
    	                DSA обект GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Последен опит @ Пн 27 Май 12:12:17 2019 MSK беше успешен
    	                0 последователни неуспеха.
    	                Последен успех @ Пн 27 Май 12:12:17 2019 MSK
    
    	==== KCC СВЪЗКИ ====
    
    	Връзка --
    	        Име на връзката: 6d2652b3-e723-4af7-a19f-1ee48915753c
    	        Включена        : TRUE
    	        DNS име на сървъра : DC1.test.local
    	        DN име на сървъра  : CN=NTDS Settings,CN=DC1,CN=Servers,CN=Основен-Първи-Сайт-Име,CN=Sites,CN=Configuration,DC=test,DC=local
    	                TransportType: RPC
    	                опции: 0x00000001
    	Внимание: Няма NC реплицирано за Връзката!

    Предупреждение «Няма NC реплицирано за Връзката!» може да се игнорира спокойно. То се появява, защото при регистрацията на нов DC Samba неправилно задава някои флагове за репликация.

    Също така е добре да проверите репликацията на LDAP.

    # samba-tool ldapcmp ldap://dc1.test.local ldap://dc2.test.local -Uadministrator

    Командата, посочена по-горе, ще сравни стойностите на атрибутите на обектите в целия каталог на DC1 и DC2.

    Пример за успешна репликация

    * Сравняване на контекста [DOMAIN]...
    
    	* Обекти за сравнение: 249
    
    	* Резултат за [DOMAIN]: УСПЕХ
    
    	* Сравняване на контекста [CONFIGURATION]...
    
    	* Обекти за сравнение: 1750
    
    	* Резултат за [CONFIGURATION]: УСПЕХ
    
    	* Сравняване на контекста [SCHEMA]...
    
    	* Обекти за сравнение: 1739
    
    	* Резултат за [SCHEMA]: УСПЕХ
    
    	* Сравняване на контекста [DNSDOMAIN]...
    
    	* Обекти за сравнение: 42
    
    	* Резултат за [DNSDOMAIN]: УСПЕХ
    
    	* Сравняване на контекста [DNSFOREST]...
    
    	* Обекти за сравнение: 20
    
    	* Резултат за [DNSFOREST]: УСПЕХ

    В редица случаи атрибутите на обектите на различни контролери може да се различават, и изходът от командата ще ви уведоми за това. Обаче, в далеч не всички случаи това ще е признак за проблема с репликацията.

    Следващата стъпка е ръчно да настроите стабилна репликация на каталога SysVol.
    Факт е, че Samba все още не поддържа DFS-R, както по-рано не поддържаше и FRS. Следователно, единственото работещо решение за репликация между DC Samba и Windows до днешен ден е едностранната репликация с помощта на утилитата Robocopy от комплекта Windows Server 2003 Resource Kit Tools.

    Разработчиците на Samba, за да избегнат проблеми с съвместимостта, препоръчват първо да инсталирате комплекта утилити на обикновена работна станция и след това да копирате Robocopy на контролера в папката «C:Program Files (x86)Windows Resource KitsTools»

    След инсталацията, в планирача на задачите на контролера с Windows създайте задача за изпълнение на репликацията с следните параметри:

    — Изпълнява се за всички потребители
    — Триггер за изпълнение Ежедневно на всеки 5 минути през деня
    — В действията посочваме пътя към утилитата robocopy, като аргументи задаваме:

    DC1SYSVOLtest.local DC2SYSVOLtest.local /mir /sec

    В конкретния случай копираме съдържанието на каталога SysVol от DC1 на DC2.

  3. Пренасяне на папките на потребителите с помощта на конфигурацията pam_mountОпитът ми показа два жизнеспособни варианта да реша тази задача с негова помощ.
    1. Пълно монтиране на папка с профил от мрежата в раздел /home. Проста опция. Работи отлично, ако имената на папките „Моите документи“, „Изтегляния“ и „Работен плот“ съвпадат в двете операционни системи. Предполага се, че PC-то на Linux вече е включено в домейна и потребителите влизат с домейн акаунтите си, използвайки sssd за механизъм на удостоверяване и авторизация.
      # vim /etc/security/pam_mount.conf.xml
      <volume uid="100000000-2000000000" fstype="cifs" server="dfs" path="Profile_Users/%(USER)" mountpoint="~" options="sec=krb5,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775"/>
      

      където:

      • uid=“100000000-2000000000” — диапазон UID, зададен на домейн потребители от SSSD
      • server=“dfs” — име на файловия сървър
      • path=“Profile_Users/%(USER)” — ресурс на файловия сървър, съдържащ профила на потребителя
      • mountpoint=»~» — път на монтиране в домашната папка на потребителя

      Потребителското име се предава в макропроменливата «%(USER)», използвана от pam_mount, за свързване с нашия мрежов ресурс така, както е въведено в дисплейния мениджър. Следователно е важно, че в DM името се въвежда без явното посочване на домейн името.

      В sssd.conf това се решава с коментиране или излагане на стойност False в опцията use_fully_qualified_names, която активира режима на пълни имена (включително домейн) за потребители и групи.

    2. Вторият метод е по-малко директен и неясен, но според мен е по-удобен и предпочитан. Разликата от първия е само в конфигурацията на pam_mount.
      # vim /etc/security/pam_mount.conf.xml

      Т.е. просто отделно монтираме всяка от нашите папки в съответстващата й директория.

Изводи

През половин месец работа на тестовия стенд, тази комбинация успешно преживя няколко редуващи се дългосрочни и краткосрочни прекъсвания на двата контролера, практически без последствия за клиентите (един път клиент на Windows7 загуби доверителни отношения).

Като цяло, останах с доста приятни впечатления от работата с този продукт, въпреки всички нюанси, с които се сблъсках, както в статията, така и "зад кулисите".

Има много подводни камъни и по време на работата с Samba ще е необходимо да ги изловиш в голямо количество. Въпреки това, към днешна дата няма други решения, които позволяват организирането на хибридна среда с използване на услуга за директории и без Windows.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster