Samba DC jako drugi kontroler w domenie AD Windows 2012R2 oraz foldery przenośne dla klientów na Windows i Linux

Samba DC jako drugi kontroler w domenie AD Windows 2012R2 oraz foldery przenośne dla klientów na Windows i Linux
Zrozumienie, że znalazłem się w sytuacji związanej z importozamiennikiem, nie przyszło od razu. Dopiero gdy z wyższej instancji zaczęły regularnie przybywać dostawy komputerów z dystrybucją „Alt Linux” na pokładzie, zaczłem podejrzewać, że coś jest nie tak.

Jednak w trakcie przechodzenia przez etapy akceptacji nieuchronnego, wciągnąłem się i nawet zacząłem czerpać przyjemność z tego procesu. W pewnym momencie pomyślałem, że w takim tempie prędzej czy później będę musiał pożegnać się z rozwiązaniami z zakresu organizacji usług katalogowych od Microsoftu i skierować się w stronę czegoś bardziej egzotycznego. Dlatego, aby przygotować się na nieuchronne i wyłapać możliwie jak najwięcej pułapek, zdecydowałem się uruchomić testowe środowisko, obejmujące:

  • DC1 — Windows Server 2012R2
  • DC2 — Alt Serwer 8.2
  • Serwer plików — Windows Server 2012R2
  • PC1 — Windows 7
  • PC2 — Alt Stacja robocza 8.2

Zadania środowiska:

  1. Uruchomić domenę na bazie w2k12r2. Stworzyć minimalny zestaw polityk grupowych (analogicznie do używanych w infrastrukturze roboczej), w tym politykę przenoszenia folderów roboczych użytkowników (Pobrane/Documents/Pulpit). Ostatecznie chciałbym, aby przy zmianie miejsca pracy przez użytkownika z Windows na Linux i z powrotem miał komfortowy dostęp do swoich dokumentów roboczych.
  2. Wprowadzenie Samba DC jako drugiego kontrolera. Sprawdzenie replikacji usługi katalogów i DNS.
  3. Konfiguracja klientów Linux do pracy z przenoszonymi folderami.

Wdrożenie:

  1. Instalacja i wprowadzenie nowego kontrolera.Z instalacją MS Windows 2012R2 wszystko jest proste i w miarę zrozumiałe. W Internecie jest 1001 poradników na temat uruchamiania domeny w Windows zarówno za pomocą GUI, jak i narzędzi Powershell, więc nie będę powtarzać tego czwarty raz, pozostawię tylko: link do oficjalnej dokumentacji dla ciekawych i tych, którzy chcą odświeżyć pamięć.

    Jednak istnieje jeden ważny moment w tym punkcie. Obecnie Samba nie umie pracować z schematami katalogów wyżej niż 2008R2.

    Nagłówek spoilera Właściwie, deweloperzy ogłosili tę obsługę jako eksperymentalną. Jednak w praktyce próba wprowadzenia Samby jako drugiego DC do istniejącej domeny Windows z wersją schematu 69 napotka na następujący błąd:

    DsAddEntry niepowiodło się z kodem statusu WERR_ACCESS_DENIED info (8567, 'WERR_DS_INCOMPATIBLE_VERSION')

    Problem w tym, że Windows 2012 i 2012R2 wykorzystują narzędzia WMI do pracy z domenami i lasami, których stabilne wsparcie ogłoszono dopiero w wersji Samba 4.11, która ma się ukazać do końca tego roku.
    Z tego wynika, że jedyną opcją wprowadzenia samby do domeny AD, wdrożonej na serwerze 2012R2, jest obniżenie schematu z 69 do 47. Oczywiście na działającej infrastrukturze bez poważnych powodów nie należy tego robić, ale mamy tutaj testowe środowisko, więc czemu nie.

    Instalujemy Alt Server 8.2. Podczas instalacji wybieramy profil „Serwer Samba-DC (kontroler AD)”. Na wdrożonym serwerze wykonujemy pełną aktualizację systemu i instalujemy pakiet task-samba-dc, który pociągnie za sobą wszystko, co potrzebne.

    # apt-get install task-samba-dc

    Jeśli nagle task-samba-dc, wbrew zapewnieniom dokumentacji Alty, odmówi zainstalowania wszystkiego, co potrzebne.

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

    Następnie przechodzimy do konfiguracji Kerberos i uzyskania biletu. Otwieramy plik krb5.conf, przechodzimy do sekcji [libdefaults] i doprowadzamy do następującego wyglądu:

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

    Żądamy biletu.

    # kinit administrator
    Password for administrator@TEST.LOCAL:

    Sprawdzamy listę uzyskanych biletów 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

    Teraz usuwamy lub zmieniamy nazwę istniejącego pliku konfiguracyjnego samby.

    # mv smb.conf smb.conf.bak1

    I w końcu wprowadzamy do domeny AD jako drugi kontroler:

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

    Sukces wprowadzania będzie towarzyszył następującemu logowi.

    Znalezienie zapisywalnego DC dla domeny 'test.local'
    Znaleziono DC DC1.TEST.LOCAL
    Hasło dla [TESTadministrator]:
    Ponowne łączenie z głównym serwerem nazw e31d7da6-8f56-4420-8473-80f2b3a31338._msdcs.TEST.LOCAL
    Nazwa DNS nowego głównego serwera nazw to DC1.TEST.LOCAL
    Grupa robocza to TEST
    Obszar to TEST.LOCAL
    Dodawanie CN=DC2,OU=Kontrolery-Domen,DC=TEST,DC=LOCAL
    Dodawanie CN=DC2,CN=Serwery,CN=Default-First-Site-Name,CN=Strony,CN=Konfiguracja,DC=TEST,DC=LOCAL
    Dodawanie CN=Ustawienia NTDS,CN=DC2,CN=Serwery,CN=Default-First-Site-Name,CN=Strony,CN=Konfiguracja,DC=TEST,DC=LOCAL
    Dodawanie SPN do CN=DC2,OU=Kontrolery-Domen,DC=TEST,DC=LOCAL
    Ustawianie hasła konta dla DC2$
    Włączanie konta
    Nazwa wywołania provisioning
    Szukanie adresów IPv4
    Szukanie adresów IPv6
    Nie przypisano adresu IPv6
    Konfiguracja share.ldb
    Konfiguracja secrets.ldb
    Konfiguracja rejestru
    Konfiguracja bazy danych uprawnień
    Konfiguracja idmap db
    Konfiguracja SAM db
    Ustawianie partycji i ustawień sam.ldb
    Konfiguracja sam.ldb rootDSE
    Wstępne ładowanie schematu Samba 4 i AD
    Konfiguracja Kerberos odpowiednia dla Samba AD została wygenerowana w /var/lib/samba/private/krb5.conf
    Provisioning OK dla DN domeny DC=TEST,DC=LOCAL
    Rozpoczęcie replikacji
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] obiekty[402/1426] linkowane_wartości[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] obiekty[804/1426] linkowane_wartości[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] obiekty[1206/1426] linkowane_wartości[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] obiekty[1608/1426] linkowane_wartości[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] obiekty[1743/1426] linkowane_wartości[0/0]
    Analiza i stosowanie obiektów schematu
    Partycja[CN=Configuration,DC=TEST,DC=LOCAL] obiekty[402/2240] linkowane_wartości[0/24]
    Partycja[CN=Configuration,DC=TEST,DC=LOCAL] obiekty[804/2240] linkowane_wartości[0/24]
    Partycja[CN=Configuration,DC=TEST,DC=LOCAL] obiekty[1206/2240] linkowane_wartości[0/24]
    Partycja[CN=Configuration,DC=TEST,DC=LOCAL] obiekty[1608/2240] linkowane_wartości[0/24]
    Partycja[CN=Configuration,DC=TEST,DC=LOCAL] obiekty[1772/2240] linkowane_wartości[24/24]
    Replikacja krytycznych obiektów z bazy DN domeny
    Partycja[DC=TEST,DC=LOCAL] obiekty[109/110] linkowane_wartości[26/29]
    Partycja[DC=TEST,DC=LOCAL] obiekty[394/5008] linkowane_wartości[29/29]
    Zakończono z zawsze replikowaną NC (baza, konfiguracja, schemat)
    Replikacja DC=DomainDnsZones,DC=TEST,DC=LOCAL
    Partycja[DC=DomainDnsZones,DC=TEST,DC=LOCAL] obiekty[42/42] linkowane_wartości[0/0]
    Replikacja DC=ForestDnsZones,DC=TEST,DC=LOCAL
    Partycja[DC=ForestDnsZones,DC=TEST,DC=LOCAL] obiekty[20/20] linkowane_wartości[0/0]
    Exop na[CN=RID Manager$,CN=System,DC=TEST,DC=LOCAL] obiekty[3] linkowane_wartości[0]
    Zatwierdzanie bazy danych SAM
    Dodawanie 1 zdalnego rekordu DNS dla DC2.TEST.LOCAL
    Dodawanie rekordu DNS A DC2.TEST.LOCAL dla adresu IPv4 IP: 192.168.90.201
    Dodawanie rekordu DNS CNAME 6ff1df40-cbb5-41f0-b7b3-53a27dde8edf._msdcs.TEST.LOCAL dla DC2.TEST.LOCAL
    Wszystkie inne rekordy DNS (takie jak _ldap SRV) zostaną utworzone przy pierwszym uruchomieniu samba_dnsupdate
    Replikacja nowych rekordów DNS w DC=DomainDnsZones,DC=TEST,DC=LOCAL
    Partycja[DC=DomainDnsZones,DC=TEST,DC=LOCAL] obiekty[1/42] linkowane_wartości[0/0]
    Replikacja nowych rekordów DNS w DC=ForestDnsZones,DC=TEST,DC=LOCAL
    Partycja[DC=ForestDnsZones,DC=TEST,DC=LOCAL] obiekty[1/20] linkowane_wartości[0/0]
    Wysyłanie DsReplicaUpdateRefs dla wszystkich replikowanych partycji
    Ustawianie isSynchronized i dsServiceName
    Konfiguracja bazy danych sekretów
    Dołączono do domeny TEST (SID S-1-5-21-3959064270-1572045903-2556826204) jako DC

    W narzędziu ADUC powienien pojawić się wpis o nowym DC w domenie TEST.LOCAL, a w menedżerze DNS – nowy wpis A odpowiadający DC2.

  2. Replikacja między kontroleramiNa początek sprawdźmy działanie usługi replikacji katalogów (DRS)
    # samba-tool drs showrepl

    Wszystkie próby replikacji w logu powinny być udane. W liście obiektów KCC, w ciągu 15 minut po wprowadzeniu, powinien pojawić się nasz DC1 na Windows.

    Domyślny-Pierwszy-Nazwa-StronyDC2
    	Opcje DSA: 0x00000001
    	GUID obiektu DSA: 0e9f5bce-ff59-401e-bdbd-fc69df3fc6bf
    	Identyfikator wywołania DSA: 017997b5-d718-41d7-a3f3-e57ab5151b5c
    
    	==== SĄSIEDZI PRZYCHODZĄCY ====
    
    	DC=ForestDnsZones,DC=test,DC=local
    	        Domyślny-Pierwszy-Nazwa-StronyDC1 przez RPC
    	                GUID obiektu DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Ostatnia próba @ Pon Maj 27 12:56:31 2019 MSK była udana
    	                0 kolejnych błędów.
    	                Ostatni sukces @ Pon Maj 27 12:56:31 2019 MSK
    
    	DC=DomainDnsZones,DC=test,DC=local
    	        Domyślny-Pierwszy-Nazwa-StronyDC1 przez RPC
    	                GUID obiektu DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Ostatnia próba @ Pon Maj 27 12:56:32 2019 MSK była udana
    	                0 kolejnych błędów.
    	                Ostatni sukces @ Pon Maj 27 12:56:32 2019 MSK
    
    	CN=Schema,CN=Configuration,DC=test,DC=local
    	        Domyślny-Pierwszy-Nazwa-StronyDC1 przez RPC
    	                GUID obiektu DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Ostatnia próba @ Pon Maj 27 12:56:32 2019 MSK była udana
    	                0 kolejnych błędów.
    	                Ostatni sukces @ Pon Maj 27 12:56:32 2019 MSK
    
    	DC=test,DC=local
    	        Domyślny-Pierwszy-Nazwa-StronyDC1 przez RPC
    	                GUID obiektu DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Ostatnia próba @ Pon Maj 27 12:56:32 2019 MSK była udana
    	                0 kolejnych błędów.
    	                Ostatni sukces @ Pon Maj 27 12:56:32 2019 MSK
    
    	CN=Configuration,DC=test,DC=local
    	        Domyślny-Pierwszy-Nazwa-StronyDC1 przez RPC
    	                GUID obiektu DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Ostatnia próba @ Pon Maj 27 12:56:33 2019 MSK była udana
    	                0 kolejnych błędów.
    	                Ostatni sukces @ Pon Maj 27 12:56:33 2019 MSK
    
    	==== SĄSIEDZI WYCHODZĄCE ====
    
    	DC=ForestDnsZones,DC=test,DC=local
    	        Domyślny-Pierwszy-Nazwa-StronyDC1 przez RPC
    	                GUID obiektu DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Ostatnia próba @ Czw Maj 23 16:40:03 2019 MSK była udana
    	                0 kolejnych błędów.
    	                Ostatni sukces @ Czw Maj 23 16:40:03 2019 MSK
    
    	DC=DomainDnsZones,DC=test,DC=local
    	        Domyślny-Pierwszy-Nazwa-StronyDC1 przez RPC
    	                GUID obiektu DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Ostatnia próba @ Czw Maj 23 16:40:03 2019 MSK była udana
    	                0 kolejnych błędów.
    	                Ostatni sukces @ Czw Maj 23 16:40:03 2019 MSK
    
    	CN=Schema,CN=Configuration,DC=test,DC=local
    	        Domyślny-Pierwszy-Nazwa-StronyDC1 przez RPC
    	                GUID obiektu DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Ostatnia próba @ Czw Maj 23 16:40:08 2019 MSK była udana
    	                0 kolejnych błędów.
    	                Ostatni sukces @ Czw Maj 23 16:40:08 2019 MSK
    
    	DC=test,DC=local
    	        Domyślny-Pierwszy-Nazwa-StronyDC1 przez RPC
    	                GUID obiektu DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Ostatnia próba @ Czw Maj 23 16:40:08 2019 MSK była udana
    	                0 kolejnych błędów.
    	                Ostatni sukces @ Czw Maj 23 16:40:08 2019 MSK
    
    	CN=Configuration,DC=test,DC=local
    	        Domyślny-Pierwszy-Nazwa-StronyDC1 przez RPC
    	                GUID obiektu DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Ostatnia próba @ Pon Maj 27 12:12:17 2019 MSK była udana
    	                0 kolejnych błędów.
    	                Ostatni sukces @ Pon Maj 27 12:12:17 2019 MSK
    
    	==== OBIEKTY POŁĄCZENIA KCC ====
    
    	Połączenie --
    	        Nazwa połączenia: 6d2652b3-e723-4af7-a19f-1ee48915753c
    	        Włączone        : TAK
    	        Nazwa DNS serwera : DC1.test.local
    	        Nazwa DN serwera  : CN=NTDS Settings,CN=DC1,CN=Servers,CN=Domyślny-Pierwszy-Nazwa-Strony,CN=Sites,CN=Configuration,DC=test,DC=local
    	                Typ transportu: RPC
    	                opcje: 0x00000001
    	Ostrzeżenie: Brak NC replikowanego dla połączenia!

    Ostrzeżenie „No NC replicated for Connection!” można śmiało ignorować. Pojawia się, ponieważ podczas rejestracji nowego DC Samba nieprawidłowo ustawia niektóre flagi replikacji.

    Również warto sprawdzić replikację LDAP.

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

    Powyższe polecenie porówna wartości atrybutów obiektów całego katalogu na DC1 i DC2.

    Przykład udanej replikacji

    * Porównywanie kontekstu [DOMAIN]...
    
    	* Obiekty do porównania: 249
    
    	* Wynik dla [DOMAIN]: SUKCES
    
    	* Porównywanie kontekstu [CONFIGURATION]...
    
    	* Obiekty do porównania: 1750
    
    	* Wynik dla [CONFIGURATION]: SUKCES
    
    	* Porównywanie kontekstu [SCHEMA]...
    
    	* Obiekty do porównania: 1739
    
    	* Wynik dla [SCHEMA]: SUKCES
    
    	* Porównywanie kontekstu [DNSDOMAIN]...
    
    	* Obiekty do porównania: 42
    
    	* Wynik dla [DNSDOMAIN]: SUKCES
    
    	* Porównywanie kontekstu [DNSFOREST]...
    
    	* Obiekty do porównania: 20
    
    	* Wynik dla [DNSFOREST]: SUKCES

    W niektórych przypadkach atrybuty obiektów na różnych kontrolerach mogą się różnić, a wynik polecenia to ujawni. Jednak nie w każdym przypadku będzie to oznaka problemu z replikacją.

    Kolejnym krokiem jest ręczna konfiguracja stabilnej replikacji katalogu SysVol.
    Faktem jest, że Samba na razie nie obsługuje DFS-R, tak jak nie obsługiwała wcześniejszego FRS. Dlatego jedynym dotychczasowym rozwiązaniem replikacji między DC Samba a Windows jest jednostronna replikacja przy użyciu narzędzia Robocopy z zestawu Windows Server 2003 Resource Kit Tools.

    Twórcy Samby, aby uniknąć problemów z zgodnością, zalecają najpierw zainstalowanie zestawu narzędzi na zwykłej stacji roboczej, a następnie skopiowanie Robocopy na kontroler do folderu „C:Program Files (x86)Windows Resource KitsTools”

    Po zainstalowaniu w harmonogramie zadań na kontrolerze z Windows tworzymy zadanie do wykonania replikacji z następującymi parametrami:

    — Wykonywane dla wszystkich użytkowników
    — Wyzwalacz do wykonania codziennie co 5 minut w ciągu dnia
    — W działaniach wpisujemy ścieżkę do narzędzia robocopy, podając następujące argumenty:

    DC1SYSVOLtest.local DC2SYSVOLtest.local \/mir \/sec

    W danym przypadku kopiujemy zawartość katalogu SysVol z DC1 na DC2.

  3. Przenośne foldery użytkowników przy użyciu konfiguracji pam_mountPrzeprowadziłem eksperymenty i znalazłem dwa praktyczne sposoby rozwiązania tego zadania przy jego użyciu.
    1. Pełne zamontowanie folderu z profilem z sieci w sekcji /home. Prosta opcja. Doskonale działa, jeśli nazwy folderów Moje dokumenty, Pobrane i Pulpit są takie same w obu systemach operacyjnych. Zakłada się, że komputer z Linuksem już jest wprowadzone do domeny, a użytkownicy logują się przy użyciu swoich kont domenowych, korzystając z sssd jako mechanizmu uwierzytelniania i autoryzacji.
      # 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"/>
      

      gdzie:

      • uid=«100000000-2000000000» — zakres UID przypisany użytkownikom domenowym przez SSSD
      • server=«dfs» — nazwa serwera plików
      • path=«Profile_Users/%(USER)» — zasób na serwerze plików z umiejscowionym profilem użytkownika
      • mountpoint=»~» — punkt montowania w domowym folderze użytkownika

      Login użytkownika jest przekazywany do zmiennej makro „%(USER)”, używanej przez pam_mount, do podłączenia naszego zasobu sieciowego w formie, w jakiej jest wprowadzony w menedżerze wyświetlania. Dlatego ważne jest, aby w DM login był wprowadzany bez wyraźnego wskazywania nazwy domeny.

      W sssd.conf to rozwiązanie polega na skomentowaniu lub ustawieniu wartości Fałsz w opcji use_fully_qualified_names, która włącza tryb pełnych nazw (w tym domenę) dla użytkowników i grup.

    2. Drugi sposób jest mniej bezpośredni i sztywny, według mnie bardziej wygodny i preferowany. Różnica w stosunku do pierwszego polega tylko na konfiguracji pam_mount.
      # vim /etc/security/pam_mount.conf.xml

      To znaczy, po prostu osobno montujemy każdą z naszych folderów w odpowiadającym jej katalogu.

Wnioski

Przez pół miesiąca pracy w testowym środowisku ten zestaw przetrwał kilka przejściowych długoterminowych i krótkoterminowych wyłączeń obu kontrolerów, praktycznie bez konsekwencji dla klientów (raz klient na Windows7 stracił zaufanie).

Ogólnie rzecz biorąc, mam dość pozytywne wrażenia z pracy z tym produktem, pomimo wszystkich niuansów, z którymi musiałem się zmierzyć zarówno w artykule, jak i „za kulisami”.

Są pułapki, jest ich wiele, i podczas pracy z Sambą trzeba będzie je łapać w dużych ilościach. Niemniej jednak, jak na dziś, nie ma innych rozwiązań, które pozwalałyby organizować hybrydowe środowisko z wykorzystaniem usługi katalogowej i bez użycia systemu Windows.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster