Jabber Server mit UCS

Univention Corporate Server (Wiki)

Jabber Server mit UCS

Postby botner » Fri 10. Oct 2008, 14:08

Jabber Server mit UCS

Instant Messaging wird immer beliebter und die freien Jabber Server bieten hier viele Möglichkeiten (u.a. auch als Mittler zwischen den verschiedenen Protokollen). Im folgenden gibt es ein paar Tipps zu verschieden Jabber Servern und deren Anbindung an UCS.

Der Funktionsumfang der verschiedenen Server ist recht groß, aber zumindest die folgenden Punkte sollten (mehr oder weniger) abgedeckt werden.
  • LDAP Authentifizierung
  • SSL/Plaintext (Port 5223)
  • vCard (aus dem LDAP)
  • shared roster
  • Anbindung an andere IM Protokolle (im Folgendem Transports)
  • Chatrooms
Die benötigten Software Pakete können entweder direkt über UCS installiert, oder als Debian (etch) Quellcodepaket runtergeladen, auf dem UCS System übersetzt und mit den UCS üblichen Kommandos installiert werden (siehe auch http://forum.univention.de/viewtopic.php?f=20&t=553).


ejabberd - http://www.ejabberd.im


Software Pakete: erlang-base ejabberd subversion

In der Programmiersprache "Erlang" geschriebener Jabber Server mit relativ großer Community. Durch diverse Module bietet er eine recht große Funktionsvielfalt.

Konfiguriert wird der ejabberd über die Datei /etc/ejabberd/ejabberd.cfg. Der folgende Ausschnitt zeigt die wichtigsten Parameter HOSTNAME, LDAPBASE etc. müssen angepasst werden)

Allgemeine Einstellungen:
Code: Select all
...
%% Administrator Account des Jabber Servers auf den normalen Administrator mappen
{acl, admin, {user, "administrator", "HOSTNAME"}}.
...
%% Der Hostname des Jabber Servers
{hosts, ["HOSTNAME"]}.
...

Authentifizierung (LDAP):
Code: Select all
...
% Auskommentieren!
%{auth_method, internal}

%% LDAP Authentifizierung mit localhost
%% LDAPBASE ist Ausgabe von "ucr get ldap/base"
{auth_method, ldap}.
{ldap_servers, ["localhost"]}.     % List of LDAP servers
{ldap_uidattr, "uid"}.             % LDAP attribute that holds user ID
{ldap_base, "cn=users,LDAPBASE"}.  % Search base of LDAP directory
...

vCard (LDAP):
Code: Select all
%% Used modules:
{modules,
[
  %% Um die vcard an den LDAP Server zu binden
  %% Weitere Felder können hinzugenommen werden.
  {mod_vcard_ldap, [
    {ldap_servers, ["localhost"]},
    {ldap_rootdn, ""},
    {ldap_password, ""},
    {ldap_base, "cn=users,LDAPBASE"},
    {ldap_uidattr, "uid"},
    {ldap_filter, ""},
    {ldap_vcard_map, [
      {"NICKNAME", "%u", []},
      {"FN", "%s", ["cn"]},
      {"EMAIL", "%s", ["mailPrimaryAddress"]},
      {"DESC", "%s", ["description"]}
    ]},
    {ldap_search_fields, [
      {"User", "%u"},
      {"Name", "givenName"},
      {"Family Name", "sn"},
      {"Email", "mail"}
    ]},

    {ldap_search_reported, [
      {"Full Name", "FN"},
      {"Nickname", "NICKNAME"},
      {"Description", "DESC"}
    ]}
  ]},
  ...
  %% Das mod_vcard Modul sollte auskommentiert werden
  %{mod_vcard,      []},
  ...
]}.

Was noch fehlt, ist die Anbindung an andere IM Protokolle wie AIM, ICQ, also die Transports. Leider kann das der ejabberd nicht von Hause aus, die entsprechenden HowTo's gibt es hier (im Prinzip wird ein zusätzlicher Server gestartet, über den dann der entsprechende Transport läuft):
"Shared Roster", verteilte, automatische Kontaktlisten für Jabber Benutzer, funktionieren nicht richtig bei der Anbindung an die LDAP Datenbank. Es gibt aber ein weiteres Modul "mod_ctlextra" (http://www.ejabberd.im/mod_ctlextra), mit dessen Hilfe man zumindest jeden Account mit jedem bekannt machen kann (push-alltoall).

Folgendes ist zu tun:
Code: Select all
-> cd /opt
-> svn co https://svn.process-one.net/ejabberd-modules
-> cd /opt/ejabberd-modules/mod_ctlextra/trunk
-> ./build.sh
-> cp ebin/mod_ctlextra.beam /usr/lib/erlang/lib/ejabberd-1.1.2/ebin

Nun kann man das Module "mod_ctlextra" in der Konfigurationsdatei aktivieren.
Code: Select all
% Used modules:
{modules, [
  ...
  {mod_ctlextra,   []}, % !!!
  ...
  {mod_version,    []}
]}.

Nach einem Neustart des jabber Servers
Code: Select all
-> /etc/init.d/ejabberd restart

kennt das ejabberd Kommandozeilenprogramm "ejabberdctl" zusätzliche Befehle
Code: Select all
% alle Accounts werden allen Accounts in der Gruppe everybody
% bekannt gemacht
-> ejabberdctl push-alltoall JABBERSERVER everybody

% Alle Authorisierungen löschen
-> ejabberdctl rosteritem-purge  -remote *.@JABBERSERVER -subs both

% user2 mit "nick" in den Roster Gruppe "group" von user1 mit Subscription Typ "both"
-> ejabberdctl add-rosteritem user1 JABBERSERVER user2 JABBERSERVER nick group both
...

Mit diesen Kommandos sind die "Shared Roster" relativ schnell zusammengebaut.

Noch ein Hinweis zur Konfigurationsdatei des ejabberd. Leider ist die Syntax etwas kompliziert und die Fehlermeldungen bei falscher Syntax nicht sehr aussagekräftig. Man sollte also auf jeden Punkt und jedes Komma achten.
Code: Select all
{aaa, bbb, [
    {auth_method, anonymous},             % hier muss ein Komma stehen
    {allow_multiple_connections, false},  % hier muss ein Komma stehen
    {anonymous_protocol, sasl_anon}       % hier darf kein Komma stehen
    ]
}.                                        % hier muss ein Punkt stehen




jabberd1.4 - http://jabberd.org/


Software Pakete: jabber jabber-aim jabber-irc jabber-jit jabber-jud jabber-muc jabber-yahoo

Diesen schon etwas älteren Jabber Server gibt es ebenfalls als Debian Paket. Die Entwicklung ist etwas ins Stocken geraten, aber der Server läuft stabil und hat (fast) alle notwendigen Features.

Leider kann er sich aber nicht direkt an das LDAP binden. Alle Informationen (Authentifizierung, Roster, vCard) stehen in XML Dateien im Verzeichnis /var/lib/jabber/JABBERHOST/USER.xml. Diese Dateien können aber durch ein Skript, das sich aus der LDAP Datenbank bedient, für jeden Benutzer erzeugt werden. Die XML Datei sieht wie folgt aus:

Code: Select all
<xdb>
  <!-- Account Informationen -->
  <crypt xdbns="jabber:iq:auth:crypt" xmlns="jabber:iq:auth:crypt">crypt_hash</crypt>
  <query xdbns="jabber:iq:register" xmlns="jabber:iq:register">
    <username>name_a</username>
    <x stamp="20070615T09:52:17" xmlns="jabber:x:delay">registered</x>
  </query>
  <!-- Roster Liste mit 2 Subscriptions -->
  <query xdbns="jabber:iq:roster" xmlns="jabber:iq:roster">
    <item name="rostergroup1" jid="name_b@jabber.domain.de" subscription="both">
      <group>b</group>
    </item>
    <item name="rostergroup2" jid="name_c@jabber.domain.de" subscription="both">
      <group>c</group>
    </item>
  </query>
  <!-- vCard Infos -->
  <vCard prodid="-//HandGen//NONSGML vGen v1.0//EN" version="2.0" xdbns="vcard-temp" xmlns="vcard-temp">
    <EMAIL>
      <USERID>name_a@b.c</USERID>
    </EMAIL>
    <FN>Name_a Nachname_a</FN>
    <NICKNAME>b</NICKNAME>
    <ORG>
      <ORGUNIT>Home</ORGUNIT>
    </ORG>
    <TEL>
      <NUMBER>34233</NUMBER>
    </TEL>
  </vCard>
</xdb>


Den Server selbst konfiguriert man über die Datei /etc/jabber/jabber.xml, die Transports (zu anderen IM Protokollen) in den Dateien /etc/jabber/jabber-*.xml bzw. /etc/default/jabber-*, wo sie aktiviert werden können.

Die wichtigsten Einstellungen in der Jabber Server Konfigurationsdateien /etc/jabber/jabber.xml sind folgende:

Hostname:
Code: Select all
...
<!-- JABBERHOSTNAME - FQDN des Jabber Servers-->
<host><jabberd:cmdline flag="h">JABBERHOSTNAME</jabberd:cmdline></host>
...

Administrator:
Code: Select all
<!-- ADMIN JID - die Jabber ID des Administrators-->
...
<admin><read>ADMIN JID</read><write>ADMIN JID</write></admin>
...

Passwort:
Code: Select all
..
<!-- je nach Typ des Passworthash ... ->
<mod_auth_crypt>
    <hash>crypt</hash>
</mod_auth_crypt>
...
<mod_auth_crypt>./jsm/jsm.so</mod_auth_crypt>
...

Service/Transports:
Code: Select all
...
<!-- Services/Transports, die angeboten werden
<browse>
    ...
    <service type="msn" jid="msn.jabber.DOMAIN" name="MSN Link">
        <ns>jabber:iq:gateway</ns>
        <ns>jabber:iq:register</ns>
    </service>
    ...
</browse>
...
<!-- die Services/Transport Konfiguration (mit den Daten aus /etc/jabber/jabber-*.xml)-->
...
<service id="muclinker.jabber.DOMAIN">
    <host>conference.jabber.DOMAIN</host>
    <accept>
        <ip>127.0.0.1</ip>
        <port>31518</port>
        <secret>secret</secret>
    </accept>
</service>
<service id="aim.jabber.DOMAIN">
...

SSL:
Code: Select all
<!-- SSL Konfiguration -->
<service id="c2s">
    ...
    <pthcsock xmlns='jabber:config:pth-csock'>
        ...
        <ssl port="5223">194.95.183.244</ssl>
    ...
</service>
...
<io>
    ...
    <ssl>
        <key ip='194.95.183.244'>/etc/jabber/jabber.pem</key>
    </ssl>
    ...
</io>
...

Nach der Konfiguration des Jabber-Hosts, der Authentifizierung, der Transports, von SSL etc. kann der Server (inklusive aller aktivierten Transports) über
Code: Select all
/etc/init.d/jabber start|stop

gestartet/gestoppt werden.
User avatar
botner
Univention Entwicklung
 
Posts: 64
Joined: Wed 27. Aug 2008, 12:05
Location: Bremen

Re: Jabber Server mit UCS

Postby elbim » Tue 15. Feb 2011, 11:10

Gibt es inzwischen fertige Pakete für ejabberd im Univention Repository oder müssen diese nach wie vor von Hand gebaut werden?
User avatar
elbim
 
Posts: 20
Joined: Sat 12. Apr 2008, 06:58

Re: Jabber Server mit UCS

Postby Meybohm » Mon 21. Feb 2011, 14:45

Hallo,

ejabberd wurde bisher nicht in die UCS-Repositorys aufgenommen.

Mit freundlichen Grüßen
Janis Meybohm
User avatar
Meybohm
Univention Support
 
Posts: 1085
Joined: Fri 22. Jul 2005, 10:42
Location: Bremen

Re: Jabber Server mit UCS

Postby mirabilos » Thu 25. Aug 2011, 12:35

Wir haben ejabberd 2.1.5-2~bpo50+1 mit ejabberd-mod-shared-roster-ldap 0.5.3-1 erfolgreich auf Debian Lenny gegen ein UCS laufen, mit Photos (im LDAP) und geteilten Gruppen (mitarbeiter-bonn/berlin, freelancer, …):

Code: Select all
--- /usr/share/ejabberd/ejabberd.cfg   2010-10-14 14:22:08.000000000 +0200
+++ /etc/ejabberd/ejabberd.cfg   2011-05-06 10:51:14.000000000 +0200
@@ -279,7 +280,7 @@
%% If you want to use a different method,
%% comment this line and enable the correct ones.
%%
-{auth_method, internal}.
+%%{auth_method, internal}.

%%
%% Authentication using external script
@@ -303,17 +304,17 @@
%%
%% Authentication using LDAP
%%
-%%{auth_method, ldap}.
+{auth_method, ldap}.
%%
%% List of LDAP servers:
-%%{ldap_servers, ["localhost"]}.
+{ldap_servers, ["localhost"]}.
%%
%% Encryption of connection to LDAP servers (LDAPS):
-%%{ldap_encrypt, none}.
+{ldap_encrypt, none}.
%%{ldap_encrypt, tls}.
%%
%% Port connect to LDAP server:
-%%{ldap_port, 389}.
+{ldap_port, 389}.
%%{ldap_port, 636}.
%%
%% LDAP manager:
@@ -324,12 +325,15 @@
%%
%% Search base of LDAP directory:
%%{ldap_base, "dc=example,dc=com"}.
+{ldap_base, "cn=users,「basedn」"}.
%%
%% LDAP attribute that holds user ID:
%%{ldap_uids, [{"mail", "%u@mail.example.org"}]}.
+{ldap_uids, [{"uid", "%u"}]}.
%%
%% LDAP filter:
%%{ldap_filter, "(objectClass=shadowAccount)"}.
+{ldap_filter, "(isJabberAccount=1)"}.

%%
%% Anonymous login support:
@@ -423,6 +427,7 @@
%%
%%{acl, admin, {user, "aleksey", "localhost"}}.
%%{acl, admin, {user, "ermine", "example.org"}}.
+{acl, admin, {user, "「myuid」"}}.

%%
%% Blocked users
@@ -618,9 +637,49 @@
   {mod_roster,   []},
   %%{mod_service_log,[]},
   %%{mod_shared_roster,[]},
+  {mod_shared_roster_ldap, [
+        {ldap_rfilter, "(&(objectClass=posixGroup)(|(cn=freelancer)(cn=mitarbeiter-berlin)(cn=systemaccount)(cn=mitarbeiter-bonn)))"},
+        {ldap_ufilter, "(&(objectClass=inetOrgPerson)(uid=%u))"},
+        {ldap_gfilter, "(&(objectClass=posixGroup)(cn=%g))"},
+        {ldap_filter, ""},
+        {ldap_groupdesc, "description"},
+        {ldap_memberattr, "uniqueMember"},
+        {ldap_useruid, "uid"},
+        {ldap_memberattr_format, "uid=%u,cn=users,「basedn」"},
+        {ldap_base, "「basedn」"}
+       ]},
   {mod_stats,    []},
   {mod_time,     []},
   {mod_vcard,    []},
+  {mod_vcard_ldap, [
+        {ldap_vcard_map, [
+         {"NICKNAME", "%s", ["uid"]},
+         {"FN", "%s %s", ["givenName", "sn"]},
+         {"LAST", "%s", ["sn"]},
+         {"FIRST", "%s", ["givenName"]},
+         {"ORGNAME", "%s", ["o"]},
+         {"LOCALITY", "%s", ["l"]},
+         {"STREET", "%s", ["street"]},
+         {"PCODE", "%s", ["postalCode"]},
+         {"DESC", "%s", ["description"]},
+         {"TEL", "%s", ["telephoneNumber"]},
+         {"EMAIL", "%s", ["mailPrimaryAddress"]},
+         {"BDAY", "%s", ["univentionBirthday"]},
+         {"PHOTO", "%s", ["jpegPhoto"]}
+          ]},
+        {ldap_search_fields, [
+         {"User", "%u"},
+         {"Name", "givenName"},
+         {"Family Name", "sn"},
+         {"Email", "mail"},
+         {"Birthday", "univentionBirthday"}
+          ]},
+        {ldap_search_reported, [
+         {"Full Name", "FN"},
+         {"Nickname", "NICKNAME"},
+         {"Birthday", "BDAY"}
+          ]}
+       ]},
   {mod_version,  []}
  ]}.



„basedn“ ersetzen Sie natürlich entsprechend, und „myuid“ ist die Unix-UserID (erstes Feld in „getent passwd“),
da kann man natürlich mehrere von haben, als Admin eintragen.

Hoffe das hilft!
User avatar
mirabilos
 
Posts: 32
Joined: Mon 26. Jan 2009, 10:58

Re: Jabber Server mit UCS

Postby ahrnke » Wed 4. Dec 2013, 11:51

Hallo,

aus aktuellem Anlass hole ich diesen Thread noch mal nach oben.

Seit gestern gibt es im App Center ein Integrationspaket für einen XMPP (Jabber) Server.
Unsere zentrale Produktseite dazu ist PLUCS.

Basis der Integration ist ejabberd in derselben Version wie er auch aus dem unmaintained Repository installierbar wäre. Wir haben nach mod_shared_roster_ldap dazugepackt und die Integration über notwendige Schemaerweiterungen, extended Attributes und elementare UCR-Variablen vervollständigt.

Wer schon mal einen ejabberd installiert hat, dürfte sich schnell zurechtfinden. Unsere Dokumentation ist noch in Arbeit und wird in Abhängigkeit der verfügbaren Zeit demnächst auf der Produktseite verlinkt.

Fragen, Anregungen etc. am besten über das App Center / Apps Forum.

Viele Grüße,
Dirk Ahrnke
User avatar
ahrnke
it25 GmbH
 
Posts: 425
Joined: Sat 29. Oct 2005, 09:50


Return to UCS

Who is online

Users browsing this forum: No registered users and 1 guest

cron