Migrer un domaine Samba3 vers Samba4

Magazine
Marque
GNU/Linux Magazine
Numéro
154
Mois de parution
novembre 2012
Spécialité(s)


Résumé
Dans un précédent article, j'avais abordé le fonctionnement de l'Active Directory et sa mise en place avec Samba4. De nombreux domaines sont en place sous Samba3, mais les limites de cette technologie font qu'il devient grand temps pour un certain nombre d'administrateurs de migrer vers un domaine de type Active Directory. Nous allons voir dans cet article ce que propose Samba4 actuellement pour ne pas avoir besoin de mettre en œuvre des serveurs sous Windows.

Body

1. Introduction et processus de migration

Le processus proposé par Samba n'implique pas de devoir recréer le domaine ainsi que l'ensemble des comptes. Bien qu'il soit possible de mettre à jour un serveur existant, il est par contre nettement préférable de passer par un nouveau serveur. Sachant qu'il y a deux types de sysadmins, ceux qui ont fait une boulette et ceux qui ne vont pas tarder à en faire une, autant passer par cette méthode et repousser l'échéance de la prochaine bourde.

Pour la démonstration, je vais partir d'un domaine existant PLANETEXPRESS disposant de quelques comptes utilisateurs actifs. Pour le lecteur curieux qui souhaite reproduire les étapes de migration mais qui n'a pas de serveur samba3 sous la main, je vais très succinctement rappeler la mise en place d'un domaine NT4, sans entrer dans le détail de la configuration ou des partages.

Le futur serveur de son côté est donc une nouvelle installation. Dans le processus de migration du domaine, on ne procède pas à la création d'un nouveau domaine via un samba-tool provision, mais on créé le domaine en aspirant le contenu des bases Samba3 afin de migrer l'ensemble des objets du domaine tout en conservant les identifiants de sécurité (SID).

2. Le domaine NT4

Je vais partir d'un serveur samba3 en version 3.5.6 nommé disons srv-pdc et faire fonctionner une Debian Squeeze, donc stable. La configuration exposée ici n'a pas pour but de rentrer dans le détail du fonctionnement et de la configuration de Samba, aussi je resterai assez succinct.

On va commencer par créer deux groupes dont le nom parle de lui-même quant à leur fonction, puis on associe les groupes Windows génériques à nos comptes Unix :

# groupadd g 514 sambausers

# groupadd -g 515 sambamachines

# net groumap add rid=515 unixgroup=sambamachines ntgroup="Domain Computers"

# net groumap set "Domain Users" sambausers

# net groupmap add rid=514 unixgroup=sambausers ntgroup="Domain Users"

On ajoute au moins un compte à ce domaine et on génère un mot de passe avec un hash NTLM :

# useradd -g sambausers philip.fry && smbpasswd -a philip.fry

Enfin, il faut bien entendu déclarer notre serveur comme étant capable de gérer les authentifications sur le réseau et on le déclare sur les listes d'exploration Netbios. Pour faire court, les lignes utiles à ce niveau se résument à :

[global]

   workgroup = PLANETEXPRESS

   security = user

   domain logons = yes

   os level = 65

   domain master = yes

   local master = yes

   preferred master = yes

Il ne reste plus qu'à redémarrer Samba3 et on peut enfin attaquer les choses sérieuses !

3. Le nouveau serveur Samba4

3.1. Pré-requis :

Le futur serveur nommé srv-ad est sous Debian Testing pour des raisons de compatibilité entre le plugin pour les backend de zones dynamiques pour Bind fourni par Samba4 et la version de Bind de la distribution. Bien entendu, il est possible de compiler la bonne version de Bind pour Debian Testing. Le serveur se prépare de la même manière qu'un nouveau domaine. Le serveur devra donc être maintenu à l'heure par un serveur NTP proprement configuré et les partitions devront être montées avec les attributs user_xattr et acl.

Tout comme pour un nouveau serveur, on va avoir besoin des dépendances suivantes, je vous conseille également d'adapter votre variable d'environnement $PATH avec la valeur ci-dessous :

apt-get -y install build-essential libacl1-dev libattr1-dev \

   libblkid-dev libgnutls-dev libreadline-dev python-dev \

   python-dnspython gdb pkg-config libpopt-dev libldap2-dev \

   bind9utils dnsutils libtool git xsltproc libpam0g-dev \

   attr acl psmisc bind9 ntp libtalloc2 libtalloc-dev

echo "export PATH=$PATH:/usr/local/samba/bin/:/usr/local/samba/sbin/:" >> ~/.bashrc && source ~/.bashrc

Il restera ensuite à récupérer les sources de ldb et samba4 (en beta5 lors de la rédaction de cet article ) depuis ftp.samba.org et à les compiler à l'aide des traditionnels ./configure && make && make install.

3.2 Migration

Tout d'abord, il va donc falloir récupérer la configuration qui nous intéresse, disons dans le répertoire /samba3 préalablement créé.

scp -r root@srv-dc:/var/lib/samba/* /samba3

scp root@srv-dc:/etc/samba/smb.conf /samba3

scp root@srv-dc:/etc/group /samba3/

Ensuite, on peut vampiriser les bases issues de l'installation du domaine Samba3 pour créer le domaine Active Directory. Le domaine NT4 se nomme PLANETEXPRESS, j'ai par convention suffixé le domaine du TLD .local, mais ceci n'est en rien une obligation.

# samba-tool domain classicupgrade --dbdir=/samba3/ --use-xattrs=yes --realm=planetexpress.local /samba3/smb.conf

[...]

Ignoring group 'Domain Users' S-1-5-21-587561313-451766989-2726486068-1000 listed but then not found: Unable to enumerate group members, (-1073741722,No such group)

Ignoring group 'Domain Computers' S-1-5-21-587561313-451766989-2726486068-515 listed but then not found: Unable to enumerate group members, (-1073741722,No such group)

Exporting users

  Skipping wellknown rid=501 (for username=nobody)

Ignoring group memberships of 'hubert.farnsworth' S-1-5-21-587561313-451766989-2726486068-1002: Unable to enumerate group memberships, (-1073741724,No such user)

Ignoring group memberships of 'kif.kroker' S-1-5-21-587561313-451766989-2726486068-1004: Unable to enumerate group memberships, (-1073741724,No such user)

Ignoring group memberships of 'zapp.brannigan' S-1-5-21-587561313-451766989-2726486068-1001: Unable to enumerate group memberships, (-1073741724,No such user)

Ignoring group memberships of 'philip.fry' S-1-5-21-587561313-451766989-2726486068-1003: Unable to enumerate group memberships, (-1073741724,No such user)

Ignoring group memberships of 'turanga.leela' S-1-5-21-587561313-451766989-2726486068-1005: Unable to enumerate group memberships, (-1073741724,No such user)

Ignoring group memberships of 'docteur.zoidberg' S-1-5-21-587561313-451766989-2726486068-1006: Unable to enumerate group memberships, (-1073741724,No such user)

Ignoring group memberships of 'amy.wong' S-1-5-21-587561313-451766989-2726486068-1007: Unable to enumerate group memberships, (-1073741724,No such user)

Ignoring group memberships of 'hermes.conrad' S-1-5-21-587561313-451766989-2726486068-1008: Unable to enumerate group memberships, (-1073741724,No such user)

Ignoring group memberships of 'VM-XP-01$' S-1-5-21-587561313-451766989-2726486068-1010: Unable to enumerate group memberships, (-1073741724,No such user)

[...]

Once the above files are installed, your Samba4 server will be ready to use

Admin password:        u5DDH$O~BbUh8Ix=%2K[bc2TZ>;c

Server Role:           active directory domain controller

Hostname:              srv-ad

NetBIOS Domain:        PLANETEXPRESS

DNS Domain:            planetexpress.local

DOMAIN SID:            S-1-5-21-587561313-451766989-2726486068

[...]

Importing groups

[...]

Importing users

User root has been kept in the directory, it should be removed in favour of the Administrator user

Adding users to groups

Setting password for administrator

Administrator password has been set to password of user 'root'

Si tout va bien, le domaine aura été aspiré de la même façon, avec une série de jolies erreurs qui pourraient servir à effrayer de jeunes enfants. En effet, le serveur a été migré mais pas les groupes attenants, c'est pour cette raison que le fichier /etc/group de srv-pdc a été récupéré. Je vous propose par conséquent le script suivant qui remettra les choses d'aplomb. Une fois ce script exécuté, je vous invite à démarrer Samba en lançant la commande du même nom.

for line in ` cat /samba3/group `

do

        GID=` echo $line | cut -d ':' -f 3 `

        NOM=` echo $line | cut -d ':' -f 1 `

        MEMBRES=` echo $line | cut -d ':' -f 4 `

        # On ignore les comptes systèmes

        if [ $GID -gt 100 ]; then

                grep $NOM /etc/group

                  # Si le groupe n'est pas présent sur le nouveau serveur, alors on l'ajoute

                if [ $? == 1 ]; then

                        echo $line >> /etc/group

                        /usr/local/samba/bin/samba-tool group add $NOM

                        /usr/local/samba/bin/samba-tool group addmembers $NOM $MEMBRES

                fi

        fi

done

On peut désormais vérifier que notre domaine est correctement remonté et que l'on liste bien les utilisateurs et leur appartenance aux groupes :

root@srv-ad:~# samba-tool domain info 192.168.1.231                                                                                                                                                                                            

Forest           : planetexpress.local                                                                                                                                                                                                         

Domain           : planetexpress.local                                                                                                                                                                                                         

Netbios domain   : PLANETEXPRESS                                                                                                                                                                                                               

DC name          : srv-ad.planetexpress.local                                                                                                                                                                                                  

DC netbios name : SRV-AD                                                                                                                                                                                                                      

Server site      : Default-First-Site-Name                                                                                                                                                                                                     

Client site      : Default-First-Site-Name                                                                                                                                                                                                     

root@srv-ad:~# samba-tool group listmembers sambausers

hubert.farnsworth

docteur.zoidberg

hermes.conrad

amy.wong

kif.kroker

philip.fry

turanga.leela

zapp.brannigan

Si tout est en ordre, je vous invite alors à valider la connexion au domaine depuis un poste client Windows. Si l'authentification a fonctionné, le poste doit renvoyer le nom du nouveau serveur. Notez que bien entendu pour que l'authentification fonctionne, le poste client devra être en mesure de résoudre les enregistrements du domaine planetexpress.local, que ce soit au moyen d'un redirecteur DNS pour ce domaine ou bien en indiquant srv-ad comme serveur DNS.

C:\Documents and Settings\amy.wong>echo %LOGONSERVER%

\\SRV-AD

4. Que reste-t-il ensuite ?

Le plus urgent consiste en premier lieu à arrêter les services Samba de l'ancien serveur. Un petit exit 0 au début du script d'init est un choix judicieux car il permet de s'assurer que même en cas de redémarrage de l'ancien serveur, il n'y aura pas les deux serveurs actifs sur le réseau. En effet, le rôle émulateur de contrôleur de domaine de type NT4 est géré par un serveur unique sur l'AD et un seul serveur de ce type doit être présent sur un réseau. De plus, les bases doivent rester cohérentes et donc un seul serveur doit gérer le domaine à la fois.

Au niveau réseau, si vous utilisez encore du WINS, il est toujours possible de paramétrer le fichier smb.conf pour que ce soit pris en charge par les anciens démons samba3, mais il serait sans doute temps de retirer ces options DHCP si elles sont présentes afin de se débarrasser d'une telle vieillerie. Si vous avez une zone DNS sur l'ancien serveur qui risque d'entrer en conflit, je vous conseille de la migrer également dans Samba4. Il est très facile d'automatiser cela via samba-tool. Par exemple :

samba-tool dns add srv-ad planetexpress.local srv-pdc A 192.168.1.230

Il restera enfin les services de fichiers et d'imprimantes. Bien que le fichier smb.conf ait été transféré dans le répertoire /samba3 avant de lancer la migration des bases, cela n'a eu aucun effet sur les partages. Il faudra donc les réintégrer dans le fichier /usr/local/samba/etc/smb.conf. Bien que je n'aborde ce point qu'en fin d'article, c'est finalement presque le plus critique. C'est celui qui touche directement les utilisateurs. Le nom de serveur ayant changé, il est donc fort souhaitable que les utilisateurs travaillent via des lecteurs réseau mappés à la connexion, la directive logon script paramétrée sur le serveur Samba3 vous sera d'une aide précieuse. Enfin, la migration des données est bien entendu à opérer en amont. Il n'est pas tenable de laisser patienter les utilisateurs le temps que les données arrivent. Je ne saurais donc que trop vous recommander un transfert via rsync -AXLzvp –delete afin d'une part de préserver les propriétés des fichiers et surtout de n'avoir qu'un différentiel à traiter lors de la migration en cas réel.




Article rédigé par

Par le(s) même(s) auteur(s)

Déployer des environnements de développement avec Vagrant

Magazine
Marque
Linux Pratique
Numéro
127
Mois de parution
septembre 2021
Spécialité(s)
Résumé

Vagrant est un logiciel libre permettant de déployer rapidement des machines virtuelles. C'est un logiciel développé par la société Hashicorp, déjà connue pour d'autres logiciels comme Terraform, Packer ou Vault. Historiquement lié à VirtualBox, Vagrant s'est désormais largement ouvert à d'autres solutions de virtualisation comme Libvirt ou de conteneurisation comme Docker.

Fabric, le couteau suisse de l’automatisation

Magazine
Marque
Linux Pratique
Numéro
122
Mois de parution
novembre 2020
Spécialité(s)
Résumé

Fabric est une bibliothèque Python et une interface en ligne de commandes facilitant l’utilisation de SSH, que ce soit pour des applications ou dans le but d’automatiser certaines tâches répétitives d’administration système. La grande force de Fabric est d’être particulièrement simple à utiliser.

Utilisez Terraform pour vos projets Docker

Magazine
Marque
GNU/Linux Magazine
Numéro
240
Mois de parution
septembre 2020
Spécialité(s)
Résumé

Terraform est un outil populaire pour déployer de l’infrastructure en particulier à destination des Clouds publics. Cependant, il possède de nombreux providers pour dialoguer avec différents hyperviseurs, bases de données ou solutions d’infrastructures en Software Defined. Voyons dans cet article son utilisation avec Docker.

Les derniers articles Premiums

Les derniers articles Premium

Game & Watch : utilisons judicieusement la mémoire

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Au terme de l'article précédent [1] concernant la transformation de la console Nintendo Game & Watch en plateforme de développement, nous nous sommes heurtés à un problème : les 128 Ko de flash intégrés au microcontrôleur STM32 sont une ressource précieuse, car en quantité réduite. Mais heureusement pour nous, le STM32H7B0 dispose d'une mémoire vive de taille conséquente (~ 1,2 Mo) et se trouve être connecté à une flash externe QSPI offrant autant d'espace. Pour pouvoir développer des codes plus étoffés, nous devons apprendre à utiliser ces deux ressources.

Raspberry Pi Pico : PIO, DMA et mémoire flash

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Le microcontrôleur RP2040 équipant la Pico est une petite merveille et malgré l'absence de connectivité wifi ou Bluetooth, l'étendue des fonctionnalités intégrées reste très impressionnante. Nous avons abordé le sujet du sous-système PIO dans un précédent article [1], mais celui-ci n'était qu'une découverte de la fonctionnalité. Il est temps à présent de pousser plus loin nos expérimentations en mêlant plusieurs ressources à notre disposition : PIO, DMA et accès à la flash QSPI.

Programmation des PIO de la Raspberry Pi Pico

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

La carte Pico de Raspberry Pi est appréciable à bien des égards. Ses ressources, son prix, ses deux cœurs ARM... Mais ce morceau de silicium qu'est le RP2040 renferme une fonctionnalité unique : des blocs PIO permettant de créer librement des périphériques supplémentaires qu'il s'agisse d'éléments standardisés comme SPI, UART ou i2c, ou des choses totalement exotiques et très spécifiques à un projet ou un environnement donné. Voyons ensemble comment prendre en main cette ressource et explorer le monde fantastique des huit machines à états de la Pico !

Les listes de lecture

8 article(s) - ajoutée le 01/07/2020
Découvrez notre sélection d'articles pour faire vos premiers pas avec les conteneurs, apprendre à les configurer et les utiliser au quotidien.
11 article(s) - ajoutée le 02/07/2020
Si vous recherchez quels sont les outils du DevOps et comment les utiliser, cette liste est faite pour vous.
8 article(s) - ajoutée le 02/07/2020
Il est essentiel d'effectuer des sauvegardes régulières de son travail pour éviter de perdre toutes ses données bêtement. De nombreux outils sont disponibles pour nous assister dans cette tâche.
Voir les 49 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous