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.

    Заголовок спойлера Точніше розробниками дана підтримка заявлена ​​як експериментальна. Але на практиці спроба введення самби як другий DC в існуючий домен Windows зі схемою 69 - зустріне вас наступною помилкою

    DsAddEntry failed with status WERR_ACCESS_DENIED info (8567, 'WERR_DS_INCOMPATIBLE_VERSION')

    Проблема в тому що Windows 2012 та 2012R2 використовують інструменти WMI для роботи з доменами та лісами, стабільна підтримка яких анонсована лише до версії Samba 4.11, яка має вийти до кінця цього року.
    З цього випливає, що єдиним варіантом для введення самби в домен AD, розгорнутий на сервері 2012R2, є зниження схеми з 69 до 47. Зрозуміло на робочій інфраструктурі без вагомих причин цього робити не треба, але у нас тут тестовий стенд, так що чому б власне, і ні.

    Ставимо Альт Сервер 8.2. Під час встановлення вибираємо профіль "Сервер Samba-DC (контролер AD)". На розгорнутому сервері робимо повне оновлення системи, і встановлюємо пакет task-samba-dc, який потягне за собою все необхідне

    # apt-get install task-samba-dc

    Якщо раптом task-samba-dc, попри запевнення документації Альта відмовиться ставити все необхідне сам.

    # 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

    Тепер видаляємо чи перейменовуємо існуючий конфіг самби.

    # mv smb.conf smb.conf.bak1

    І нарешті вводимо в домен AD другим контролером:

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

    Успішне введення супроводжуватиметься наступним логом

    Finding a writeable DC for domain 'test.local'
    Found DC DC1.TEST.LOCAL
    Password for [TESTadministrator]:
    Reconnecting to naming master e31d7da6-8f56-4420-8473-80f2b3a31338._msdcs.TEST.                           LOCAL
    DNS name of new naming master is DC1.TEST.LOCAL
    workgroup is TEST
    realm is TEST.LOCAL
    Adding CN=DC2,OU=Domain Controllers,DC=TEST,DC=LOCAL
    Adding CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC                           =TEST,DC=LOCAL
    Adding CN=NTDS Settings,CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN                           =Configuration,DC=TEST,DC=LOCAL
    Adding SPNs to CN=DC2,OU=Domain Controllers,DC=TEST,DC=LOCAL
    Setting account password for DC2$
    Enabling account
    Calling bare provision
    Looking up IPv4 addresses
    Looking up IPv6 addresses
    No IPv6 address will be assigned
    Setting up share.ldb
    Setting up secrets.ldb
    Setting up the registry
    Setting up the privileges database
    Setting up idmap db
    Setting up SAM db
    Setting up sam.ldb partitions and settings
    Setting up sam.ldb rootDSE
    Pre-loading the Samba 4 and AD schema
    A Kerberos configuration suitable for Samba AD has been generated at /var/lib/sa                           mba/private/krb5.conf
    Provision OK for domain DN DC=TEST,DC=LOCAL
    Starting replication
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] objects[402/1426] linked                           _values[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] objects[804/1426] linked                           _values[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] objects[1206/1426] linke                           d_values[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] objects[1608/1426] linke                           d_values[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] objects[1743/1426] linke                           d_values[0/0]
    Analyze and apply schema objects
    Partition[CN=Configuration,DC=TEST,DC=LOCAL] objects[402/2240] linked_values[0/                           24]
    Partition[CN=Configuration,DC=TEST,DC=LOCAL] objects[804/2240] linked_values[0/                           24]
    Partition[CN=Configuration,DC=TEST,DC=LOCAL] objects[1206/2240] linked_values[0                           /24]
    Partition[CN=Configuration,DC=TEST,DC=LOCAL] objects[1608/2240] linked_values[0                           /24]
    Partition[CN=Configuration,DC=TEST,DC=LOCAL] objects[1772/2240] linked_values[2                           4/24]
    Replicating critical objects from the base DN of the domain
    Partition[DC=TEST,DC=LOCAL] objects[109/110] linked_values[26/29]
    Partition[DC=TEST,DC=LOCAL] objects[394/5008] linked_values[29/29]
    Done with always replicated NC (base, config, schema)
    Replicating DC=DomainDnsZones,DC=TEST,DC=LOCAL
    Partition[DC=DomainDnsZones,DC=TEST,DC=LOCAL] objects[42/42] linked_values[0/0]
    Replicating DC=ForestDnsZones,DC=TEST,DC=LOCAL
    Partition[DC=ForestDnsZones,DC=TEST,DC=LOCAL] objects[20/20] linked_values[0/0]
    Exop on[CN=RID Manager$,CN=System,DC=TEST,DC=LOCAL] objects[3] linked_values[0]
    Committing SAM database
    Adding 1 remote DNS records for DC2.TEST.LOCAL
    Adding DNS A record DC2.TEST.LOCAL for IPv4 IP: 192.168.90.201
    Adding DNS CNAME record 6ff1df40-cbb5-41f0-b7b3-53a27dde8edf._msdcs.TEST.LOCAL                            for DC2.TEST.LOCAL
    All other DNS records (like _ldap SRV records) will be created samba_dnsupdate o                           n first startup
    Replicating new DNS records in DC=DomainDnsZones,DC=TEST,DC=LOCAL
    Partition[DC=DomainDnsZones,DC=TEST,DC=LOCAL] objects[1/42] linked_values[0/0]
    Replicating new DNS records in DC=ForestDnsZones,DC=TEST,DC=LOCAL
    Partition[DC=ForestDnsZones,DC=TEST,DC=LOCAL] objects[1/20] linked_values[0/0]
    Sending DsReplicaUpdateRefs for all the replicated partitions
    Setting isSynchronized and dsServiceName
    Setting up secrets database
    Joined domain TEST (SID S-1-5-21-3959064270-1572045903-2556826204) as a DC

    У оснащенні ADUC має з'явитися запис про новий DC у домені TEST.LOCAL, а диспетчері DNS — новий А запис, відповідний DC2.

  2. Реплікація між контролерамиДля початку перевіримо роботу служби реплікації каталогів (DRS)
    # samba-tool drs showrepl

    Усі спроби реплікації у висновку мають бути успішними. У списку об'єктів KCC, протягом 15 хвилин після введення, з'явиться наш DC1 на Windows

    Default-First-Site-NameDC2
    	DSA Options: 0x00000001
    	DSA object GUID: 0e9f5bce-ff59-401e-bdbd-fc69df3fc6bf
    	DSA invocationId: 017997b5-d718-41d7-a3f3-e57ab5151b5c
    
    	==== INBOUND NEIGHBORS ====
    
    	DC=ForestDnsZones,DC=test,DC=local
    	        Default-First-Site-NameDC1 via RPC
    	                DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Last attempt @ Mon May 27 12:56:31 2019 MSK was successful
    	                0 consecutive failure(s).
    	                Last success @ Mon May 27 12:56:31 2019 MSK
    
    	DC=DomainDnsZones,DC=test,DC=local
    	        Default-First-Site-NameDC1 via RPC
    	                DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Last attempt @ Mon May 27 12:56:32 2019 MSK was successful
    	                0 consecutive failure(s).
    	                Last success @ Mon May 27 12:56:32 2019 MSK
    
    	CN=Schema,CN=Configuration,DC=test,DC=local
    	        Default-First-Site-NameDC1 via RPC
    	                DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Last attempt @ Mon May 27 12:56:32 2019 MSK was successful
    	                0 consecutive failure(s).
    	                Last success @ Mon May 27 12:56:32 2019 MSK
    
    	DC=test,DC=local
    	        Default-First-Site-NameDC1 via RPC
    	                DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Last attempt @ Mon May 27 12:56:32 2019 MSK was successful
    	                0 consecutive failure(s).
    	                Last success @ Mon May 27 12:56:32 2019 MSK
    
    	CN=Configuration,DC=test,DC=local
    	        Default-First-Site-NameDC1 via RPC
    	                DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Last attempt @ Mon May 27 12:56:33 2019 MSK was successful
    	                0 consecutive failure(s).
    	                Last success @ Mon May 27 12:56:33 2019 MSK
    
    	==== OUTBOUND NEIGHBORS ====
    
    	DC=ForestDnsZones,DC=test,DC=local
    	        Default-First-Site-NameDC1 via RPC
    	                DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Last attempt @ Thu May 23 16:40:03 2019 MSK was successful
    	                0 consecutive failure(s).
    	                Last success @ Thu May 23 16:40:03 2019 MSK
    
    	DC=DomainDnsZones,DC=test,DC=local
    	        Default-First-Site-NameDC1 via RPC
    	                DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Last attempt @ Thu May 23 16:40:03 2019 MSK was successful
    	                0 consecutive failure(s).
    	                Last success @ Thu May 23 16:40:03 2019 MSK
    
    	CN=Schema,CN=Configuration,DC=test,DC=local
    	        Default-First-Site-NameDC1 via RPC
    	                DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Last attempt @ Thu May 23 16:40:08 2019 MSK was successful
    	                0 consecutive failure(s).
    	                Last success @ Thu May 23 16:40:08 2019 MSK
    
    	DC=test,DC=local
    	        Default-First-Site-NameDC1 via RPC
    	                DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Last attempt @ Thu May 23 16:40:08 2019 MSK was successful
    	                0 consecutive failure(s).
    	                Last success @ Thu May 23 16:40:08 2019 MSK
    
    	CN=Configuration,DC=test,DC=local
    	        Default-First-Site-NameDC1 via RPC
    	                DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Last attempt @ Mon May 27 12:12:17 2019 MSK was successful
    	                0 consecutive failure(s).
    	                Last success @ Mon May 27 12:12:17 2019 MSK
    
    	==== KCC CONNECTION OBJECTS ====
    
    	Connection --
    	        Connection name: 6d2652b3-e723-4af7-a19f-1ee48915753c
    	        Enabled        : TRUE
    	        Server DNS name : DC1.test.local
    	        Server DN name  : CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=local
    	                TransportType: RPC
    	                options: 0x00000001
    	Warning: No NC replicated for Connection!

    попередження "No NC replicated for Connection!" можна сміливо ігнорувати. Воно з'являється через те, що при реєстрації нового DC самба неправильно встановлює деякі прапори реплікації.

    Також непогано буде перевірити реплікацію LDAP.

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

    Вказана вище команда порівняє значення атрибутів об'єктів всього каталогу на DC1 та DC2.

    Приклад успішної реплікації

    * Comparing [DOMAIN] context...
    
    	* Objects to be compared: 249
    
    	* Result for [DOMAIN]: SUCCESS
    
    	* Comparing [CONFIGURATION] context...
    
    	* Objects to be compared: 1750
    
    	* Result for [CONFIGURATION]: SUCCESS
    
    	* Comparing [SCHEMA] context...
    
    	* Objects to be compared: 1739
    
    	* Result for [SCHEMA]: SUCCESS
    
    	* Comparing [DNSDOMAIN] context...
    
    	* Objects to be compared: 42
    
    	* Result for [DNSDOMAIN]: SUCCESS
    
    	* Comparing [DNSFOREST] context...
    
    	* Objects to be compared: 20
    
    	* Result for [DNSFOREST]: SUCCESS

    У ряді випадків атрибути об'єктів на різних контролерах можуть відрізнятися і висновок команди дасть про це знати. Але далеко не завжди це буде ознакою проблеми з реплікацією.

    Наступним етапом необхідно вручну настроїти стабільну реплікацію каталогу SysVol.
    Справа в тому, що самба поки не підтримує DFS-R, але не підтримувала більш ранню FRS. Тому для реплікації між DC Samba та Windows єдиним на сьогоднішній день робочим рішенням є одностороння реплікація засобами утиліти Robocopy з комплекту Windows Server 2003 Resource Kit Tools.

    Розробники самби, щоб уникнути проблем із сумісністю, рекомендують спочатку встановити комплект утиліт на звичайну робочу станцію, і після цього скопіювати 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Простий варіант. Відмінно відпрацьовує, якщо назви папок Мої документи, Завантаження та Робочий стіл збігаються в обох операційних системах. Мається на увазі, що ПК на 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, для підключення нашого мережного ресурсу, у тому вигляді, в якому він введений у дисплейному менеджері. Тому важливо, щоб ДМ логін вводився без явного вказівки доменного імені.

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

    2. Другий спосіб менш прямолінійний і незграбний, і на мій погляд зручніший і кращий. Відмінність від першого лише у конфігурації pam_mount
      # vim /etc/security/pam_mount.conf.xml
      <volume uid="100000000-2000200000" 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"/>
      <volume uid="100000000-2000200000" fstype="cifs" server="dfs" path="Profile_Users/%(USER)/Downloads" mountpoint="~/Загрузки" options="sec=krb5,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775"/>
      <volume uid="100000000-2000200000" 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"/>

      Тобто просто окремо монтуємо кожну нашу папку у відповідний каталог

Висновки

За півмісяця роботи на тестовому стенді дана зв'язка успішно пережила кілька поперемінних довготривалих та короткочасних відключень обох контролерів, практично без наслідків для клієнтів (один раз клієнт на Windows7 втратив довірчі відносини).

Загалом у мене залишилися досить приємні враження від роботи з цим продуктом, навіть не дивлячись на всі нюанси, з якими довелося зіткнутися як у статті, так і за лаштунками.

Підводні камені є, їх багато, і по ходу роботи з самбою їх доведеться виловлювати у великій кількості. Тим не менш, на сьогоднішній день немає інших рішень, що дозволяють організовувати гібридне середовище, з використанням служби каталогів і без використання Windows.

Джерело: habr.com

Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери 🔥 Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери | ProHoster