
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:
- 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.
- Wprowadzenie Samba DC jako drugiego kontrolera. Sprawdzenie replikacji usługi katalogów i DNS.
- Konfiguracja klientów Linux do pracy z przenoszonymi folderami.
Wdrożenie:
- 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: 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-dcJeś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-develNastę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.confdns_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:35Teraz usuwamy lub zmieniamy nazwę istniejącego pliku konfiguracyjnego samby.
# mv smb.conf smb.conf.bak1I 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 DCW 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.
- Replikacja między kontroleramiNa początek sprawdźmy działanie usługi replikacji katalogów (DRS)
# samba-tool drs showreplWszystkie 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 -UadministratorPowyż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]: SUKCESW 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 .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 \/secW danym przypadku kopiujemy zawartość katalogu SysVol z DC1 na DC2.
- 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.
- 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.
- 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.xmlTo znaczy, po prostu osobno montujemy każdą z naszych folderów w odpowiadającym jej katalogu.
- 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.
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
