Archives du mot-clé Jabber

Logo XMPP

Utili­ser Prosody avec une authen­ti­fi­ca­tion LDAP

Prosody est un serveur XMPP (Jabber) extrê­me­ment simple à mettre en place. En un tour de main, vous avez un serveur XMPP. Par contre, si on veut s’ap­puyer sur un annuaire LDAP pour l’au­then­ti­fi­ca­tion, c’est plus galère.

Voici ce que j’ai sur mon serveur :

Instal­la­tion des paquets

apt-get install lua-cyrussasl sasl2-bin

Confi­gu­ra­tion de saslau­thd

Dans /etc/default/saslauthd :

START=yes
MECHANISMS="ldap"

Dans /etc/saslauthd.conf :

ldap_servers: ldap://ldap.example.org
ldap_search_base: ou=users,dc=example,dc=org

Vous pouvez rajou­ter des éléments d’au­then­ti­fi­ca­tion dans ce fichier, comme ldap_bind_dn et ldap_bind_pw. Voir ce post de blog pour quelques détails en plus.

Dans /etc/sasl2/prosody.conf :

pwcheck_method: saslauthd
mech_list: PLAIN

À partir de là, on peut lancer le dæmon et tester :

service saslauthd start
testsaslauthd -u user -p secret

Confi­gu­ra­tion de prosody

Dans /etc/prosody/prosody.cfg.lua, ajou­ter :

authentication = "cyrus"
cyrus_service_name = "prosody"

Pour que l’uti­li­sa­teur prosody ait accès à la socket de saslauthd, on pren­dra soin de l’ajou­ter au groupe sasl :

gpasswd -a prosody sasl

Pour vous assu­rer que prosody ait accès à saslauthd, faites :

su prosody -s /bin/bash
/usr/sbin/testsaslauthd -u user -p secret

Et un petit coup de restart derrière :

service prosody restart

Enjoy ;-)

Logo XMPP sous licence Expat

Me soutenir sur Tipeee Me soutenir sur Liberapay

Instal­ler un serveur Jabberd2 sous Debian unstable

Cette page wiki est honteu­se­ment pompée sur http://doc.ubuntu-fr.org/jabberd2

A noter que le paquet jabberd2 n’est dispo­nible sous Debian qu’en unstable.

Si vous ne l’avez pas déjà fait, ajou­ter cette ligne à votre /etc/apt/sources.list

deb http://debian.mines.inpl-nancy.fr/debian/ unstable main contrib non-free

Le but de ce docu­ment et de propo­ser une façon simple et rapide d’ins­tal­ler un serveur jabberd2. Pour une confi­gu­ra­tion plus détaillée, il faut se réfé­rer à la docu­men­ta­tion offi­cielle de jabberd2 qui a servi à l’éla­bo­ra­tion de cette page.

Prérequis

Pour garder les infor­ma­tions liées aux utili­sa­teurs, vous devez avoir un serveur de base de donnée installé (postgre, mysql…).

Cette façon de procé­der doit marcher pour dapper et edgy (il y a de forte chance que ce soit toujours valable pour feisty).

Pour ajou­ter un utili­sa­teur au serveur, exécu­tez la commande suivante en tant que root :

# grou­padd jabber

# useradd -g jabber jabber

Choi­sis­sez ensuite un mot de passe pour ce compte à l’aide de la commande suivante :

# passwd jabber

Après avoir changé le mot de passe, nous devons créer un réper­toire dans lequel le proces­sus stockera ses jour­naux et ses pids.

Pour ce faire, exécu­tez les commandes suivantes :

# mkdir -p /usr/local/var/jabberd/pid/

# mkdir /usr/local/var/jabberd/log/

Une fois les réper­toires créés, chan­geons l’ap­par­te­nance des réper­toires de façon à ce que l’uti­li­sa­teur jabber puisse écrire dedans. Exécu­tez les commandes suivantes :

# chown -R jabber:jabber /usr/local/var/jabberd/

Instal­la­tion du package jabberd2

# apt-get update && apt-get install jabberd2

Vous pouvez égale­ment utili­ser Synap­tic.

Via phpmyad­min, créer un user jabberd2 et sa table jabberd2 et bien noter son mot de passe, il servira plus bas.

(pour instal­ler phpmyad­min et la base MYSql: {CODE()}# apt-get install mysql-server phpmyad­min{CODE}

Le script pour créer les tables :

CREATE DATABASE jabberd2;

USE jabberd2;

— c2s authen­ti­ca­tion/regis­tra­tion table

CREATE TABLE `authreg` (

`user­na­me` TEXT, KEY `user­na­me` (`user­na­me`(255)),

`realm` TINYTEXT, KEY `realm` (`realm`(255)),

`pass­word` TINYTEXT ) DEFAULT CHARSET=UTF8;

— Session mana­ger tables

— Active (seen) users

— Used by: core

CREATE TABLE `acti­ve` (

`col­lec­tion-owner` TEXT NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`time` INT ) DEFAULT CHARSET=UTF8;

— Logout times

— Used by: mod_iq_last

CREATE TABLE `logout` (

`col­lec­tion-owner` TEXT NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`time` INT ) DEFAULT CHARSET=UTF8;

— Roster items

— Used by: mod_roster

CREATE TABLE `ros­ter-items` (

`col­lec­tion-owner` TEXT NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`jid` TEXT,

`name` TEXT,

`to` TINYINT,

`from` TINYINT,

`ask` INT ) DEFAULT CHARSET=UTF8;

— Roster groups

— Used by: mod_roster

CREATE TABLE `ros­ter-groups` (

`col­lec­tion-owner` TEXT NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`jid` TEXT,

`group` TEXT ) DEFAULT CHARSET=UTF8;

— vCard (user profile infor­ma­tion)

— Used by: mod_iq_vcard

CREATE TABLE `vcard` (

`col­lec­tion-owner` VARCHAR(255) NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`fn` VARCHAR(255),

`nick­na­me` VARCHAR(255),

`url` VARCHAR(255),

`tel` VARCHAR(255),

`email` VARCHAR(255),

`jab­be­rid` VARCHAR(3071),

`mai­ler` VARCHAR(1023),

`tit­le` VARCHAR(255),

`role` VARCHAR(255),

`bday` VARCHAR(255), # Shouldn’t this be a DATE?

`tz` VARCHAR(7),

`n-fami­ly` VARCHAR(255),

`n-given` VARCHAR(255),

`n-midd­le` VARCHAR(255),

`n-prefix` VARCHAR(255),

`n-suffix` VARCHAR(255),

`adr-street` VARCHAR(255),

`adr-extadd` VARCHAR(255),

`adr-pobox` VARCHAR(15),

`adr-loca­li­ty` VARCHAR(255),

`adr-region` VARCHAR(255),

`adr-pcode` VARCHAR(31),

`adr-coun­try` VARCHAR(63),

`geo-lat` VARCHAR(255),

`geo-lon` VARCHAR(255),

`org-orgna­me` VARCHAR(255),

`org-orgu­nit` VARCHAR(255),

`agent-extval` VARCHAR(255),

`sort-string` VARCHAR(255),

`desc` TEXT,

`note` TEXT,

`uid` VARCHAR(255),

`photo-type` VARCHAR(127),

`photo-binval` TEXT,

`photo-extval` VARCHAR(255),

`logo-type` VARCHAR(127),

`logo-binval` TEXT,

`logo-extval` VARCHAR(255),

`sound-phone­tic` VARCHAR(255),

`sound-binval` TEXT,

`sound-extval` VARCHAR(255),

`key-type` VARCHAR(127),

`key-cred` TEXT,

`rev` VARCHAR(255)

) DEFAULT CHARSET=UTF8;

— Offline message queue

— Used by: mod_offline

CREATE TABLE `queue` (

`col­lec­tion-owner` TEXT NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`xml` MEDIUMTEXT ) DEFAULT CHARSET=UTF8;

— Private XML storage

— Used by: mod_iq_private

CREATE TABLE `pri­va­te` (

`col­lec­tion-owner` TEXT NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`ns` TEXT,

`xml` MEDIUMTEXT ) DEFAULT CHARSET=UTF8;

— Message Of The Day (MOTD) messages (announ­ce­ments)

— Used by: mod_announce

CREATE TABLE `motd-messa­ge` (

`col­lec­tion-owner` TEXT NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`xml` TEXT ) DEFAULT CHARSET=UTF8;

— Times of last MOTD message for each user

— Used by: mod_announce

CREATE TABLE `motd-times` (

`col­lec­tion-owner` TEXT NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`time` INT ) DEFAULT CHARSET=UTF8;

— User-publi­shed disco­very items

— Used by: mod_disco_publish

CREATE TABLE `disco-items` (

`col­lec­tion-owner` TEXT NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`jid` TEXT,

`name` TEXT,

`node` TEXT ) DEFAULT CHARSET=UTF8;

— Default privacy list

— Used by: mod_privacy

CREATE TABLE `pri­vacy-default` (

`col­lec­tion-owner` TEXT NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`default` text ) DEFAULT CHARSET=UTF8;

— Privacy lists

— Used by: mod_privacy

CREATE TABLE `pri­vacy-items` (

`col­lec­tion-owner` TEXT NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`list` TEXT,

`type` TEXT,

`value` TEXT,

`deny` TINYINT,

`order` INT,

`blo­ck` INT ) DEFAULT CHARSET=UTF8;

— Vaca­tion settings

— Used by: mod_vaca­tion

CREATE TABLE `vaca­tion-settings` (

`col­lec­tion-owner` TEXT NOT NULL, KEY(`col­lec­tion-owner`(255)),

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(`object-sequen­ce`),

`start` INT,

`end` INT,

`mes­sa­ge` TEXT ) DEFAULT CHARSET=UTF8;

— Users statuses

— Used by: mod_status

CREATE TABLE `sta­tus` (

`col­lec­tion-owner` TEXT NOT NULL,

`object-sequen­ce` BIGINT NOT NULL AUTO_INCREMENT, KEY(`object-sequen­ce`),

`sta­tus` TEXT NOT NULL,

`show` TEXT NOT NULL,

`last-login` INT DEFAULT ‘0’,

`last-logout` INT DEFAULT ‘0’,

`xml` TEXT);

Confi­gu­ra­tion

Le nom du serveur dans sm.xml et c2s.xml

Votre nom de serveur doit être rensei­gné à la fois dans /etc/jabberd2/sm.xml et dans /etc/jabberd2/c2s.xml.

Editez /etc/jabberd2/sm.xml :

# vi /etc/jabberd2/sm.xml

Rensei­gnez le champ id de la section sm (~ ligne 1) :

<!– Session mana­ger confi­gu­ra­tion –>

<sm>

<!– Our ID on the network. Users will have this as the domain part of

their JID. If you want your server to be acces­sible from other

Jabber servers, this ID must be resol­vable by DNS.s

(default: local­host) –>

<id>ma_machine.mon_domaine.com</id>

<!– Par exemple <id>marvin.asrall.iuta.univ-nancy2.fr</id> –>

Editez /etc/jabberd2/c2s.xml :

#vi /etc/jabberd2/c2s.xml

Rensei­gnez le champ id de la section local (~ ligne 63) :

<!– Local network confi­gu­ra­tion –>

<local>

<!– Who we iden­tify ourselves as. This should corres­pond to the

ID (host) that the session mana­ger thinks it is. You can

specify more than one to support virtual hosts, as long as you

have addi­tio­nal session mana­ger instances on the network to

handle those hosts. The realm attri­bute speci­fies the auth/reg

or SASL authen­ti­ca­tion realm for the host. If the attri­bute is

not speci­fied, the realm will be selec­ted by the SASL

mecha­nism, or will be the same as the ID itself. Be aware that

users are assi­gned to a realm, not a host, so two hosts in the

same realm will have the same users.

If no realm is speci­fied, it will be set to be the same as the

ID. –>

<id>ma_machine.mon_domaine.com</id>

Comme il est mentionné dans le fichier c2s.xml, le nom du serveur (qui est conca­téné à l’id jabber) doit pouvoir être résolu par DNS (ou via /etc/hosts) :!: EVITEZ local­host, une ID jabber est <nom d’uti­li­sa­teur>@<nom de serveur>, donc lorsqu’un client se connecte à votre serveur il doit avoir le bon nom de serveur et pas local­host :!:

Mysql

Éditez encore votre /etc/jabberd2/c2s.xml

<!– MySQL driver confi­gu­ra­tion –>

<mysql>

<!– Data­base server host and port –>

<host>local­host</host>

<port>3306</port>

<!– Data­base name –>

<dbname>jabberd2</dbname>

<!– Data­base user­name and pass­word –>

<user>jabberd2</user>

<pass>secret</pass>

Vous ne devez chan­ger le champ host que si votre base de données ne se trouve pas sur la même machine que le serveur jabberd2. Si vous n’uti­li­sez pas le port par défaut de mysSQL (3306), vous devez modi­fier le champ port.

Bien sûr le pass n’est pas « secret » mais corres­pond au mot de passe pour la base MySQL de votre user jabberd2 créé au début du tuto.

Jabberd2 est main­te­nant confi­guré. Il ne vous reste plus qu’à tester votre instal­la­tion.

Tests de l’ins­tal­la­tion

Le serveur jabberd2 étant lancé dès l’ins­tal­la­tion du paquet, il faut redé­mar­rer celui-ci afin de prendre en compte les étapes précé­dentes :

# /etc/init.d/jabberd2 restart

Ou

# service jabberd2 restart

Ensuite confi­gu­rez un client jabber (psi par exemple) depuis une machine du réseau local pour vous connec­ter à votre serveur jabberd2. Si ça ne marche pas, bonne chance ! Allez tout de même jetter un coup d’oeil dans les logs (/var/log/jabber/).

Si cette opéra­tion réus­sit et que vous voulez que votre serveur soit acces­sible depuis inter­net, recom­men­cez l’opé­ra­tion depuis une machine exté­rieure à votre réseau (ou un service live comme JWchat), si cela ne fonc­tionne pas veri­fiez vos fire­walls et que vous utili­sez un FQDN (essayez par exemple de resoudre votre DNS pas un des sites qui propose ce service)

Dans un autre post, je vous indique­rai comment instal­ler le compo­sant multi-user chat.

EDIT : Euh, non, en fait je n’ex­plique­rais pas comment instal­ler le multi-user chat, j’ai trop galéré quand je l’ai fait et de toute façon j’ai oublié comment le faire.

Me soutenir sur Tipeee Me soutenir sur Liberapay