Ajout du support LDAP pour un serveur DHCP
Introduction et rappel
Le DHCP (Dynamique Host Configuration Control) est un service, qui sert
à configurer les paramètres réseaux des machines clientes à distance.
- Adresse IP
- Masque Réseau ( NetMask )
- Passerelle ( Gateway )
- Adresses des serveurs de Noms ( DNS )
Ainsi la machine cliente une fois son démarrage effectif obtient directement du serveur tous ses paramètres réseau.
Pré-requis :
Savoir installer et configurer un serveur DHCP.
L'objectif de cette documentation est d'inclure complétement la gestion
du DHCP dans notre Annuaire LDAP
Pour le moment le support LDAP dans un serveur DHCP se fait avec un patch que vous pourrez trouver ci dessous :
|
Versions utilisées
Compilation de DHCPD
Décompression de dhcp
Nous allons commencer par décompresser l'archive récupérée :
tar zxvf dhcp-3.0.1rc11.tar.gz
ou
gunzip dhcp-3.0.1rc11.tar.gz | tar -xvf -
Application du patch
Application du Patch de
Brian Masney
cd dhcp-3.0.2
cp dhcp-3.0.2-ldap-patch .
patch -p1 < dhcp-3.0.2-ldap-patch
La sortie de la commande patch donnera :
patching file README.ldap
patching file common/conflex.c
patching file common/print.c
patching file contrib/dhcp.schema
patching file contrib/dhcpd-conf-to-ldap.pl
patching file debian/changelog
patching file debian/control
patching file debian/copyright
patching file debian/dhcp3-ldap-ntelos/DEBIAN/control
patching file debian/dhcp3-ldap-ntelos/DEBIAN/md5sums
patching file debian/dhcp3-ldap-ntelos/DEBIAN/postinst
patching file debian/dhcp3-ldap-ntelos/DEBIAN/postrm
patching file debian/dhcp3-ldap-ntelos/DEBIAN/preinst
patching file debian/dhcp3-ldap-ntelos.files
patching file debian/dhcp3-ldap-ntelos.postinst
patching file debian/dhcp3-ldap-ntelos.postrm
patching file debian/dhcp3-ldap-ntelos.preinst
patching file debian/dhcp3-ldap-ntelos.substvars
patching file debian/dirs
patching file debian/files
patching file debian/rules
patching file doc/draft-ietf-dhc-ldap-schema-01.txt
patching file includes/dhcpd.h
patching file includes/site.h
patching file server/Makefile.dist
patching file server/class.c
patching file server/confpars.c
patching file server/dhcpd.c
patching file server/ldap.c
patching file server/mdb.c
patching file server/stables.c
patching file site.conf
|
Préparation de la compilation
Nous pouvons commencer l'installation de DHCP+LDAP
Pour compiler DHCP, nous devons en premier lieu exécuter la commande configure
./configure
Veuillez lire la documentation
( README.ldap ) fournie avec le patch de Brian Masney, elle
contient les informations sur les paramètres à ajouter ou mettre en place avant de lancer
la compilation.
Compilation et Installation du serveur DHCP+LDAP
La compilation se résume par les commandes suivantes :
make
make install
touch /var/state/dhcp/dhcpd.leases
Configuration de DHCP
Maintenant notre daemon DHCP a besoin d'être configuré, et il faut intégré les
parametres de notre DHCP dans notre serveur LDAP :
- Description du fichier /etc/dhcpd.conf
- Création d'un fichier LDIF contenant la configuration de notre serveur DHCP afin de l'insérer dans notre annuaire.
Définition du fichier /etc/dhcpd.conf
ldap-server "locahost";
ldap-port 389;
ldap-username "cn=dhcpadmin,ou=systeme,dc=lpv,dc=be";
ldap-password "motdepasse";
ldap-base-dn "ou=DHCP,ou=ressources,dc=lpv, dc=be";
ldap-method dynamic;
ldap-debug-file "/var/log/dhcp-ldap-startup.log";
On constate que ce fichier fait appel à un utilisateur
cn=dhcpadmin et à une branche
ou=DHCP.
En effet afin de conserver un annuaire "propre", nous avons créer une
branche DHCP qui contiendra la configuration de notre serveur DHCP, et
pour conserver un minimum de sécurité nous allons créer un utilisateur
cn=dhcpadmin, qui sera le seul à pouvoir lire, modifier et/ou supprimer le contenu de la branche
ou=DHCP
Fichier LDIF pour générer l'arbre nécessaire dans le serveur LDAP
Voici le fichier LDIF (
dhcp-ressources.ldif ) pour la création, de l'utilisateur
cn=dhcpadmin et de la branche
ou=DHCP
dn: ou=DHCP,ou=ressources, dc=lpv,dc=be
objectclass: organizationalunit
ou: DHCP
description: Serveurs DHCP
dn: cn=dhcpadmin,ou=systeme,dc=lpv,dc=be
objectclass: top
objectclass: person
cn: dhcpadmin
sn: dhcpadmin
userpassword: {SSHA}k0q01Uce4Btz4uVr/WsXFXvkhUpbwoZP
Afin d'ajouter dans l'annuaire le contenu du fichier ldif, il faut executer cette commande
$ ldapadd -x -D "cn=manager,dc=lpv,dc=be" -W -f dhcp-ressources.ldif
Pour créer un fichier LDIF contenant la configuration d'un serveur DHCP
déjà existant, il existe un outils livré avec le patch :
si vous n'avez pas de serveur DHCP actif, inspirez vous du fichier LDIF résultant pour construire votre propre fichier
L'outil est un script perl :
dhcp-ldap-3.0pl1/contrib/dhcpd-conf-to-ldap.pl
Je vous invite à éditer ce fichier pour faire correspondre l'arborescence de notre annuaire :
my $basedn = "ou=DHCP, ou=ressources, dc=lpv, dc=be";
Génération du fichier LDIF
dhcp-ldap-3.0pl1/contrib/dhcpd-conf-to-ldap.pl dhcpd.conf dhcpd-lpv.ldif
Rappel du fichier de configuration de notre serveur DHCP
# Exemple de configuration /etc/dhcpd.conf
# On donne le nom du domaine
option domain-name "lpv.be";
#On défini le masque réseau
option subnet-mask 255.255.255.0;
# Ici c'est le serveur de nom, le serveur privé,
# il faut aussi mettre le/les DNS donnés par votre provider.
option domain-name-servers 192.168.1.2 , 192.168.1.3;
ddns-update-style ad-hoc;
# Les clients auront cette adresse comme passerelle par défaut
option routers 192.168.1.1;
#Le bail a une durée de 86400 s par défaut, soit 24 h
# On peut configurer les clients pour qu'ils puissent demander une durée de bail spécifique
default-lease-time 86400;
#On le laisse avec un maximum de 7 jours
max-lease-time 604800;
# Définition du réseau : 192.168.1.0 et de son masque
subnet 192.168.1.0 netmask 255.255.255.0 {
#La plage d'adresses disponibles pour les clients
range 192.168.1.4 192.168.1.253;
# Et l'adresse utilisée pour la diffusion
option broadcast-address 192.168.1.255;
}
# Définition de notre machine PC-1
host PC-1 {
hardware ethernet 00:00:4C:71:46:68;
fixed-address 192.168.1.5;
}
Nous obtenons ainsi le fichier
dhcpd-lpv.ldif correspondant à cette configuration :
dn: cn=server, ou=DHCP,ou=ressources, dc=lpv, dc=be
objectClass: top
objectClass: dhcpServer
cn: server
dhcpServiceDN: cn=DHCP Config, ou=DHCP,ou=ressources, dc=lpv, dc=be
dn: cn=DHCP Config, ou=DHCP,ou=ressources, dc=lpv, dc=be
cn: DHCP Config
objectClass: top
objectClass: dhcpService
objectClass: dhcpOptions
dhcpPrimaryDN: cn=server, ou=DHCP,ou=ressources, dc=lpv, dc=be
dhcpStatements: ddns-update-style ad-hoc
dhcpStatements: default-lease-time 86400
dhcpStatements: max-lease-time 604800
dhcpOption: domain-name "lpv.be"
dhcpOption: subnet-mask 255.255.255.0
dhcpOption: domain-name-servers 192.168.1.2 , 192.168.1.3
dhcpOption: routers 192.168.1.1
dn: cn=192.168.1.0, cn=DHCP Config, ou=DHCP,ou=ressources, dc=lpv, dc=be
cn: 192.168.1.0
objectClass: top
objectClass: dhcpSubnet
objectClass: dhcpOptions
dhcpNetMask: 24
dhcpRange: 192.168.1.4 192.168.1.253
dhcpOption: broadcast-address 192.168.1.255
dn: cn=PC-1, cn=DHCP Config, ou=DHCP,ou=ressources, dc=lpv, dc=be
cn: PC-1
objectClass: top
objectClass: dhcpHost
dhcpHWAddress: ethernet 00:00:4C:71:46:68
dhcpStatements: fixed-address 192.168.1.5
Configuration du serveur LDAP pour la fonction DHCP
Nous avons maintenant besoin que notre serveur OpenLDAP, prennent en compte
les nouveaux attributs correspondant au DHCP ( extension du schema ),
mais également de mettre en place notre ACL sur la branche
ou=DHCP, et ajouter de nouveaux index correspondant a nos attributs DHCP
Pour cela procéder comme suit :
Il faut copier le fichier dhcp.schema dans le repertoire "OpenLDAP" contenant deja tous les schemas :
cp dhcp-ldap-3.0pl1/contrib/dhcp.schema /usr/local/OpenLDAP/etc/openldap/schema/
Extension du schema de l'annuaire :
Editer le fichier slapd.conf, pour y ajouter ceci :
#Les differents class d'objets et attributs.
include /usr/local/OpenLDAP/etc/openldap/schema/core.schema
include /usr/local/OpenLDAP/etc/openldap/schema/cosine.schema
include /usr/local/OpenLDAP/etc/openldap/schema/inetorgperson.schema
include /usr/local/OpenLDAP/etc/openldap/schema/nis.schema
include /usr/local/OpenLDAP/etc/openldap/schema/dhcp.schema
#Les fichier pid et args.
pidfile /var/run/slapd.pid
argsfile /var/run/slapd.args
#######################################################################
# ldbm database definitions
#######################################################################
#Definition de la structure du schema.
database ldbm
suffix "dc=lpv,dc=be"
rootdn "cn=manager,dc=lpv,dc=be"
#Le mot de passe obtenu avec slappasswd.
rootpw {SSHA}N4G7BbBFYfNZSiaBaEkWb7oV6cLReROZ # toto en crypté
#Ou sera stocke l'annuaire
directory /var/lib/openldap-data
#Creation des index
index cn,sn pres,eq,approx,sub
index uid,mail
index objectClass eq
index dhcpHWAddress eq
index dhcpClassData eq
#Les droits
defaultaccess read # { none | compare | search | read | write }
# L'administrateur a tous les droits.
access to *
by dn="cn=manager,ou=ressources,dc=lpv,dc=be" write
by * read
# Seul l'utilisateur peut changer son mot de passe et l'administrateur biensur.
access to attribute=userPassword
by dn="cn=manager,ou=ressources,dc=lpv,dc=be" write
by anonymous auth
by self write
by * none
# Seul l'administrateur et l'utilisateur dhcpadmin peuvent modifier les elements de la branche ou=DHCP
access to dn="ou=DHCP,ou=ressources,dc=lpv,dc=be"
by dn="cn=manager,ou=ressources,dc=lpv,dc=be" write
by dn="cn=dhcpadmin,ou=ressources,dc=lpv,dc=be" write
by * read
Redemarrage de notre serveur LDAP, pour la prise en compte des changements
/etc/init.d/slapd stop
/etc/init.d/slapd start
Il ne nous reste plus qu'a integrer notre fichier
dhcpd-lpv.ldif avec l'utilisateur
cn=dhcpadmin
Via la commande suivante :
ldapadd -x -D "cn=dhcpadmin,ou=ressources,dc=lpv,dc=be" -W -f dhcpd-lpv.ldif
Lancement du serveur dhcp
Et enfin lancer notre serveur dhcpd
Il faut exécuter le démon dhcpd .
Si vous n"avez pas de script pour le lancement automatique au démarrage de la machine, en voici un :
Creation du script : /etc/init.d/dhcpd-ldap :
#!/bin/sh
if [ ! -f /etc/dhcpd.conf ]; then
echo "/etc/dhcpd.conf does not exist! - Aborting..."
exit 1
fi
DHCPDPID=/var/run/dhcpd.pid
INTERFACES=eth0
case "$1" in
start)
echo -n "Starting DHCP server: "
start-stop-daemon --start --quiet --pidfile $DHCPDPID \
--exec /usr/sbin/dhcpd -- -q $INTERFACES
sleep 2
if [ -f "$DHCPDPID" ] && ps h `cat "$DHCPDPID"` >/dev/null; then
echo "dhcpd."
else
echo "dhcpd failed to start - check syslog for diagnostics."
fi
;;
stop)
echo -n "Stopping DHCP server: dhcpd-ldap"
start-stop-daemon --stop --quiet --pidfile $DHCPDPID
echo "."
;;
restart | force-reload)
$0 stop
sleep 2
$0 start
;;
*)
echo "Usage: /etc/init.d/dhcpd-ldap {start|stop|restart|force-reload}"
exit 1
esac
exit 0
Assurez-vous de demarrez votre DHCP une fois que votre annuaire soit actif
Auteur : Stéphane Purnelle
Licence : PDL
Ecrire un commentaire - (html non autorisé)
Il y a 0 commentaires pour cet article
Vous n'êtes pas connecté. Votre contribution n'apparaîtra qu'après avoir été validée par un administrateur du site.Vous pouvez vous vous enregistrer ICI |