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.
Installation de slapd
Facile, il suffit de faire appel à apt-get :
apt-get install slapd ldap-utils ldapvi
Configuration de SLAPD
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>
Installation de MDS (Mandrake Directory Server)
Ajout du repository de MDS
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
Installation de MMC
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.
Inclure le schéma MMC dans SLAPD
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
Configuration du plugins MMC Base
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
Activer MMC Agent
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
Démarrer MMC Agent
Vous pouvez maintenant démarrer MMC Agent :
/etc/init.d/mmc-agent start
Configurer MMC Web Interface
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.
Exemple d'authentification HTTP via 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.
LDAPSearch
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”.
Sauvegarde et restauration
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.
Versions utilisées
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