Samba DC als zweiter Controller in der AD-Domäne von Windows 2012R2 und Roaming-Ordnern für Clients unter Windows und Linux

Bild

Die Erkenntnis, dass ich im Import-Mix war, kam nicht sofort. Erst als mit der Alt-Linux-Distribution an Bord neue PC-Vorräte von der Mutterorganisation stabil ankamen, vermutete ich, dass etwas nicht stimmte.

Während ich die Phasen des Akzeptierens des Unvermeidlichen durchlief, wurde ich involviert und fing sogar an, den Prozess ein wenig zu genießen. Und irgendwann dachte ich, dass ich in einem solchen Tempo früher oder später die Entscheidung aufgeben müsste, den Microsoft-Verzeichnisdienst zu organisieren und mich etwas Exotischerem zuzuwenden. Um sich im Voraus auf das Unvermeidliche vorzubereiten und wenn möglich weitere Fallstricke zu erkennen, wurde beschlossen, einen Prüfstand einzusetzen, der Folgendes umfasst:

  • DC1 - Windows Server 2012R2
  • DC2 - Alt Server 8.2
  • Dateiserver - Windows Server 2012R2
  • PC1 - Windows 7
  • PC2 - Alt Workstation 8.2

Aufgaben des Standes:


  1. Stellen Sie eine Domäne bereit, die auf w2k12r2 basiert. Erstellen Sie einen minimalen Satz von Gruppenrichtlinien (ähnlich den in der Arbeitsinfrastruktur verwendeten), einschließlich einer Richtlinie zum Übertragen von Benutzerarbeitsordnern (Downloads / Dokumente / Desktop). Am Ende möchte ich, dass ein Benutzer, wenn er seinen Arbeitsplatz von Windows auf Linux und umgekehrt wechselt, bequemen Zugriff auf seine Arbeitsdokumente hat.
  2. Eingabe von Samba DC durch den zweiten Controller. Überprüfen des Verzeichnisdienstes und der DNS-Replikation
  3. Konfigurieren von Linux-Clients mit Roaming-Ordnern

Implementierung:


  1. Installieren Sie einen neuen Controller und geben Sie ihn ein

    Mit der Installation von MS Windows 2012R2 ist alles einfach und weniger klar. Im Internet gibt es ein 1001-Handbuch zum Bereitstellen einer Domäne unter Windows über die GUI und Powershell. Ich werde es also nicht wiederholen, sondern nur einen Link deaktivieren. Dokumentation für Neugierige und diejenigen, die ihr Gedächtnis auffrischen wollen.

    Es gibt jedoch einen wichtigen Punkt in diesem Absatz. Bisher kann Samba nicht mit Katalogschemata über 2008R2 arbeiten.

    Spoiler Überschrift
    Vielmehr werden die Entwickler dieser Unterstützung als experimentell deklariert. In der Praxis tritt bei dem Versuch, Samba als zweiten Domänencontroller in eine vorhandene Windows-Domäne mit Schema 69 einzugeben, der folgende Fehler auf
    DsAddEntry ist mit dem Status WERR_ACCESS_DENIED info (8567, 'WERR_DS_INCOMPATIBLE_VERSION') fehlgeschlagen.


    Das Problem ist, dass Windows 2012 und 2012R2 WMI-Tools für die Arbeit mit Domänen und Gesamtstrukturen verwenden, deren stabile Unterstützung nur für die Version Samba 4.11 angekündigt wurde, die vor Ende dieses Jahres veröffentlicht werden soll.
    Daraus folgt, dass die einzige Möglichkeit, Samba in die auf einem 2012R2-Server bereitgestellte AD-Domäne einzuführen, darin besteht, das Schema von 69 auf 47 zu senken. Natürlich ist dies in der Arbeitsinfrastruktur nicht ohne Grund erforderlich, aber wir haben hier einen Prüfstand. Warum also? eigentlich nicht.

    Wir setzen Alt Server 8.2. Wählen Sie während der Installation das Profil "Samba-DC Server (AD Controller)". Auf dem bereitgestellten Server führen wir ein vollständiges Systemupdate durch und installieren das Task-Samba-DC-Paket, das alles abruft, was Sie benötigen

    # apt-get install task-samba-dc 

    Wenn task-samba-dc plötzlich widerspricht, weigert sich Alta entgegen den Zusicherungen der Dokumentation, alles Notwendige zu installieren.
     # apt-get install python-module-samba-DC samba-DC-common samba-DC-winbind-clients samba-DC-winbind samba-DC-common-libs libpytalloc-devel 


    Fahren Sie als Nächstes mit der Konfiguration von Kerberos fort und erhalten Sie ein Ticket. Öffnen Sie die Datei krb5.conf, gehen Sie zum Abschnitt [libdefaults] und bringen Sie sie in das folgende Formular:

     # 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 der 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 

    Löschen Sie nun die vorhandene Samba-Konfiguration oder benennen Sie sie um.

     # mv smb.conf smb.conf.bak1 

    Schließlich geben wir den zweiten Controller in die AD-Domäne ein:

     # samba-tool domain join test.local DC -U"TEST\administrator" 

    Nach erfolgreicher Eingabe folgt das folgende Protokoll
     Finding a writeable DC for domain 'test.local' Found DC DC1.TEST.LOCAL Password for [TEST\administrator]: 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 on 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 


    Ein Datensatz über den neuen Domänencontroller in der Domäne TEST.LOCAL sollte im ADUC-Snap-In angezeigt werden, und ein neuer A-Eintrag, der DC2 entspricht, sollte im DNS-Manager angezeigt werden.
  2. Replikation zwischen Controllern

    Überprüfen Sie zunächst den Directory Replication Service (DRS).

     # samba-tool drs showrepl 

    Alle Replikationsversuche in der Ausgabe müssen erfolgreich sein. In der Liste der KCC-Objekte sollte innerhalb von 15 Minuten nach der Eingabe unser DC1 unter Windows angezeigt werden
     Default-First-Site-Name\DC2 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-Name\DC1 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-Name\DC1 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-Name\DC1 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-Name\DC1 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-Name\DC1 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-Name\DC1 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-Name\DC1 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-Name\DC1 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-Name\DC1 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-Name\DC1 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! 


    Warnung "Keine NC für Verbindung repliziert!" kann sicher ignoriert werden. Dies liegt daran, dass Samba bei der Registrierung eines neuen DC einige Replikationsflags falsch setzt.

    Das Überprüfen der LDAP-Replikation ist ebenfalls eine gute Idee.

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

    Der obige Befehl vergleicht die Attributwerte der Objekte des gesamten Verzeichnisses auf DC1 und DC2.

    Beispiel für eine erfolgreiche Replikation
     * 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 

    In einigen Fällen können sich die Attribute von Objekten auf verschiedenen Controllern unterscheiden, und die Ausgabe des Befehls informiert Sie darüber. Dies ist jedoch nicht in allen Fällen ein Zeichen für ein Replikationsproblem.

    Der nächste Schritt besteht darin, die stabile Replikation des SysVol-Verzeichnisses manuell zu konfigurieren.
    Tatsache ist, dass Samba DFS-R jedoch noch nicht unterstützt, da es das frühere FRS nicht unterstützt. Daher ist für die Replikation zwischen DC Samba und Windows die einzige funktionierende Lösung heute die Einwegreplikation mit dem Dienstprogramm Robocopy aus den Windows Server 2003 Resource Kit-Tools .

    Um Kompatibilitätsprobleme zu vermeiden, empfehlen Samba-Entwickler, das Utility-Kit zunächst auf einer normalen Workstation zu installieren und dann Robocopy auf den Controller im Ordner "C: \ Programme (x86) \ Windows Resource Kits \ Tools \" zu kopieren.

    Nach der Installation erstellen wir im Taskplaner auf dem Windows-Controller eine Task für die Replikation mit den folgenden Parametern:

    - Für alle Benutzer durchführen
    - Auslöser für die tägliche Ausführung alle 5 Minuten während des Tages
    - In den Aktionen, die wir den Pfad zum Robocopy-Dienstprogramm vorschreiben, geben wir als Argumente an:

     \\DC1\SYSVOL\test.local\ \\DC2\SYSVOL\test.local\ /mir /sec 

    Kopieren Sie in einem bestimmten Fall den Inhalt des SysVol-Verzeichnisses von DC1 nach DC2.
  3. Tragbare Benutzerordner mit pam_mount-Konfiguration

    Empirisch fand ich zwei praktikable Optionen, um dieses Problem mit seiner Hilfe zu lösen.

    1. Vollständige Bereitstellung des Profilordners vom Netzwerk in den Bereich / home

      Eine einfache Option. Es funktioniert einwandfrei, wenn die Ordnernamen Eigene Dateien, Downloads und Desktop auf beiden Betriebssystemen identisch sind. Es versteht sich, dass bereits ein Linux-PC in die Domäne eingegeben wurde und Benutzer unter ihren Domänenkonten mit sssd als Authentifizierungs- und Autorisierungsmechanismus angemeldet sind.

       # 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" - Der UID-Bereich, der Domänenbenutzern von SSSD zugewiesen wurde
      • server = "dfs" - Dateiservername
      • path = "Profile_Users /% (USER)" - eine Ressource auf dem Dateiserver, auf der das Benutzerprofil gehostet wird
      • mountpoint = "~" - Mount-Pfad zum Home-Ordner des Benutzers

      Die Anmeldung des Benutzers wird an die Makrovariable "% (USER)" übergeben, die von pam_mount verwendet wird, um unsere Netzwerkressource in der Form zu verbinden, in der sie im Display-Manager eingegeben wird. Daher ist es wichtig, dass die DM-Anmeldung ohne explizite Angabe des Domainnamens eingegeben wird.

      In sssd.conf wird dies durch Kommentieren oder durch Setzen des False-Werts auf die Option use_fully_qualified_names gelöst , wodurch der vollständige Namensmodus (einschließlich Domäne) für Benutzer und Gruppen aktiviert wird .
    2. Die zweite Methode ist weniger einfach und ungeschickt und meiner Meinung nach bequemer und bevorzugter. Der Unterschied zum ersten nur in der pam_mount-Konfiguration

       # 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"/> 

      Das heißt, wir mounten einfach jeden unserer Ordner separat im entsprechenden Verzeichnis

Schlussfolgerungen

Über einen halben Monat Arbeit auf einem Prüfstand überlebte dieses Bundle mehrere abwechselnde langfristige und kurzfristige Abschaltungen beider Controller, ohne dass dies für die Clients praktisch Konsequenzen hatte (sobald ein Client unter Windows 7 das Vertrauen verlor).

Im Allgemeinen hatte ich einen angenehmen Eindruck von der Arbeit mit diesem Produkt, trotz aller Nuancen, denen ich mich sowohl im Artikel als auch hinter den Kulissen stellen musste.

Es gibt Fallstricke, es gibt viele von ihnen, und während der Arbeit mit Samba müssen sie in großen Mengen gefangen werden. Bisher gibt es jedoch keine anderen Lösungen, mit denen Sie eine Hybridumgebung mithilfe von Verzeichnisdiensten und ohne Verwendung von Windows organisieren können.

Source: https://habr.com/ru/post/de450572/


All Articles