installer_un_ldap_avec_mds_et_l_interface_mmc

debian ldap slapd mds mmc

Installer un LDAP avec MDS et l'interface MMC

MDS est l'acronyme pour Mandrake Directory Server. Malgré que ce soit prévu à la base pour une Mandrake, tous les paquets sont disponibles dans un repository pour Debian.
L'avantage de ce MDS c'est qu'il est basé sur slapd et fourni avec une interface Web MMC pour gérer facilement les utilisateurs et les groupes.

Facile, il suffit de faire appel à apt-get :

apt-get install slapd ldap-utils ldapvi

L'installation ne demande que le mot de passe root de l'Active Directory. Il est important pour MMC de configurer un peu plus de chose. Pour cela, relancez la configuraiton complète avec la commande suivante :

dpkg-reconfigure slapd

Répondre aux questions de cette façon :

Question Réponse Commentaire
Omit OpenLDAP server configuration? No
DNS domain name: home.int Le nom de domaine de votre Active Directory
Organization name: Home Le nom de votre “organisation” ou entreprise
Administrator password: *** Mot de passe de l'admin AD, très important.
Confirm password: ***
Database backend to use: 2 Réponse par défaut
Do you want the database to be removed when slapd is purged? No Réponse par défaut
Move old database? Yes Réponse par défaut
Allow LDAPv2 protocol? No Réponse par défaut

<note important>Attention, à la fin de la configuration, debconf déplace la base LDAP dans le répertoire /var/backups créant un répertoire unknown-2.4.31-1+nmu2.ldapdb. Si vous lancez plusieurs fois la commande dpkg-reconfigure, cette dernière plante car le répertoire /var/backups/unknown-2.4.31-1+nmu2.ldapdb existe déjà. Pensez donc à supprimer ce répertoire avant de relancer la commande dpkg-reconfigure.</note>

Le site de MDS donne directement les URLs pour les repository Debian à cette adresse : http://projects.mandriva.org/projects/mmc/wiki/MDS_Downloads#Debian
Nous allons donc prendre l'url pour Wheezy :

cat <<EOF >> /etc/apt/sources.list
# MDS/MMC For Wheezy
deb http://mds.mandriva.org/pub/mds/debian wheezy main
EOF

Lancez l'update les sources APT :

apt-get update

Puis installez les paquets mmc :

apt-get install mmc-agent mmc-web-base python-mmc-base

Pour faire fonctionner l'interface Web, ces paquets installent également Apache 2 et PHP.

MDS apporte un schéma pour SLAPD afin de créer le fameux Active Directory en rapport avec l'interface MMC. C'est pourquoi il faut déclarer le schéma de MMC dans SLAPD.
Depuis Debian Wheezy, la nouvelle version d'OpenLDAP utilise sa propre base pour stocker la configuration. Il vous suffit donc de lancer la commande suivante pour inclure le nouveau schéma :

# mmc-add-schema /usr/share/doc/mmc/contrib/base/mmc.schema /etc/ldap/schema/
Adding schema for inclusion: mmc... ok

Editez de le fichier /etc/mmc/plugins/base.ini et modifiez les lignes suivantes :

Paramètre Valeur Commentaire
ldapurl ldap://127.0.0.1:389 Valeur par défaut à changer si votre SLAPD n'écoute pas sur le localhost.
baseDN dc=home, dc=int Mettre votre nom de domaine paramétré dans SLAPD.
rootName cn=admin, %(baseDN)s Pas besoin de changer normalement, sauf si vous avez créer un user admin dédié à MMC.
password motdepasse Indiquez le mot de passe du compte admin configuré dans SLAPD. Plus bas une méthode pour l'encoder en base64.
defaultUserGroup Domain Users Optionnel, c'est le groupe par défaut d'un utilisateur. Il faudra le créer dès que possible.
defaultHomeDir /home Le répertoire où seront créés les home directory. Vous pouvez les régrouper dans un sous-répertoire, par exemple /home/ldap.

Si vous souhaitez encoder le mot de passe dans le fichier de configuration, vous pouvez lancer la commande suivante pour obtenir la version base64 :

# python -c 'print "**<VotreMotDePasse>**".encode("base64")'
Kio8Vm90cmVNb3REZVBhc3NlPioq

Puis, le renseigner dans le paramètre password du fichier /etc/mmc/plugins/base.ini en préfixant avec “{base64}” :

password = {base64}Kio8Vm90cmVNb3REZVBhc3NlPioq

<note>Si votre idée est de simplement tester LDAP, vous avez simplement les paramètres baseDN et password à renseigner dans ce fichier.</note>

Il faut également penser à créer le répertoire indiqué par le paramètre “destpath” qui concerne le répertoire dans lequel seront créés les backups. Par défaut il s'agit du répertoire /home/archives :

mkdir /home/archives

Il faut maintenant activier l'agent MMC pour qu'il puisse démarrer. Pour cela, modifiez le fichier /etc/default/mmc-agent et changer le paramètre ENABLE à yes :

# Defaults for mmc-agent initscript
# sourced by /etc/init.d/mmc-agent
# installed at /etc/default/mmc-agent by the maintainer scripts

#
# This is a POSIX shell fragment
#

ENABLE=yes

Vous pouvez maintenant démarrer MMC Agent :

/etc/init.d/mmc-agent start

Il suffit de copier la configuration Apache 2 puis de relancer le daemon HTTPD :

cp /etc/mmc/apache/mmc.conf /etc/apache2/conf.d/mmc.conf
/etc/init.d/apache2 restart

Cela va créer un alias “mmc” à votre configuration Apache2, vous pouvez donc accéder à l'interface via l'URL http://<serveur>/mmc. Voici l'écran de login :


Pour vous connecter, renseigner le compte “root” ainsi que votre mot de passe Administrateur de SLAPD.

La première chose à faire c'est de créer le groupe utilisateur par défaut. Si vous ne l'avez pas changé, il s'agit de “Domain Users”. Cliquez sur l'onglet “Groups” puis sur “Add”.
Renseignez “Domain Users” dans le champ “Group name” puis “Default User Group” pour le champ “Description”. Enfin validez en cliquant sur “Create” :


Vous pouvez maintenant créer des utilisateurs et configurer vos services pour utiliser l'authentification LDAP.

Avec l'installation d'Apache2, vous devriez avoir accès à la page HTML par défaut, le fameux “It Works!”.
Nous allons sécuriser cette simple page avec l'authentification HTTP en utilisant LDAP.

Tout d'abord, activons le module LDAP d'Apache :

a2enmod ldap
a2enmod authnz_ldap

Maintenant, il faut éditer la configuration de la page par défaut pour lui ajouter la configuration d'authentification. Par défaut, voici la déclaration Directory que vous devez avoir :

        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

Modifiez cette section de la manière suivante :

        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
				
                # LDAP authentication
                AuthBasicProvider ldap
                AuthType Basic
                AuthName "Restricted Area"
                AuthzLDAPAuthoritative off
                AuthLDAPURL ldap://localhost/ou=Users,dc=home,dc=int
                AuthLDAPGroupAttribute memberUid
                AuthLDAPGroupAttributeIsDN off
                Require ldap-group cn=http,ou=Groups,dc=home,dc=int
				
                Order allow,deny
                allow from all
        </Directory>

Quelques explications :

Attribut Commentaire
AuthBasicProvider On spécifie ldap pour utiliser le module mod_authz_ldap
AuthType On définit le type à Basic pour utiliser l'autentification de base via le module mod_auth_basic
AuthName C'est ce qui apparaîtra dans la boîte de dialogue d'identification
AuthzLDAPAuthoritative Permet de passer le relai à d'autre module d'autentification si celui-ci échoue
AuthLDAPURL Il s'agit de l'URL pour contacter le serveur LDAP en précisant l'OU (Oranization Unit) qui contient les Users de l'AD
AuthLDAPGroupAttribute Le nom de l'attribut d'un group qui possède la liste des membres de ce groupe
AuthLDAPGroupAttributeIsDN On indique de l'attribut AuthLDAPGroupAttribute n'est pas sous la forme d'un DN
Require ldap-group Filtre qui permet d'autoriser un utilisateur que si ce dernier fait parti du groupe http

Allez ensuite dans l'interface MMC et créez un groupe http, ainsi qu'un user “foobar” sans lui attribuer de groupe.

Redémarrez Apache pour prendre en compte l'ajout du module LDAP ainsi que la configuration d'autentification :

/etc/init.d/apache2 restart

Maintenant, quand j'accède à la page Web de mon serveur, un utilisateur et mot de passe est demandé :


Entrez le user “foobar” que vous avez créé avec son mot de passe. Cela ne devrait pas fonctionner : normal, le user “foobar” n'est pas dans le groupe “http”.
Retournez maintenant dans l'interface MMC et modifier “foobar” pour lui ajouter le groupe “http”.
Patientez quelques secondes, puis retournez sur la page web de votre serveur et retentez de vous connecter. Cette fois ça fonctionne.

Il est possible de faire des recherches dans le répertoire LDAP directement en ligne de commande pour effectuer des tests. Par exemple, si on cherche le user “foobar” :

root@vm03:~# ldapsearch -xLLL -h localhost -b "dc=home,dc=int" "uid=foobar"
dn: uid=foobar,ou=Users,dc=home,dc=int
shadowFlag: 134538308
shadowMin: -1
displayName: foobar foobar
uid: foobar
cn: foobar foobar
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: top
objectClass: person
loginShell: /bin/bash
homeDirectory: /home/foobar
uidNumber: 10002
shadowMax: 99999
gidNumber: 10001
gecos: foobar foobar
sn: foobar
shadowInactive: -1
givenName: foobar
shadowExpire: -1
shadowWarning: 7

Si on souhaite vérifier que le user “foobar” est bien dans le groupe “http”, on peut demander à chercher un objet de type “posixGroup”, qui se nomme “http”, et qui possède un attribut memberUid égale à “foobar”, ce qui donne :

root@vm03:~# ldapsearch -xLLL -h localhost -b "dc=home,dc=int" "(&(cn=http)(memberUid=foobar)(objectClass=posixGroup))"
dn: cn=http,ou=Groups,dc=home,dc=int
objectClass: posixGroup
objectClass: top
gidNumber: 10002
cn: http
memberUid: foobar

On obtient bien un résultat, on peut donc déduire qu'il exsite bien un user “wikinux” qui appartient au groupe “http”.

Les commandes slapcat et slapadd vont nous permettre de faire des sauvegardes et restaurations de notre AD.

La commande slapcat est bien pratique car elle permet simplement d'afficher le contenu de la base LDAP. Par défaut, l'affichage se fait sur la sortie standard. Dans le cas d'un backup, on pourra utiliser l'argument “-l” pour enregistrer dans un fichier.
La commande slapadd permet d'injecter un fichier LDIF, autrement dit un format comme slapcat, pour créer facilement des objets. Vous pouvez d'ailleurs vous en servir pour créer facilement et rapidement à partir d'un fichier des comptes utilisateurs.

Effectuez une sauvegarde de la base LDAP

root@vm03:~# slapcat -l ldap.bak

Il est possible de lire le fichier ldap.bak, vous pouvez même l'éditer pour y modifier des informations. Par exemple, si vous recherchez la ligne “dn: cn=http,ou=Groups,dc=home,dc=int” dans ce fichier, vous allez trouver les informations du groupe “http”. Dans ces informations, vous devriez voir la ligne “memberUid: foobar” indiquant que le user foobar appartient au groupe “http”. Supprimez cette ligne du fichier puis enregistrer.

Pour pouvoir restaurer, il ne faut pas que le daemon slapd soit lancé. Il faut donc arrêter le service LDAP, puis supprimer le contenu du répertoire /var/lib/ldap où est stocké la base LDAP.

root@vm03:~# /etc/init.d/slapd stop
[ ok ] Stopping OpenLDAP: slapd.
 
root@vm03:~# rm /var/lib/ldap/*
root@vm03:~# slapadd -l ldap.bak
_#################### 100.00% eta   none elapsed            none fast!
Closing DB...
 
root@vm03:~# chown openldap:openldap /var/lib/ldap/*
root@vm03:~# /etc/init.d/slapd start
[ ok ] Starting OpenLDAP: slapd.

La base est maintenant restaurée. Vous pouvez vous assurer que nous avons bien utilisé le fichier en vérifiant que le user foobar n'appartient plus au groupe “http”:

root@vm03:~# ldapsearch -xLLL -h localhost -b "dc=home,dc=int" "(&(cn=http)(memberUid=foobar)(objectClass=posixGroup))"

Pas de réponse, l'objet “cn=http,ou=Groups,dc=home,dc=int” n'a plus d'attribut “memberUid” à la valeur “foobar”, le user n'appartient donc plus au groupe.

Guide réalisé sur une Debian Wheezy 7.1 avec les versions suivantes des paquets :

  • slapd 2.4.31-1+nmu2
  • mmc 3.1.0-1
  • installer_un_ldap_avec_mds_et_l_interface_mmc.txt
  • Dernière modification: 2013/08/19 13:08
  • de admin