Installer un serveur Jabber (OpenFire) sur Linux (Debian), connecté à un Active Directory (Windows, donc)

(pour les lecteurs planet-libre, oui, openfire en java ça-pue-c-est-pas-libre ™ et active-directory-c-est-le-mal-incarné ™, néanmoins openfire est à des années lumières d’ejabberd, et un paysage avec un AD pour le parc Windows et néanmoins certains serveurs d’infrastructure et applicatifs sous Linux, ça existe et si vous êtes pas content, banissez-moi, merci)

Présentation du contexte

Le but de cet article de montrer à des noob’ de l’Active Directory (comme moi) comment connecter un outil sous Linux à un AD, sans trop connaître la structure d’un AD. Ca peut s’avérer pratique dans bien des cas d’outils très performants sous Linux mais pour lesquels on a besoin de « la base des utilisateurs Windows pour éviter la double déclaration des comptes et les mots de passes différents pour chaque appli ». Vous voyez le principe ?
L’autre but est de montrer un outil qui permet de s’y retrouver facilement dans un AD.

J’ai choisi OpenFire car mes dernières expériences avec ejabberd ne m’ont pas convaincues. OpenFire (anciennement WildFire) est super propre d’interface et est distribué par une entreprise, « Jive Software »
Connectable sans peine à des LDAP, dont AD (et OpenLDAP, Novell etc), c’est un bon cas d’école.
Pour les psychos, ça reste une application publiée sous licence GPL tout de même.

Sur le site de l’éditeur, ils proposent le serveur OpenFire packagé pour Redhat, Debian, Windows, Mac etc.
Je passe sur l’installation, (sous Debian dpkg -i openfire*deb)
Ensuite tout se passe par le web, à l’adresse http://votre.serveur:9090/

La conf AD, LE outil merveilleux pour ne pas s’y perdre

Quelques remarques :

  • Les étapes de configuration sont relativement simples, je zoome uniquement sur la partie AD
  • J’ai opté pour une base de données embarquées, « volatile »
  • A noter d’ailleurs que pour sauvegarder la conf de votre serveur OpenFire, vous n’aurez besoin – si je ne dis pas d’ânerie – que de /etc/openfire/ et de /var/lib/openfire/embedded-db/openfire.script qui est le script de création de base à la volée (au lancement du service). Attention, il contient des mots de passe sensibles en clair, comme l’admin AD…. de base, le package Debian est propre et prive les accès à openfire:openfire, chmod à base de 770/660

Bon, une fois l’installation un peu déroulée, arrivent les premières étapes de configuration de l’AD. Et là, je ne saurais trop vous recommander l’excellent outil de l’excellent sysinternals.com Microsoft nommé « Active Directory explorer« , qui, pour chaque noeud que vous visitez dans l’AD, vous donne sa syntaxe complète et pour chaque élement, les noms des attributs, pas leur libellé. Du bonheur en barre. Exemple, je localise mes utilisateurs :
openfire1

J’injecte ça dans la conf OpenFire :
openfire2

Ensuite, sur l’écran suivant qui consiste à indiquer quel sous-ensemble des utilisateurs pourra s’authentifier, j’utilise encore l' »AD Explorer », je repère quel champ caractérise mes utilisateurs réels des comptes systèmes et autres comptes qui ne sont pas des gens de la vraie vie :
openfire3

L’idée était ensuite dans mon cas de restreindre l’accès au service à un certain groupe d’utilisateurs, à savoir les « Correspondants Informatiques », j’ai modifié la valeur standard de filtre utilisateur pour refléter mes choix :
openfire4
Pour celà, vous repérerez que le champ « memberOf » indique tous les groupes d’appartenance des utilisateurs, bref, vous modifiez le filtre pour y ajouter un (memberOf=CN=blabla,blabla,DC=blabla,DC=com).
Ainsi, seuls les utilisateurs de ce groupe seront pris en compte lors de l’authentification par AD.
Enfin, le bas du tableau permet de « mapper » les champs de l’utilisateur aux infos personnelles visibles via Jabber. Faites votre marché, utilisez le bouton « test » en bas pour voir si ça récupère ce qu’il faut comme il faut.

Ensuite, dans mon cas, le tri des utilisateurs en groupe était le bon par défaut :
openfire5

Et, dernière étape, déclarer des comptes admin parmi les comptes AD existant. Mettez votre compte 🙂 car la modif à la main est moins simple (éditer le champ admin.authorizedJIDs dans les fichiers de conf de la base embarquée)

Voilà…
Une fois connecté à la console d’admin, allez voir la liste d’utilisateurs, vous devriez trouver uniquement le sous-ensemble sélectionné, « Correspondants Informatiques » dans mon cas.

Les clients

Vous pourrez utiliser pidgin ou le client de l’éditeur d’OpenFire, Spark – ou même sa version web pour éviter de déployer la moindre application. Ou tout autre client XMPP.
Ou faites votre choix là : http://en.wikipedia.org/wiki/List_of_XMPP_client_software

19 comments

  1. Excellent tutoriel merci a toi.

    Convertir les gens a une messagerie sous Jabber c’est toujours un pas de plus vers les logiciels libres!

  2. En tant que membre du planet libre, je dois dire que tu n’as pas à t’excuser, ton article est très intéressant et il a de loin sa place sur le planet.(contrairement à certain billet…et ça n’engage que moi).

    C’est le genre de démarche qui fait avancer les choses pour intégrer petit à petit le logiciel libre en entreprise.

    Je vais tester cela assez rapidement.

    PS/ Merci pour le ‘outil “Active Directory explorer » que je ne connaissais pas. Mon outil proprio dameware me remonte même pas ce genre d’info.

  3. Cool 🙂
    C’est car avec certains de mes articles à la limite du windows et du linux, j’ai déjà eu à modérer des commentaires casse-pied…. alors bon, j’ai tenté cela pour éviter les messages inutiles d’entrée de jeu.

    Bon à part ça, je n’arrive pas dans openfire à désactiver l’historique des « group chat » (==chat room==salons). Même quand on coche l’option « ne pas garder l’historique du salon sur le serveur », ce con donne les 25 dernières lignes, ce qui peut être gênant.
    J’ai trouvé des explications, mais ça marche pas….
    Avec les paramètres : xmpp.muc.history.maxNumber et xmpp.muc.history.type

  4. Bonjour,

    J’ai suivi votre tuto pour la configuration mais je me trouve face a un problème lors de la spécification de mon « administrateur » lors de la dernière étapte. J’ai beau essayer toutes les manière pour indiquer le compte administrateur mais rien n’y fait et il me dit qu’il ne trouve pas le compte. J’ai essayé tout type de syntax avec tout type de compte et je n’ai toujours rien trouvé. Alors je me tourne vers vous espérant trouver une piste me permettant de finir cette installation.

    Merci

  5. Hello,
    Ben… l’AD, c’est pas mon ami. Donc, à part tatonner, je vois pas bien. Et bien utiliser le « AD Explorer » pour être à peu près sûr de voir où sont les utilisateurs, l’admin etc…
    Enfin, être sûr qu’il n’y a pas de restriction d’accès à l’AD…
    Bonne chance et désolé de ne pouvoir faire mieux

  6. J’en ai bavé !!
    Bon je vais donner mon petit brin d’aventure pour l’installation d’openfire avec Active Directory !!
    Concernant la première page de configuration de connexion à AD :
    Base DN : DC=ad,DC=domaine,DC=fr|com ==> Attention a bient tout mettre sinon cela fausse tout le reste !!

    DN Administrateur : domaine\Administrateur (ou un compte administrateur)
    Voila pour cette partie.

    Ensuite pour le filtre utilisateur comme il est indiqué il faut repérer un groupe qui respecte les restrictions que l’ont veux donner. Par exemple le groupe toto :
    (objectClass=organizationalPerson)(memberOf=CN=toto,CN=Users,DC=ad,DC=domaine,DC=fr|com)
    Les options c’est vous qui les triez il suffit de faire le lien avec ADExplorer pour verifier la bonne syntaxe.

    Pour le filtre de groupe laissé par défaut cela suffit.
    Et pour fini le grand point d’interrogation qui ma posé problème

    La syntaxe toute bête c’est simplement le nom de l’administrateur en utilisant la syntaxe du login AD.

    Et voila c’est terminé !!! 🙂

  7. bonjour
    je veus savoir toutes les Ètapes ‡ suivre pour installer un serveur jabber sur Linux (Debian),si possible .merci

  8. bonjour, et un grand merci pour ce tuto!
    Cependant je n’arrive pas a connecter mes utilisateurs!!
    Pouvez vous me dire à quoi correspond CN=ad?
    Pour ma base dn j’ai rentré simplement CN=domaine,CN=com

    Merci

    1. Salut,
      De rien 🙂

      Euuh, j’aurais mis plutôt un truc comme ou=Users,dc=domaine,dc=com
      Au minimum
      Le mieux : voir avec AD explorer le nom du « dn » pointant à la racine de vos utilisateurs dans l’Active Directory

  9. Bonjour,

    J’ai une petite question sur OpenFire & Spark. Est-il possible d’avoir la liste des clients de l’AD directement en liste de users ?

    1. En fait les utilisateurs remontent dans la liste jabber la 1e fois qu’ils se signent. Il me semble. A moins ptet qd le compte utilisé pour acceder a l’ad a les droits de listet. Je ne sais plus. Desolé

  10. Merci pour ta réponse !
    Voilà mon retour d’expérience sur Openfire & AD :
    – il vaut mieux avoir des comptes en inetorgperson, plus facile à trier et surtout plus « bonne pratique » pour un annuaire LDAP.
    – ne pas hésiter à créer un groupe Openfire, y coller les users désirés dedans, et ajouter dans la config qu’on ne veut que les groupes = Openfire.

    Au final, vous n’avez qu’un seul groupe importé, Openfire, et que les users désirés ! Il ne reste plus qu’à dire qu’on « partage » ce groupe dans Openfire, lui donner un nom, normalement, tous les users y sont présents, et Spark aura directement le groupe créé avec les users.

    Si je ne suis pas clair, n’hésitez pas à me le dire, je me ferais un plaisir d’aider les personnes voulant procéder comme cela. J’aurais un retour plus sérieux à faire plus tard si vous le voulez, je vais le mettre en prod demain sur un machine dédiée, et avec cinquante users derrière sur un AD 2008R2.

  11. Mon serveur Openfire est en PROD, nous testons à une dizaine de personne pour le moment avant de le rendre officiel.
    J’ai un petite question à laquelle je n’ai pas eu de réponse : les logs sont activés pour garder un historique, mais entre la taille de la base MySQL qui va grimper, et les logs qui apparaissent à chaque connexion de Spark, je cherche comment affiner la gestion de l’historique. Comment faire ? Rien d’existant à ce jour ?

  12. Salut
    Aucune idée. S’il n’y a pas de réglage ni de plugin pour limiter.
    Par contre, un petit script SQL qui purge les entrées de + de tant d’ancienneté, ça doit pas être méchant à faire

  13. Ping : [Tuto] Installation Serveur Jabber (Openfire) sur Debian Lenny | WikiVince

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.