Transformer un module Horus en module HorusAD

L'ajout du paquet horus-ad permet de transformer un module Horus existant en contrôleur de domaine Active Directory[1] tout en conservant toutes les fonctionnalités du module Horus : la gestion des utilisateurs et des groupes, EAD, serveur de bases de données...

Grâce à LXC[2] tous les services seront installés sur une seule machine mais séparés grâce à l'usage de conteneurs.

Un conteneur est une zone isolée à l'intérieur du système et qui a un espace spécifique du système de fichiers, un réseau, des processus, des allocations mémoires et processeurs. Cette technique permet de faire fonctionner de multiples environnements GNU/Linux isolés les uns des autres sur un seul et même système hôte.

Contrairement à d'autres techniques de virtualisation, il n'y qu'une seule instance du noyau présente pour l'ensemble des conteneurs et du maître.

LXC limite le nombre de serveurs nécessaires, tout en continuant à séparer les environnements et en conservant un haut degré de sécurité.

Les flux réseaux entre le conteneur et le maître
Les flux réseaux entre le conteneur et le maître

Attention

La transformation du module Horus en module HorusAD est irréversible.

Pré-requis

Il faut disposer d'un serveur Horus fonctionnel ou partir d'une nouvelle installation du module Horus, la procédure est la même.

Sur un serveur existant, il faut procéder à une ré-instanciation du serveur tandis que pour une nouvelle installation, il faut installer le paquet et effectuer l'instanciation.

Installation

L'installation du paquet horus-ad sur un module Horus active automatiquement la fonctionnalité AD :

# apt-eole install horus-ad

Configuration du module Horus devenu HorusAD

Adresse du service Active Directory

Par rapport à un module standard, une seule nouvelle variable est à renseigner pour ajouter la fonctionnalité Active Directory :

La valeur à saisir est une adresse IP disponible sur le réseau, elle permet d'exposer le service Active Directory.

Truc & astuce

Si un serveur DHCP[3] est utilisé, c'est cette adresse IP qu'il faut diffuser en tant que DNS pour les clients.

Choix du nom de domaine et configuration DNS

Par défaut le nom du domaine Active Directory (realm[4]) est le Nom DNS du réseau local paramétré dans l'onglet Général.

Le choix de cette valeur est primordial pour la bonne intégration du serveur dans une infrastructure existante.

Attention

La mise en place d'un service Active Directory dans une infrastructure impose des contraintes fortes en terme de configuration DNS.

Si le domaine Active Directory est une sous-zone d'un domaine géré par un serveur DNS externe (le module Amon, par exemple), ce dernier doit lui déléguer la gestion de cette sous-zone.

Remarque

Une fois instancié, le serveur d'origine utilise en tant que serveur DNS le serveur Active Directory qu’il héberge tandis que ce dernier se sert du premier DNS déclaré dans la variable Adresse IP du serveur DNS comme DNS de forward[5].

Remarque

Le nom du serveur Active Directory qui est également celui du conteneur LXC est addc. Cette valeur n'est pas modifiable.

Instanciation

Une fois configuré, il faut instancier ou ré-instancier le serveur à l'aide de la commande instance.

Génération du conteneur addc

Lors de la première instance, le conteneur LXC, nommé addc est généré puis configuré. Cette opération dure plusieurs minutes.

1
run-parts: executing /usr/share/eole/preservice/05-eolead instance
2
3
Génération du conteneur addc
4
Checking cache download in /var/cache/lxc/xenial/rootfs-amd64 ... 
5
Installing packages in template: apt-transport-https,ssh,vim,language-pack-en,language-pack-fr
6
Downloading ubuntu xenial minimal ...
7
I: Retrieving InRelease 
8
I: Checking Release signature
9
I: Valid Release signature (key id 790BC7277767219C42C86F933B4FE6ACC0B21F32)
10
I: Retrieving Packages 
11
I: Validating Packages
12
   [...]

Une fois le conteneur fonctionnel, l'initialisation du contrôleur de domaine débute.

Deux utilisateurs Active Directory sont créés, il faut leur attribuer un mot de passe :

  • Administrator : compte avec tous les pouvoirs (administrateur du domaine AD) à privilégier pour toutes les opérations d'administration du serveur :
1
Initialisation DC
2
Generation de la clef SSH pour les echanges entre DC
3
Création du mot de passe "Administrator" Active Directory : 
4
Confirmation du mot de passe : 
  • admin : compte d'administration à privilégier pour la jonction des clients au domaine et les opérations courantes.
1
Creation utilisateur 'admin'
2
Création du mot de passe "admin" Active Directory : 
3
Confirmation du mot de passe :

Attention

Le mot de passe de l'utilisateur admin de l'Active Directory est écrasé par celui de l'utilisateur admin de l'annuaire Horus lorsque ce dernier est modifié ou que la synchronisation des mots de passe est forcée.

Intégration au domaine et synchronisation de l'annuaire

Dans l'infrastructure HorusAD, le serveur Samba[6] du module Horus initial devient membre du nouveau domaine Active Directory.

Cette modification n'est pas entièrement automatisée, il est nécessaire de saisir à nouveau le mot de passe du compte Administrator créé précédemment.

1
run-parts: executing /usr/share/eole/posttemplate/05-eolead instance
2
3
Intégration au domaine Active Directory
4
Mot de passe de l'utilisateur Administrator pour le domaine ETB1.LAN : 
5
Using short domain name -- ETB1
6
Joined 'HORUS' to dns domain 'etb1.lan'
7
Mise à jour du mot de passe dans les fichiers de configuration
8
9
Synchronisation ldap
10
   [...]

Une fois cette opération réalisée, la synchronisation initiale entre l'annuaire OpenLDAP du module Horus et l'annuaire Active Directory est exécutée.

Celle-ci est plus ou moins longue et verbeuse selon que l'annuaire du module Horus est déjà peuplé ou non.

La synchronisation des annuaires via LSC ne permet pas la synchronisation des mots de passe.

Celle-ci fait l'objet d'une procédure dédiée qui peut être exécutée à l'instance :

1
run-parts: executing /usr/share/eole/posttemplate/05-eolead-pwd instance
2
Voulez-vous (re)synchroniser les mots de passe des utilisateurs ? [oui/non]
3
[oui] : 
4
Synchronisation en cours (1 mots de passe)...
5

Si l'annuaire contient beaucoup de comptes, cette opération peut durer plusieurs minutes.

Remarque

Dans le cadre d'une nouvelle installation, seul le mot de passe du compte admin est synchronisé.

Trucs & astuces

La commande diagnose permet de connaître l'état du service :

1
*** Serveur de fichiers
2
3
Test du fichier de configuration :
4
.                     Syntaxe => Ok
5
6
Partages :
7
.           Partage (SMB/TCP) => Ok
8
.           Partage (NMB/UDP) => Ok
9
.            Connexions samba => 0
10
11
.             Ticket kerberos => Ok
12
.         Synchronisation LSC => Ok

Synchronisation

Forcer la synchronisation manuelle des comptes depuis le maître :

# /usr/bin/lsc -f /etc/lsc -s all -c all -t 1

Changement de mot de passe

Forcer le changement de mot de passe d'un utilisateur (exemple avec l'utilisateur admin) depuis le maître :

# changepasswordeole.pl admin Eole123$

Si la commande échoue avec le message suivant, vérifier que le mot de passe proposé respecte la politique de sécurité mise en place sur le serveur AD :

Unable to modify unicodePwd for CN=user11,CN=Users,DC=domaine,DC=lan (0000052D: SvcErr: DSID-031A0FC0, problem 5003 (WILL_NOT_PERFORM), data 0)

Relancer le service samba-ad-dc

Le service samba-ad-dc est dans le conteneur addc, pour relancer le service :

# ssh addc "service samba-ad-dc restart"

Liste d'utilisateurs

Lister tous les utilisateurs depuis le maître :

# ssh addc "ldbsearch -H /var/lib/samba/private/sam.ldb -S '(objectclass=user)' cn | grep ^cn:"

Attributs utilisateur

Chercher un utilisateur depuis le maître :

# ssh addc "ldbsearch -H /var/lib/samba/private/sam.ldb -S cn=p.nom"

Journaux

Les journaux de l'outil LSC sont disponibles dans :

  • /var/log/lsc/ pour les synchronisations manuelles ;
  • /var/log/rsyslog/local/lsc/ pour les opérations réalisées par le démon.

Les journaux du service Active Directory sont disponibles sur le maître dans le répertoire /var/log/samba-ad-dc/.