Samba DC en tant que deuxième contrôleur dans le domaine AD de Windows 2012R2 et dossiers itinérants pour les clients sous Windows et Linux

image

La prise de conscience que j'étais dans le mix d'importation n'est pas venue tout de suite. Ce n'est que lorsque de nouveaux approvisionnements en PC ont commencé à arriver de manière stable de l'organisation mère avec la distribution Alt Linux à bord, j'ai soupçonné que quelque chose n'allait pas.

Cependant, en passant par les étapes d'acceptation de l'inévitable, je me suis impliqué et j'ai même commencé à apprécier un peu le processus. Et à un moment donné, j'ai pensé que, à un tel rythme, je devais tôt ou tard abandonner la décision d'organiser le service d'annuaire Microsoft et aller vers quelque chose de plus exotique. Par conséquent, afin de se préparer à l'avance à l'inévitable, et si possible d'attraper plus d'embûches, il a été décidé de déployer un banc d'essai, qui comprend:

  • DC1 - Windows Server 2012R2
  • DC2 - Alt Server 8.2
  • Serveur de fichiers - Windows Server 2012R2
  • PC1 - Windows 7
  • PC2 - Alt Workstation 8.2

Tâches du stand:


  1. Déployez un domaine basé sur w2k12r2. Créez un ensemble minimal de stratégies de groupe (similaires à celles utilisées dans l'infrastructure de travail), y compris une stratégie de transfert des dossiers de travail des utilisateurs (Téléchargements / Documents / Bureau). En fin de compte, je veux que lorsqu'un utilisateur change son lieu de travail de Windows à Linux et vice versa, il ait un accès confortable à ses documents de travail.
  2. Entrée dans Samba DC par le deuxième contrôleur. Vérification du service d'annuaire et de la réplication DNS
  3. Configuration de clients Linux avec des dossiers itinérants

Réalisation:


  1. Installer et entrer un nouveau contrôleur

    Avec l'installation de MS Windows 2012R2, tout est simple et moins clair. Sur Internet, il existe un manuel 1001 pour déployer un domaine sous Windows à l'aide de l'interface graphique et de Powershell, donc je ne le répéterai pas, je ne laisserai qu'un lien à désactiver. documentation pour les curieux et ceux qui veulent se rafraîchir la mémoire.

    Cependant, il y a un point important dans ce paragraphe. À ce jour, Samba n'est pas en mesure de travailler avec des schémas de catalogue supérieurs à 2008R2.

    Cap de spoiler
    Les développeurs de ce support sont plutôt déclarés expérimentaux. Mais en pratique, une tentative d'entrer samba en tant que deuxième contrôleur de domaine dans un domaine Windows existant avec le schéma 69 vous rencontrera l'erreur suivante
    Échec de DsAddEntry avec le statut WERR_ACCESS_DENIED info (8567, 'WERR_DS_INCOMPATIBLE_VERSION')


    Le problème est que Windows 2012 et 2012R2 utilisent des outils WMI pour travailler avec les domaines et les forêts, dont la prise en charge stable n'est annoncée que pour la version 4.11 de Samba, qui devrait sortir avant la fin de cette année.
    Il s'ensuit que la seule option pour introduire la samba dans le domaine AD, déployée sur le serveur 2012R2, est de réduire le schéma de 69 à 47. Bien sûr, cela ne devrait pas être fait sur l'infrastructure de travail sans raison valable, mais nous avons un banc de test ici, alors pourquoi en fait non.

    Nous mettons Alt Server 8.2. Lors de l'installation, sélectionnez le profil "Serveur Samba-DC (Contrôleur AD)". Sur le serveur déployé, nous effectuons une mise à jour complète du système et installons le package task-samba-dc, qui tirera tout ce dont vous avez besoin

    # apt-get install task-samba-dc 

    Si task-samba-dc subitement, contrairement aux assurances de la documentation, Alta refuse d'installer tout le nécessaire.
     # apt-get install python-module-samba-DC samba-DC-common samba-DC-winbind-clients samba-DC-winbind samba-DC-common-libs libpytalloc-devel 


    Ensuite, procédez à la configuration de Kerberos et recevez un ticket. Ouvrez le fichier krb5.conf, accédez à la section [libdefaults] et apportez-le sous la forme suivante:

     # vim /etc/krb5.conf 

      dns_lookup_kdc = true dns_lookup_realm = true default_realm = TEST.LOCAL 

    Demander un billet

     # kinit administrator Password for administrator@TEST.LOCAL: 

    Vérification de la liste des tickets Kerberos reçus

     # 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 

    Maintenant, supprimez ou renommez la configuration samba existante.

     # mv smb.conf smb.conf.bak1 

    Enfin, nous entrons le deuxième contrôleur dans le domaine AD:

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

    L'entrée réussie sera suivie du journal suivant
     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 


    Un enregistrement sur le nouveau contrôleur de domaine dans le domaine TEST.LOCAL doit apparaître dans le composant logiciel enfichable ADUC, et un nouvel enregistrement A correspondant à DC2 doit apparaître dans le gestionnaire DNS.
  2. Réplication entre contrôleurs

    Pour commencer, consultez le service de réplication d'annuaire (DRS)

     # samba-tool drs showrepl 

    Toutes les tentatives de réplication en sortie doivent réussir. Dans la liste des objets KCC, dans les 15 minutes suivant la saisie, notre DC1 sur Windows devrait apparaître
     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! 


    Avertissement "Aucun NC répliqué pour la connexion!" peut être ignoré en toute sécurité. Cela semble dû au fait que lors de l'enregistrement d'un nouveau contrôleur de domaine, samba définit de manière incorrecte certains indicateurs de réplication.

    La vérification de la réplication LDAP est également une bonne idée.

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

    La commande ci-dessus comparera les valeurs d'attribut des objets de l'ensemble du répertoire sur DC1 et DC2.

    Exemple de réplication réussie
     * 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 

    Dans certains cas, les attributs des objets sur différents contrôleurs peuvent différer et la sortie de la commande vous en informera. Mais ce ne sera pas dans tous les cas le signe d'un problème de réplication.

    L'étape suivante consiste à configurer manuellement la réplication stable du répertoire SysVol.
    Le fait est que samba ne prend pas encore en charge DFS-R, car il ne prend pas en charge le FRS précédent. Par conséquent, pour la réplication entre DC Samba et Windows, la seule solution qui fonctionne aujourd'hui est la réplication unidirectionnelle à l'aide de l'utilitaire Robocopy à partir des outils du Kit de ressources Windows Server 2003 .

    Les développeurs de Samba, afin d'éviter les problèmes de compatibilité, recommandent d'abord d'installer le kit utilitaire sur un poste de travail normal, puis copiez Robocopy sur le contrôleur dans le dossier «C: \ Program Files (x86) \ Windows Resource Kits \ Tools \»

    Après l'installation, dans le planificateur de tâches sur le contrôleur Windows, nous créons une tâche pour la réplication avec les paramètres suivants:

    - Effectuer pour tous les utilisateurs
    - Déclenchement pour exécuter quotidiennement toutes les 5 minutes pendant la journée
    - Dans les actions on prescrit le chemin vers l'utilitaire robocopy, on indique comme arguments:

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

    Dans un cas spécifique, copiez le contenu du répertoire SysVol de DC1 vers DC2.
  3. Dossiers utilisateur portables utilisant la configuration pam_mount

    Empiriquement, j'ai trouvé deux options viables pour résoudre ce problème avec son aide.

    1. Montage complet du dossier de profils du réseau à la section / home

      Une option simple. Cela fonctionne bien si les noms de dossier Mes documents, Téléchargements et Bureau sont les mêmes sur les deux systèmes d'exploitation. Il est entendu qu'un PC Linux a déjà été entré dans le domaine et que les utilisateurs sont connectés sous leurs comptes de domaine en utilisant sssd comme mécanisme d'authentification et d'autorisation.

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

      où:

      • uid = "100000000-2000000000" - la plage UID attribuée aux utilisateurs de domaine à partir de SSSD
      • server = "dfs" - nom du serveur de fichiers
      • path = "Profile_Users /% (USER)" - une ressource sur le serveur de fichiers avec le profil utilisateur hébergé
      • mountpoint = "~" - chemin de montage vers le dossier de départ de l'utilisateur

      Le login de l'utilisateur est transmis à la variable macro "% (USER)" utilisée par pam_mount pour connecter notre ressource réseau, sous la forme dans laquelle elle est entrée dans le gestionnaire d'affichage. Par conséquent, il est important que la connexion DM soit entrée sans indication explicite du nom de domaine.

      Dans sssd.conf, cela est résolu en commentant ou en définissant la valeur False sur l'option use_fully_qualified_names , qui active le mode nom complet (y compris le domaine) pour les utilisateurs et les groupes.
    2. La deuxième méthode est moins simple et maladroite, et à mon avis plus pratique et préférée. La différence par rapport au premier uniquement dans la configuration 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"/> 

      Autrement dit, nous montons simplement chacun de nos dossiers séparément dans le répertoire correspondant

Conclusions

Plus d'un demi-mois de travail sur un banc de test, ce bundle a survécu avec succès à plusieurs arrêts alternés à long terme et à court terme des deux contrôleurs, sans pratiquement aucune conséquence pour les clients (une fois qu'un client sur Windows7 a perdu confiance).

En général, j'ai eu une impression plutôt agréable de travailler avec ce produit, malgré toutes les nuances auxquelles j'ai dû faire face à la fois dans l'article et dans les coulisses.

Il y a des pièges, il y en a beaucoup, et au cours du travail avec la samba, ils devront être capturés en grande quantité. Cependant, à ce jour, aucune autre solution ne vous permet d'organiser un environnement hybride à l'aide des services d'annuaire et sans utiliser Windows.

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


All Articles