Migrer de Samba3 vers Samba4 (publié dans GLMF 154)

Migrer un domaine Samba3 vers Samba4

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.

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 succintement 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 fait 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 la configuration de Samba, aussi je resterai assez succint.
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 fournit 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 que 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 viariable 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 es choses d’applomb. 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 consite 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éél.

Julien Morot
Sysadmin passionné par les logiciels libres depuis 1998.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *