Project

General

Profile

Scribe+eole-ad+samba-ad-dc-conteneur

On part d'un Scribe sur lequel on installe et on configure le service samba-ad-dc dans un conteneur LXC puis on met en œuvre Eole-AD comme si on avait deux serveurs distincts.

Pour la maquette, j'ai choisi d'utiliser un serveur aca.scribe-2.6.2-instance-AvecImport afin de minimiser les problèmes liés à l'environnement réseau.

Mise en œuvre de samba-ad-dc dans un conteneur LXC

Pour mettre en place le conteneur, nous sommes repartis de l'étude précédente (Mise en œuvre du module Seth dans un conteneur LXC).

Toutes les étapes ont été intégrées afin d'obtenir une procédure automatisée (script joint).

wget https://dev-eole.ac-dijon.fr/attachments/download/2615/scribead.sh
chmod +x scribead.sh
./scribead.sh

Détails du script

Comme dans l'étude précédente, le conteneur doit posséder 2 IP :
  • une sur le bridge interne, actuellement forcée en 192.0.2.2
  • une sur le réseau "pédagogique" qui est à choisir dans la même plage d'adresses que celle du module Scribe (exemple : 192.168.0.27 en "aca")

NB : Comme cette dernière adresse est en mode bridge, le maître (module Scribe) ne la voit pas.

Le script exécute les étapes suivantes :
  • installation des paquets nécessaires sur le maître
  • génération d'un conteneur lxc "ubuntu"
  • configuration du conteneur (réseau, clés SSH)
  • pré-paramétrage des services (/etc/krb5.conf, /etc/nsswitch.conf, /etc/eole/samba4-vars.conf)
  • installation des libraires et des scripts (samba4.sh, validSambaPassword, ...), FIXME : cette partie effectue actuellement des copies de fichiers depuis le maître ainsi que des wget sur gitweb
  • configuration des sources.list EOLE et samba-4.7
  • démarrage du conteneur
  • installation des paquets samba-4.7
  • configuration de samba
  • initialisation du DC à l'aide des scripts du module Seth (samba_instance)

Résultat

Une fois le script exécuté, le service samba-ad-dc est totalement fonctionnel dans le conteneur.

ssh 192.0.2.2
service samba-ad-dc status

Il est possible de joindre une station au domaine.

  • Le DNS à utiliser est l'adresse qui a été choisie sur le réseau "pédagogique" (192.168.0.27 dans notre exemple, cette IP peut être retrouvée ssh sur le conteneur, IP eth0)
  • Le nom du domaine à utiliser correspond au "Nom DNS du réseau local" du module Scribe (ac-test.fr dans notre exemple)

Mise en place d'Eole-AD sur Scribe

Utilisation de la procédure habituelle : installation du paquet + configuration + enregistrement des certificats d'autorité.

Installation

apt-eole install eole-ad

Configuration

Tous les paramètres à renseigner peuvent être calculés.

Le dictionnaire joint pré-remplit tout ce qui doit l'être (FIXME : en l'état, cela écrase les "noms d'hôtes supplémentaires" ajoutés par les utilisateurs).

wget https://dev-eole.ac-dijon.fr/attachments/download/2613/27_eolead_container.xml -O /usr/share/eole/creole/dicos/27_eolead_container.xml

Il faut également ajouter des règles afin que le conteneur soit joignable même quand le pare-feu est en mode forteresse :

wget https://dev-eole.ac-dijon.fr/attachments/download/2616/90-lxc_rules -O /usr/share/eole/bastion/data/90-lxc_rules
chmod +x /usr/share/eole/bastion/data/90-lxc_rules
gen_config

Adresse du serveur NTP → 192.0.2.2

Copie de la clé secrète

root@scribe:~# scp 192.0.2.2:/var/lib/samba/private/tls/ca.pem /root/
root@scribe:~# keytool -import -trustcacerts -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -alias eole-ad -file /root/ca.pem

En une seule commande en passant par le filesystem du conteneur :

keytool -import -trustcacerts -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -alias eole-ad -file /var/lib/lxc/addc/rootfs/var/lib/samba/private/tls/ca.pem

Instanciation

instance

Synchronisation des mots de passe

Après instance (ie après synchronisation lsc), il est possible synchroniser les mots de passe de tous les utilisateurs à l'aide des commandes suivantes :

pdbedit -L -w | sed -e "/^.*$:/d" | awk -F: '{print "pdbedit -u " $1 " --set-nt-hash " $4}' > /var/lib/lxc/addc/rootfs/tmp/injectpwd 
ssh root@addc "bash /tmp/injectpwd" 

Débogage

Sur le maître

LDAPTLS_REQCERT=never ldapsearch -x -H ldaps://addc.ac-test.fr:636 -bDC=ac-test,DC=fr -DCN=admin,CN=Users,DC=ac-test,DC=fr -W

Problèmes rencontrés et pistes à creuser

Réussite de l'intégration au domaine à l'instance du Scribe

En général, l'intégration au domaine échoue lors de l'instance.
Nous pensons que cela est du à des règles de pare-feu qui empêchent l'accès au bridge interne.
Visiblement, il faut s'inspirer du template /usr/share/eole/bastion/data/90-lxc_rules (projet eole-common).
=> adaptation en fichier joint

NB : on peut également conserver l'idée du template, en injectant les lignes suivantes à l'original :

%set %%adresse_network_br0 = %%ad_address
%set %%adresse_netmask_br0 = '255.255.255.0'

Fonctionnement des services après redémarrage du serveur

Le démarrage du service lsc nécessite l'accès à l'annuaire Active Directory mais comme celui-ci est dans le conteneur, il démarre certainement trop tard...

NTP signé

Un serveur NTP "signé" est nécessaire pour que les stations d'un domaine AD acceptent de se mettre à l'heure.
La maquette actuelle ne propose pas ce service (contrairement à un module Seth).

27_eolead_container.xml View (1.71 KB) Joël Cuissinat, 02/26/2018 04:42 PM

scribead.sh View (6.87 KB) Joël Cuissinat, 03/01/2018 03:58 PM

90-lxc_rules (747 Bytes) Joël Cuissinat, 03/01/2018 05:26 PM