Samba DC als zweiter Controller in der Windows 2012R2 AD-Domäne und die verschiebbaren Ordner für Clients unter Windows und Linux

Samba DC als zweiter Controller in der Windows 2012R2 AD-Domäne und die verschiebbaren Ordner für Clients unter Windows und Linux
Die Erkenntnis, dass ich in die Importsubstitution geraten bin, kam nicht sofort. Erst als die frischen Lieferungen von PCs aus der übergeordneten Organisation konstant mit der Distribution «Alt Linux» an Bord eintrafen, verdichteten sich meine Verdachtsmomente.

Im Verlauf des unvermeidlichen Akzeptanzprozesses wurde ich jedoch aktiv und begann sogar ein wenig Freude an dem Prozess zu finden. Irgendwann dachte ich, dass ich mich früher oder später von den Lösungen zur Organisation des Verzeichnisdienstes von Microsoft trennen und mich in Richtung etwas Exotischerem bewegen müsste. Daher beschloss ich, um mich auf das Unvermeidliche vorzubereiten und mögliche Stolperfallen zu identifizieren, eine Testumgebung einzurichten, die Folgendes umfasst:

  • DC1 — Windows Server 2012R2
  • DC2 — Alt Server 8.2
  • Dateiserver — Windows Server 2012R2
  • PC1 — Windows 7
  • PC2 — Alt Arbeitsstation 8.2

Aufgaben des Standes:

  1. Domäne auf Basis von w2k12r2 bereitstellen. Ein minimales Set an Gruppenrichtlinien erstellen (ähnlich wie in der Produktionsinfrastruktur verwendet), einschließlich der Richtlinie zum Verschieben von Benutzerordnern (Downloads/Dokumente/Desktop). Am Ende soll der Benutzer, wenn er zwischen Windows und Linux wechselt, komfortablen Zugang zu seinen Arbeitsdokumenten haben.
  2. Samba DC als zweiten Controller hinzufügen. Überprüfung der Replikation von Verzeichnisdiensten und DNS.
  3. Einrichtung von Linux-Clients zur Nutzung von verschiebbaren Ordnern.

Implementierung:

  1. Installation und Inbetriebnahme des neuen Controllers.Die Installation von MS Windows 2012R2 ist einfach und relativ klar. Im Internet gibt es 1001 Anleitungen zur Bereitstellung einer Domäne auf Windows, sowohl mit GUI als auch mit Powershell, deshalb werde ich dies nicht nochmal wiederholen, sondern nur den Link auf die offizielle Dokumentation verweisen, für Neugierige und diejenigen, die ihr Gedächtnis auffrischen möchten.

    Es gibt jedoch einen wichtigen Punkt in diesem Abschnitt. Bis heute kann Samba nicht mit Schema-Versionen über 2008R2 arbeiten.

    Spoilerüberschrift Die Entwickler haben diesen Support zwar als experimentell ausgewiesen, doch in der Praxis wird der Versuch, Samba als zweiten DC in eine bestehende Windows-Domäne mit Schema 69 einzuführen, mit folgender Fehlermeldung konfrontiert:

    DsAddEntry fehlgeschlagen mit Status WERR_ACCESS_DENIED Info (8567, 'WERR_DS_INCOMPATIBLE_VERSION')

    Das Problem liegt darin, dass Windows 2012 und 2012R2 WMI-Tools zur Verwaltung von Domänen und Forests verwenden, deren stabile Unterstützung erst mit Samba 4.11 angekündigt wurde, die bis Ende dieses Jahres erscheinen soll.
    Das bedeutet, dass die einzige Möglichkeit, Samba in eine AD-Domäne, die auf einem 2012R2-Server bereitgestellt ist, einzuführen, darin besteht, das Schema von 69 auf 47 abzusenken. Es ist offensichtlich, dass dies in einer Produktionsumgebung ohne triftigen Grund nicht geschehen sollte, aber in unserem Teststand gibt es keinen Grund, es nicht zu tun.

    Wir installieren Alt Server 8.2. Bei der Installation wählen wir das Profil 'Samba-DC-Server (AD-Controller)'. Auf dem bereitgestellten Server führen wir ein vollständiges System-Upgrade durch und installieren das Paket task-samba-dc, das alles Notwendige nachzieht.

    # apt-get install task-samba-dc

    Falls das task-samba-dc-Paket entgegen den Versprechungen der Alt-Dokumentation nicht alles erforderliche installieren sollte.

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

    Kommen wir nun zur Konfiguration von Kerberos und dem Erhalt eines Tickets. Öffnen Sie die Datei krb5.conf, gehen Sie zum Abschnitt [libdefaults] und passen Sie ihn wie folgt an:

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

    Fordern Sie ein Ticket an.

    # kinit administrator
    Password for administrator@TEST.LOCAL:

    Überprüfen Sie die Liste der erhaltenen Kerberos-Tickets.

    # 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

    Jetzt entfernen oder benennen wir die bestehende Samba-Konfiguration um.

    # mv smb.conf smb.conf.bak1

    Und schließlich fügen wir den AD-Domänencontroller als zweiten Controller hinzu:

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

    Ein erfolgreicher Eintrag wird durch folgendes Protokoll begleitet.

    Suche nach einem beschreibbaren DC für die Domäne 'test.local'
    Gefundener DC DC1.TEST.LOCAL
    Passwort für [TESTadministrator]:
    Wiederverbinden mit dem Namensmaster e31d7da6-8f56-4420-8473-80f2b3a31338._msdcs.TEST.LOCAL
    DNS-Name des neuen Namensmasters ist DC1.TEST.LOCAL
    Die Arbeitsgruppe ist TEST
    Das Reich ist TEST.LOCAL
    Füge CN=DC2,OU=Domain Controllers,DC=TEST,DC=LOCAL hinzu
    Füge CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=TEST,DC=LOCAL hinzu
    Füge CN=NTDS Settings,CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=TEST,DC=LOCAL hinzu
    Füge SPNs zu CN=DC2,OU=Domain Controllers,DC=TEST,DC=LOCAL hinzu
    Setze Kontopasswort für DC2$
    Aktiviere Konto
    Starte die Bereitstellung
    Suche nach IPv4-Adressen
    Suche nach IPv6-Adressen
    Es wird keine IPv6-Adresse zugewiesen
    Einrichten von share.ldb
    Einrichten von secrets.ldb
    Einrichten der Registrierung
    Einrichten der Berechtigungsdatenbank
    Einrichten der idmap-Datenbank
    Einrichten der SAM-Datenbank
    Einrichten von sam.ldb-Partitionen und -Einstellungen
    Einrichten des sam.ldb rootDSE
    Lade das Samba 4- und AD-Schema vor
    Eine für Samba AD geeignete Kerberos-Konfiguration wurde generiert unter /var/lib/samba/private/krb5.conf
    Bereitstellung OK für Domän DN DC=TEST,DC=LOCAL
    Starte Replikation
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] Objekte[402/1426] verknüpfte_Werte[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] Objekte[804/1426] verknüpfte_Werte[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] Objekte[1206/1426] verknüpfte_Werte[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] Objekte[1608/1426] verknüpfte_Werte[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] Objekte[1743/1426] verknüpfte_Werte[0/0]
    Analysiere und wende Schemaobjekte an
    Partition[CN=Configuration,DC=TEST,DC=LOCAL] Objekte[402/2240] verknüpfte_Werte[0/24]
    Partition[CN=Configuration,DC=TEST,DC=LOCAL] Objekte[804/2240] verknüpfte_Werte[0/24]
    Partition[CN=Configuration,DC=TEST,DC=LOCAL] Objekte[1206/2240] verknüpfte_Werte[0/24]
    Partition[CN=Configuration,DC=TEST,DC=LOCAL] Objekte[1608/2240] verknüpfte_Werte[0/24]
    Partition[CN=Configuration,DC=TEST,DC=LOCAL] Objekte[1772/2240] verknüpfte_Werte[24/24]
    Repliziere kritische Objekte aus dem Basis-DN der Domäne
    Partition[DC=TEST,DC=LOCAL] Objekte[109/110] verknüpfte_Werte[26/29]
    Partition[DC=TEST,DC=LOCAL] Objekte[394/5008] verknüpfte_Werte[29/29]
    Fertig mit immer replizierten NC (Basis, Konfiguration, Schema)
    Repliziere DC=DomainDnsZones,DC=TEST,DC=LOCAL
    Partition[DC=DomainDnsZones,DC=TEST,DC=LOCAL] Objekte[42/42] verknüpfte_Werte[0/0]
    Repliziere DC=ForestDnsZones,DC=TEST,DC=LOCAL
    Partition[DC=ForestDnsZones,DC=TEST,DC=LOCAL] Objekte[20/20] verknüpfte_Werte[0/0]
    Exop on[CN=RID Manager$,CN=System,DC=TEST,DC=LOCAL] Objekte[3] verknüpfte_Werte[0]
    Übertrage SAM-Datenbank
    Füge 1 entfernte DNS-Einträge für DC2.TEST.LOCAL hinzu
    Füge DNS A-Eintrag DC2.TEST.LOCAL für IPv4-IP: 192.168.90.201 hinzu
    Füge DNS CNAME-Eintrag 6ff1df40-cbb5-41f0-b7b3-53a27dde8edf._msdcs.TEST.LOCAL für DC2.TEST.LOCAL hinzu
    Alle anderen DNS-Einträge (wie _ldap SRV-Einträge) werden beim ersten Start von samba_dnsupdate erstellt
    Repliziere neue DNS-Einträge in DC=DomainDnsZones,DC=TEST,DC=LOCAL
    Partition[DC=DomainDnsZones,DC=TEST,DC=LOCAL] Objekte[1/42] verknüpfte_Werte[0/0]
    Repliziere neue DNS-Einträge in DC=ForestDnsZones,DC=TEST,DC=LOCAL
    Partition[DC=ForestDnsZones,DC=TEST,DC=LOCAL] Objekte[1/20] verknüpfte_Werte[0/0]
    Sende DsReplicaUpdateRefs für alle replizierten Partitionen
    Setze isSynchronized und dsServiceName
    Einrichten der Geheimnis-Datenbank
    Domäne TEST beigetreten (SID S-1-5-21-3959064270-1572045903-2556826204) als DC

    In der ADUC-Konsole sollte ein Eintrag für den neuen DC in der Domäne TEST.LOCAL erscheinen, und im DNS-Manager sollte ein neuer A-Eintrag, der zu DC2 gehört, sichtbar sein.

  2. Replikation zwischen den KontrolldomänenLassen Sie uns zunächst den Betrieb des Verzeichnisreplikationsdienstes (DRS) überprüfen.
    # samba-tool drs showrepl

    Alle Replikationsversuche sollten im Ausgabeprotokoll erfolgreich sein. In der KCC-Objektliste sollte unser DC1 unter Windows innerhalb von 15 Minuten nach der Eingabe erscheinen.

    Standard-Erster-Standort-NameDC2
    	DSA-Optionen: 0x00000001
    	DSA-Objekt-GUID: 0e9f5bce-ff59-401e-bdbd-fc69df3fc6bf
    	DSA-Initiierungs-ID: 017997b5-d718-41d7-a3f3-e57ab5151b5c
    
    	==== EINGEHENDE NACHBARN ====
    
    	DC=ForestDnsZones,DC=test,DC=local
    	        Standard-Erster-Standort-NameDC1 über RPC
    	                DSA-Objekt-GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Letzter Versuch am Mo, 27. Mai 2019, 12:56:31 MSK war erfolgreich
    	                0 aufeinanderfolgende Fehler.
    	                Letzter Erfolg am Mo, 27. Mai 2019, 12:56:31 MSK
    
    	DC=DomainDnsZones,DC=test,DC=local
    	        Standard-Erster-Standort-NameDC1 über RPC
    	                DSA-Objekt-GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Letzter Versuch am Mo, 27. Mai 2019, 12:56:32 MSK war erfolgreich
    	                0 aufeinanderfolgende Fehler.
    	                Letzter Erfolg am Mo, 27. Mai 2019, 12:56:32 MSK
    
    	CN=Schema,CN=Configuration,DC=test,DC=local
    	        Standard-Erster-Standort-NameDC1 über RPC
    	                DSA-Objekt-GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Letzter Versuch am Mo, 27. Mai 2019, 12:56:32 MSK war erfolgreich
    	                0 aufeinanderfolgende Fehler.
    	                Letzter Erfolg am Mo, 27. Mai 2019, 12:56:32 MSK
    
    	DC=test,DC=local
    	        Standard-Erster-Standort-NameDC1 über RPC
    	                DSA-Objekt-GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Letzter Versuch am Mo, 27. Mai 2019, 12:56:32 MSK war erfolgreich
    	                0 aufeinanderfolgende Fehler.
    	                Letzter Erfolg am Mo, 27. Mai 2019, 12:56:32 MSK
    
    	CN=Configuration,DC=test,DC=local
    	        Standard-Erster-Standort-NameDC1 über RPC
    	                DSA-Objekt-GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Letzter Versuch am Mo, 27. Mai 2019, 12:56:33 MSK war erfolgreich
    	                0 aufeinanderfolgende Fehler.
    	                Letzter Erfolg am Mo, 27. Mai 2019, 12:56:33 MSK
    
    	==== AUSGEHENDE NACHBARN ====
    
    	DC=ForestDnsZones,DC=test,DC=local
    	        Standard-Erster-Standort-NameDC1 über RPC
    	                DSA-Objekt-GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Letzter Versuch am Do, 23. Mai 2019, 16:40:03 MSK war erfolgreich
    	                0 aufeinanderfolgende Fehler.
    	                Letzter Erfolg am Do, 23. Mai 2019, 16:40:03 MSK
    
    	DC=DomainDnsZones,DC=test,DC=local
    	        Standard-Erster-Standort-NameDC1 über RPC
    	                DSA-Objekt-GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Letzter Versuch am Do, 23. Mai 2019, 16:40:03 MSK war erfolgreich
    	                0 aufeinanderfolgende Fehler.
    	                Letzter Erfolg am Do, 23. Mai 2019, 16:40:03 MSK
    
    	CN=Schema,CN=Configuration,DC=test,DC=local
    	        Standard-Erster-Standort-NameDC1 über RPC
    	                DSA-Objekt-GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Letzter Versuch am Do, 23. Mai 2019, 16:40:08 MSK war erfolgreich
    	                0 aufeinanderfolgende Fehler.
    	                Letzter Erfolg am Do, 23. Mai 2019, 16:40:08 MSK
    
    	DC=test,DC=local
    	        Standard-Erster-Standort-NameDC1 über RPC
    	                DSA-Objekt-GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Letzter Versuch am Do, 23. Mai 2019, 16:40:08 MSK war erfolgreich
    	                0 aufeinanderfolgende Fehler.
    	                Letzter Erfolg am Do, 23. Mai 2019, 16:40:08 MSK
    
    	CN=Configuration,DC=test,DC=local
    	        Standard-Erster-Standort-NameDC1 über RPC
    	                DSA-Objekt-GUID: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Letzter Versuch am Mo, 27. Mai 2019, 12:12:17 MSK war erfolgreich
    	                0 aufeinanderfolgende Fehler.
    	                Letzter Erfolg am Mo, 27. Mai 2019, 12:12:17 MSK
    
    	==== KCC-VERBINDUNGSOBJEKTE ====
    
    	Verbindung --
    	        Verbindungsname: 6d2652b3-e723-4af7-a19f-1ee48915753c
    	        Aktiviert      : WAHR
    	        Server-DNS-Name : DC1.test.local
    	        Server-DN-Name  : CN=NTDS-Einstellungen,CN=DC1,CN=Server,CN=Standard-Erster-Standort,CN=Standorte,CN=Configuration,DC=test,DC=local
    	                Transporttyp: RPC
    	                Optionen: 0x00000001
    	Warnung: Kein NC für die Verbindung repliziert!

    Warnung Keine NC-Replikation für die Verbindung! Kann bedenkenlos ignoriert werden. Es erscheint, weil bei der Registrierung eines neuen DC Samba einige Replikationsflags falsch setzt.

    Es wäre auch gut, die LDAP-Replikation zu überprüfen.

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

    Der oben angegebene Befehl vergleicht die Attributwerte von Objekten im gesamten Katalog auf DC1 und DC2.

    Beispiel für erfolgreiche Replikation

    * Vergleiche den Kontext [DOMAIN]...
    
    	* Zu vergleichende Objekte: 249
    
    	* Ergebnis für [DOMAIN]: ERFOLG
    
    	* Vergleiche den Kontext [CONFIGURATION]...
    
    	* Zu vergleichende Objekte: 1750
    
    	* Ergebnis für [CONFIGURATION]: ERFOLG
    
    	* Vergleiche den Kontext [SCHEMA]...
    
    	* Zu vergleichende Objekte: 1739
    
    	* Ergebnis für [SCHEMA]: ERFOLG
    
    	* Vergleiche den Kontext [DNSDOMAIN]...
    
    	* Zu vergleichende Objekte: 42
    
    	* Ergebnis für [DNSDOMAIN]: ERFOLG
    
    	* Vergleiche den Kontext [DNSFOREST]...
    
    	* Zu vergleichende Objekte: 20
    
    	* Ergebnis für [DNSFOREST]: ERFOLG

    In einigen Fällen können die Attribute von Objekten auf verschiedenen Controller unterschiedlich sein, und die Ausgabe des Befehls wird Sie darüber informieren. Aber nicht in allen Fällen ist dies ein Hinweis auf ein Problem mit der Replikation.

    Im nächsten Schritt ist es notwendig, die stabile Replikation des SysVol-Verzeichnisses manuell einzurichten.
    Das Problem ist, dass Samba derzeit DFS-R nicht unterstützt, ebenso wie es früher FRS nicht unterstützte. Daher ist die einzige funktionierende Lösung für die Replikation zwischen Samba-DC und Windows momentan die einseitige Replikation mit Hilfe des Tools. Robocopy aus dem Paket Windows Server 2003 Resource Kit Tools.

    Die Entwickler von Samba empfehlen aus Kompatibilitätsgründen, zunächst das Toolkit auf einem normalen Arbeitsplatz zu installieren und anschließend Robocopy auf den Controller in den Ordner „C:Program Files (x86)Windows Resource KitsTools“ zu kopieren.

    Nach der Installation erstellen wir im Aufgabenplaner auf dem Windows-Controller einen Task zur Ausführung der Replikation mit den folgenden Parametern:

    — Für alle Benutzer ausführen
    — Trigger für die Ausführung täglich alle 5 Minuten während des Tages
    — In den Aktionen geben wir den Pfad zum Robocopy-Tool an und als Argumente an:

    DC1SYSVOLtest.local DC2SYSVOLtest.local /mir /sec

    In diesem speziellen Fall kopieren wir den Inhalt des SysVol-Verzeichnisses von DC1 nach DC2.

  3. Übertragbare Benutzerordner mithilfe der Konfiguration pam_mountDurch experimentelle Ansätze habe ich zwei brauchbare Lösungen für diese Aufgabe gefunden.
    1. Vollständiges Einbinden eines Profilordners aus dem Netzwerk in den Bereich /home. Eine einfache Möglichkeit, die gut funktioniert, wenn die Ordnernamen „Dokumente“, „Downloads“ und „Desktop“ in beiden Betriebssystemen übereinstimmen. Es wird vorausgesetzt, dass der Linux-PC bereits in die Domäne integriert ist und die Benutzer sich mit ihren Domänenkonten unter Verwendung von sssd zur Authentifizierung und Autorisierung anmelden.
      # 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"/>
      

      wo:

      • uid=„100000000-2000000000“ — UID-Bereich, der den Domänenbenutzern von SSSD zugewiesen wird
      • server=„dfs“ — Name des Dateiservers
      • path=„Profile_Users/%(USER)“ — Ressource auf dem Dateiserver, die das Benutzerprofil enthält
      • mountpoint=„~“ — Einhängepunkt im Home-Verzeichnis des Benutzers

      Der Benutzer-Login wird in die Makrovariable „%(USER)“ übergeben, die von pam_mount verwendet wird, um unsere Netzwerkressource so zu verbinden, wie sie im Display-Manager eingegeben wird. Daher ist es wichtig, dass bei der Anmeldung im Display-Manager der Login ohne explizite Angabe des Domänennamens eingegeben wird.

      In sssd.conf wird dies gelöst, indem man die Option kommentiert oder den Wert False setzt. use_fully_qualified_names, die den Vollnamenmodus (einschließlich der Domain) für Benutzer und Gruppen umfasst.

    2. Die zweite Methode ist weniger direkt und etwas grob, aber aus meiner Sicht bequemer und vorzuziehen. Der Unterschied zur ersten besteht lediglich in der Konfiguration von pam_mount.
      # vim /etc/security/pam_mount.conf.xml

      Das heißt, wir montieren einfach jeden unserer Ordner in das entsprechende Verzeichnis.

Fazit

In einem halben Monat Testbetrieb hat dieses Setup mehrere lang- und kurzfristige Ausfälle beider Controller nahezu ohne Auswirkungen auf die Kunden überstanden (einmal verlor ein Kunde unter Windows 7 seine Vertrauensverhältnisse).

Insgesamt habe ich recht positive Eindrücke von der Arbeit mit diesem Produkt, trotz aller Nuancen, mit denen ich sowohl in der Artikelverfassung als auch im 'Hintergrund' konfrontiert wurde.

Es gibt viele Fallstricke, und während der Arbeit mit Samba wird man eine große Anzahl davon entdecken müssen. Dennoch gibt es derzeit keine anderen Lösungen, die es ermöglichen, eine hybride Umgebung unter Verwendung von Verzeichnisdiensten ohne Windows zu organisieren.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster