Ejabberd: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
KKeine Bearbeitungszusammenfassung
K Verschiebung community -> extra
 
(35 dazwischenliegende Versionen von 12 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{titel|ejabberd}}{{unvollständig}}{{achtung|Derzeit scheint es Probleme mit dem ejabberd-Paket bzw. dem Erlang-Paket zu geben. Dies betrifft auch die Transport-Funktionalität, die daher hier zwar beschrieben wird, aber nicht getestet werden konnte. Siehe dazu [http://bugs.archlinux.org/task/14483 Bug-Eintrag #14483]
{{veraltet}}
Dieser Artikel ist anhand einer bereits installierten, nicht aktualisierten Version (ejabberd 2.0.4-1, erlang R12B-2) erstellt worden}}{{righttoc}}
{{SEITENTITEL:ejabberd}}{{righttoc}}XMPP ist eine von der IETF standardisierte Sammlung diverser XML-basierender Netzwerkprotokolle, die ein erweiterbares Messaging- und Anwesenheitsprotokoll darstellen.


ejabberd ist ein in ''Erlang'' geschriebener, erweiterbarer ''Jabber''-Server. Jabber ist ein offenes, auf ''XMPP'' basierendes Instant-Messaging-Protokoll. XMPP ist ein von der ''IETF'' standardisiertes, auf XML basierendes Messaging- und Anwesenheits-Protokoll.
Anders als die meisten anderen Messaging-Dienste ist XMPP dezentral aufgebaut. Die nötige Server-Software sowie das Protokoll um einen XMPP-Server zu betreiben sind ebenfalls frei verfügbar. So steht jedem Anwender die Möglichkeit offen, selbst einen XMPP-Server aufzusetzen.


Anders als die meisten anderen Messaging-Dienste ist Jabber dezentral aufgebaut. Die nötige Server-Software sowie das Protokoll um einen Jabber-Server zu betreiben sind ebenfalls frei verfügbar. So steht jedem Anwender die Möglichkeit offen, selbst einen Jabber-Server aufzusetzen.
XMPP eignet sich daher nicht nur, um großen, öffentlichen Nutzergruppen eine Möglichkeit der Kommunikation zu bieten, sondern auch, um im kleinen Rahmen schnell und einfach, und ohne große Hürden (XMPP-Clients sind für alle gängigen Architekturen und Systeme verfügbar) eine Kommunikationsmöglichkeit bereitzustellen.


Jabber eignet sich daher nicht nur, um großen, öffentlichen Nutzergruppen eine Möglichkeit der Kommunikation zu bieten, sondern auch, um im kleinen Rahmen schnell und einfach, und ohne große Hürden (Jabber-Clients sind für alle gängigen Architekturen und Systeme verfügbar) eine Kommunikationsmöglichkeit bereitzustellen.
{{installation
|repo=extra
|paket=ejabberd}}


== Installation ==
Nach der Installation sollte der Service noch mittels {{ic|systemctl enable ejabberd}} für den automatischen Start markiert werden. Allerdings sollte man vor dem ersten Start noch einiges anpassen und konfigurieren, und das System ein mal in einem Live-Modus testen.
ejabberd ist im „community“-Repository verfügbar, und kann aus diesem mittels [[Pacman]] installiert werden.
 
pacman -Sy ejabberd
 
Nach der Installation muss der Jabber-[[Daemon]] noch in das DAEMONS-Array in der [[rc.conf]] eingetragen werden. Allerdings sollte man vor dem ersten Start noch einiges anpassen und konfigurieren, und das System ein mal in einem Live-Modus testen.


== Erster Start ==
== Erster Start ==
Vor der Inbetriebnahme des Jabber-Servers sollte dieser konfiguriert werden. Alle Einstellungen werden in der Datei /etc/ejabberd/ejabberd.cfg“ vorgenommen. Änderungen an dieser Datei bedürfen eines Neustarts des [[Daemons]].
Vor der Inbetriebnahme des XMPP-Servers sollte dieser konfiguriert werden. Alle Einstellungen werden in der Datei {{ic|/etc/ejabberd/ejabberd.cfg}} vorgenommen. Änderungen an dieser Datei bedürfen eines Neustarts des Services.


=== Aufbau der Datei ===
=== Aufbau der Datei ===
[[Bild:Ejabberd_vi_config.png|thumb|[[vi(m)|vi]] zeigt die Konfigurationsdatei an, Abschnitt „MODULES“]]
[[Bild:Ejabberd_vi_config.png|thumb|[[vi(m)|vi]] zeigt die Konfigurationsdatei an, Abschnitt {{ic|MODULES}}]]
Die Datei hat eine für viele User vielleicht etwas ungewöhnliche Syntax.
Die Datei hat eine für viele User vielleicht etwas ungewöhnliche Syntax.


Zeile 46: Zeile 43:
  ]}.
  ]}.


In der ejabberd-Konfigurationsdatei ist vor allem die letzte Form stark vertreten. In der Konfigurationsdatei werden Kommentare mit %%oder %%%versehen, was hier aber ignoriert werden kann.
In der ejabberd-Konfigurationsdatei ist vor allem die letzte Form stark vertreten. In der Konfigurationsdatei werden Kommentare mit {{ic|%%}} oder {{ic|%%%}} versehen, was hier aber ignoriert werden kann.


Die Datei ist intern durch ausführliche Kommentierung in verschiedene Abschnitte unterteilt und gut dokumentiert.
Die Datei ist intern durch ausführliche Kommentierung in verschiedene Abschnitte unterteilt und gut dokumentiert.


== Konfiguration ==
== Konfiguration ==
Vor dem ersten Start von ejabberd müssen noch einige Dinge angepasst werden. Zum Beispiel wurde noch kein Administrations-User angelegt, und der Hostname wurde zudem auch noch nicht definiert. Es wird hier nur die Grundkonfiguration mit nur einem einzigen Server (in der Jabber-Terminologie „Node“) beschrieben. Dinge, auf die nicht eingegangen wird, können so belassen werden.
Vor dem ersten Start von ejabberd müssen noch einige Dinge angepasst werden. Zum Beispiel wurde noch kein Administrations-User angelegt, und der Hostname wurde zudem auch noch nicht definiert. Es wird hier nur die Grundkonfiguration mit nur einem einzigen Server (in der XMPP-Terminologie {{ic|Node}}) beschrieben. Dinge, auf die nicht eingegangen wird, können so belassen werden.


=== Hostname ===
=== Hostname ===
ejabberd ist in der Lage, mehrere Hostnamen anzubieten. Allerdings muss der Rechner, auf dem ejabberd läuft, per DNS über den Hostnamen erreichbar sein, damit man diesen auch zum Anmelden nutzen kann.
ejabberd ist in der Lage, mehrere Hostnamen anzubieten. Allerdings muss der Rechner, auf dem ejabberd läuft, per DNS über den Hostnamen erreichbar sein, damit man diesen auch zum Anmelden nutzen kann.


In kleineren Umgebungen, die Jabber ausschließlich im LAN anbieten, ist es ausreichend, den LAN-Hostnamen zu verwenden. Sobald der Server aber auch von außen erreichbar sein soll, ist es ratsam, einen vollständigen Domain-Namen zu verwenden.
In kleineren Umgebungen, die XMPP ausschließlich im LAN anbieten, ist es ausreichend, den LAN-Hostnamen zu verwenden. Sobald der Server aber auch von außen erreichbar sein soll, ist es ratsam, einen vollständigen Domain-Namen zu verwenden.


Die Hostnamen, mittels derer man sich am Jabber-Server anmelden kann werden im Abschnitt „SERVED HOSTNAMES“ in der Konfigurationsdatei definiert.
Die Hostnamen, mittels derer man sich am XMPP-Server anmelden kann werden im Abschnitt {{ic|SERVED HOSTNAMES}} in der Konfigurationsdatei definiert.


  {hosts, ["jabber", "jabber.example.org"]}.
  {hosts, ["xmpp", "xmpp.example.org"]}.


In diesem Fall werden zwei Hostnamen, „jabber“, und „jabber.example.org“ definiert. Es können am Server mit beiden Hostnamen Accounts registriert werden. Mit „jabber“-Accounts kann man sich allerdings nicht an „jabber.example.org“-Accounts anmelden, und umgekehrt.
In diesem Fall werden zwei Hostnamen, {{ic|xmpp}}, und {{ic|jabber.example.org}} definiert. Es können am Server mit beiden Hostnamen Accounts registriert werden. Mit {{ic|jabber}}-Accounts kann man sich allerdings nicht an {{ic|jabber.example.org}}-Accounts anmelden, und umgekehrt.


Der Einfachkeit halber ist es also sinnvoller, ejabberd nur einen Hostnamen anbieten zu lassen, allerdings muss dieser auch als Liste deklariert übergeben werden.
Der Einfachkeit halber ist es also sinnvoller, ejabberd nur einen Hostnamen anbieten zu lassen, allerdings muss dieser auch als Liste deklariert übergeben werden.


  {hosts, ["jabber.example.org"]}.
  {hosts, ["xmpp.example.org"]}.


So wird von ejabberd nur der FQDN angeboten. Verwirrungen durch verschiedene Hostnamen sind dadurch nicht mehr möglich. Zudem vereinfacht dies die Konfiguration.
So wird von ejabberd nur der FQDN angeboten. Verwirrungen durch verschiedene Hostnamen sind dadurch nicht mehr möglich. Zudem vereinfacht dies die Konfiguration.


=== Nutzer-Registrierung ===
=== Nutzer-Registrierung ===
Über diese Option „auth_type“ im Abschnitt „AUTHENTIFICATION“ wird definiert, ob das interne Datenbanksystem (Mnesia), oder ein anderes verwendet werden soll. Zur Wahl stehen hier ein externes Script, eine beliebige Datenbank (ODBC), MySQL, PostreSQL, PAM oder LDAP.
Über diese Option {{ic|auth_method}} im Abschnitt {{ic|AUTHENTIFICATION}} wird definiert, ob das interne Datenbanksystem (Mnesia), oder ein anderes verwendet werden soll. Zur Wahl stehen hier ein externes Script, eine beliebige Datenbank (ODBC), MySQL, PostreSQL, PAM oder LDAP.


PAM oder LDAP können direkt in diesem Abschnitt konfiguriert werden, ODBC benötigt die Konfiguration der Datenbank im darauffolgenden Abschnitt. Es können voreingestellt MySQL oder PostgreSQL verwendet werden. Allerdings unterstützt ejabberd jede ODBC-Kompatible Datenbank.
PAM oder LDAP können direkt in diesem Abschnitt konfiguriert werden, ODBC benötigt die Konfiguration der Datenbank im darauffolgenden Abschnitt. Es können voreingestellt MySQL oder PostgreSQL verwendet werden. Allerdings unterstützt ejabberd jede ODBC-Kompatible Datenbank.
Zeile 77: Zeile 74:
  {auth_method, internal}.
  {auth_method, internal}.


Wenn nichts elementar Wichtiges dagegenspricht, sollte der ejabberd-internen Nutzerverwaltung der Vorzug gegeben werden. Hier können mehrere hundert User verwaltet werden, und die Datenbank arbeitet dennoch performant.
Wenn nichts elementar Wichtiges dagegen spricht, sollte der ejabberd-internen Nutzerverwaltung der Vorzug gegeben werden. Hier können mehrere hundert User verwaltet werden, und die Datenbank arbeitet dennoch performant.


==== Einschränkung der Registrierung ====
==== Einschränkung der Registrierung ====
Wenn man einen festen Benutzerkreis hat, möchte man eventuell nicht, dass sich jeder beliebige Nutzer am Server registrieren kann, auch wenn der Server im Internet verfügbar sein sollte.
Wenn man einen festen Benutzerkreis hat, möchte man eventuell nicht, dass sich jeder beliebige Nutzer am Server registrieren kann, auch wenn der Server im Internet verfügbar sein sollte.


Im Abschnitt „ACCESS RULES“ kann definiert werden, dass die externe Nutzer-Registrierung nicht möglich ist. So kann nur der Administrator einen Nutzer anlegen.
Im Abschnitt {{ic|ACCESS RULES}} kann definiert werden, dass die externe Nutzer-Registrierung nicht möglich ist. So kann nur der Administrator einen Nutzer anlegen.


  {access, register, [{deny, all}]}.
  {access, register, [{deny, all}]}.
Zeile 89: Zeile 86:


=== Administrator ===
=== Administrator ===
Der erste Administrations-User ist der einzige User, der händisch in der Konfigurationsdatei angelegt wird. Dieser User besitzt alle Rechte, vergleichbar mit root. Es können allerdings beliebig viele „root“-User angelegt werden. Konfiguriert wird der Administrations-Account im Abschnitt „ACCESS CONTROL LISTS“.
Der erste Administrations-User ist der einzige User, der händisch in der Konfigurationsdatei angelegt wird. Dieser User besitzt alle Rechte, vergleichbar mit root. Es können allerdings beliebig viele „root“-User angelegt werden. Konfiguriert wird der Administrations-Account im Abschnitt {{ic|ACCESS CONTROL LISTS}}.


  {acl, admin, {user, "root", "jabber.example.org"}}.
  {acl, admin, {user, "root", "xmpp.example.org"}}.


Der so definierte User mit der User-ID „root“ am Server „jabber.example.org“ verfügt somit über alle Rechte. Allerdings wurde der User noch nicht angelegt und verfügt noch über kein Passwort.
Der so definierte User mit der User-ID {{ic|root}} am Server {{ic|xmpp.example.org}} verfügt somit über alle Rechte. Allerdings wurde der User noch nicht angelegt und verfügt noch über kein Passwort.


Darauf, wie ein User angelegt wird, wird später in diesem Artikel eingegangen.
Darauf, wie ein User angelegt wird, wird später in diesem Artikel eingegangen.


=== Serversprache ===
=== Serversprache ===
Wenn man einen internationalen Server betreibt, ist englisch natürlich die erste Wahl, was die Statusmeldungen des Servers betrifft, wenn man hingegen einen rein von deutschsprachigen Nutzern verwendeten Server betreibt, kann man die Sprache natürlich auf deutsch stellen. Dies geschieht im Abschnitt „DEFAULT LANGUAGE“
Wenn man einen internationalen Server betreibt, ist englisch natürlich die erste Wahl, was die Statusmeldungen des Servers betrifft, wenn man hingegen einen rein von deutschsprachigen Nutzern verwendeten Server betreibt, kann man die Sprache natürlich auf deutsch stellen. Dies geschieht im Abschnitt {{ic|DEFAULT LANGUAGE}}


  {language "de"}.
  {language "de"}.
Zeile 105: Zeile 102:


=== Module ===
=== Module ===
Über Module kann der Jabber-Server um Funktionen erweitert werden. Module werden im Abschnitt „MODULES“ geladen und konfiguriert.
Über Module kann der XMPP-Server um Funktionen erweitert werden. Module werden im Abschnitt {{ic|MODULES}} geladen und konfiguriert.


==== Mehrbenutzer-Chat====
==== Mehrbenutzer-Chat====
Das standardmäßig aktivierte Modul „mod_muc“ erlaubt Mehrbenutzer-Chaträume auf dem Server. Standardmäßig ist der Hostname hierfür „conference.HOST“, wobei „HOST“ der Hostname ist. Wem dies nicht zusagt, kann das angepasst werden.
Das standardmäßig aktivierte Modul {{ic|mod_muc}} erlaubt Mehrbenutzer-Chaträume auf dem Server. Standardmäßig ist der Hostname hierfür {{ic|conference.HOST}}, wobei {{ic|HOST}} der Hostname ist. Wem dies nicht zusagt, kann das anpassen.


  {mod_muc, [
  {mod_muc, [
Zeile 118: Zeile 115:
   ]},
   ]},


Hier wird der Mehrbenutzer-Chat-Host auf „chat.@HOST@gesetzt, @HOST@wird durch ejabberd selbständig durch „jabber.example.org“ ersetzt. Diese Angabe bedarf keiner weiteren Konfiguration, da ejabberd sich selbständig um die Auflösung der Second-(bzw. Third-)Level-Domain kümmert.
Hier wird der Mehrbenutzer-Chat-Host auf {{ic|chat.@HOST@}} gesetzt, {{ic|@HOST@}} wird durch ejabberd selbständig durch {{ic|jabber.example.org}} ersetzt. Diese Angabe bedarf keiner weiteren Konfiguration, da ejabberd sich selbständig um die Auflösung der Second-(bzw. Third-)Level-Domain kümmert.


==== Willkommens-Nachricht ====
==== Willkommens-Nachricht ====
Wenn man die User-Registrierung nicht deaktiviert hat, und sich ein neuer Benutzer am Server anmeldet, ist es möglich, diesem Nutzer per Server-Nachricht eine Meldung zukommen zu lassen, und jemanden darüber zu informieren, dass ein User-Account registriert wurde. Dies wird über das Modul „mod_register“ konfiguriert.
Wenn man die User-Registrierung nicht deaktiviert hat, und sich ein neuer Benutzer am Server anmeldet, ist es möglich, diesem Nutzer per Server-Nachricht eine Meldung zukommen zu lassen, und jemanden darüber zu informieren, dass ein User-Account registriert wurde. Dies wird über das Modul {{ic|mod_register}} konfiguriert.


  {mod_register, [
  {mod_register, [
   {welcome_message, {"Hallo!",
   {welcome_message, {"Hallo!",
                       "Willkommen auf diesem Jabber-Server!",
                       "Willkommen auf diesem XMPP-Server!",
                       "Immer schön artig bleiben!"}}
                       "Immer schön artig bleiben!"}}
   {registration_watchers, ["regadmin@jabber.example.org",
   {registration_watchers, ["regadmin@xmpp.example.org",
                             "admin2@jabber.example.org"]},
                             "admin2@xmpp.example.org"]},


Über diese Konfiguration wird jedem neu registrierten User bei erster Anmeldung eine Nachricht geschickt.
Über diese Konfiguration wird jedem neu registrierten User bei erster Anmeldung eine Nachricht geschickt.


  Hallo!
  Hallo!
  Willkommen auf diesem Jabber-Server
  Willkommen auf diesem XMPP-Server
  Immer schön artig bleiben!
  Immer schön artig bleiben!


Zusätzlich werden „regadmin@jabber.example.org“ und „admin2@jabber.example.org“ per Nachricht darüber informiert, dass ein neuer User-Account registriert wurde. Diese User müssen dafür natürlich existieren
Zusätzlich werden {{ic|regadmin@xmpp.example.org}} und {{ic|admin2@jabber.example.org}} per Nachricht darüber informiert, dass ein neuer User-Account registriert wurde. Diese User müssen dafür natürlich existieren


==== Verteilte Kontaktliste ====
==== Verteilte Kontaktliste ====
Damit man sich in Netzwerken nicht selbst darum kümmern muss, ob und wie alle Nutzer die weiteren User-Accounts auf dem Server in ihre Kontaktliste eintragen, gibt es eine Funktion, die sich „Shared Roster“ oder „Autoroster“ nennt. („Roster“, engl.: Mitgliedsverzeichnis). Diese Funktion wird über das Modul „mod_shared_roster“ verfügbar gemacht.
Damit man sich in Netzwerken nicht selbst darum kümmern muss, ob und wie alle Nutzer die weiteren User-Accounts auf dem Server in ihre Kontaktliste eintragen, gibt es eine Funktion, die sich „Shared Roster“ oder „Autoroster“ nennt. („Roster“, engl.: Mitgliedsverzeichnis). Diese Funktion wird über das Modul {{ic|mod_shared_roster}} verfügbar gemacht.


Wenn dieses Modul aktiviert (sprich: nicht auskommentiert) ist, ist es möglich, zu definieren, dass die Kontaktliste allen angemeldeten Mitgliedern automatisch zur Verfügung gestellt wird. So haben Nutzer, die sich erstmalig anmelden, sofort alle weiteren registrierten User-Accounts in ihrer Kontaktliste, ohne, dass sie diese manuell hinzufügen müssen.
Wenn dieses Modul aktiviert (sprich: nicht auskommentiert) ist, ist es möglich, zu definieren, dass die Kontaktliste allen angemeldeten Mitgliedern automatisch zur Verfügung gestellt wird. So haben Nutzer, die sich erstmalig anmelden, sofort alle weiteren registrierten User-Accounts in ihrer Kontaktliste, ohne, dass sie diese manuell hinzufügen müssen.
Zeile 150: Zeile 147:
  ejabberdctl live
  ejabberdctl live


Hiermit wird ein Live-Start ausgeführt. Alle Meldungen des Servers werden direkt auf der Konsole ausgegeben. Es wird vorerst allerdings ein Warntext ausgegeben, an den man sich halten sollte. Wenn man sich komplett „verrant“ haben sollte, oder den Test beenden will, einfach zweimal Strg+C drücken.
Hiermit wird ein Live-Start ausgeführt. Alle Meldungen des Servers werden direkt auf der Konsole ausgegeben. Es wird vorerst allerdings ein Warntext ausgegeben, an den man sich halten sollte. Wenn man sich komplett „verrant“ haben sollte, oder den Test beenden will, einfach zweimal {{Taste|Strg}}+{{Taste|C}} drücken.


Nach dem Druck einer beliebigen Tastel aufen viele Statusmeldungen durch das Terminal. Wenn am Ende der Statusmeldungen …
Nach dem Druck einer beliebigen Taste laufen viele Statusmeldungen durch das Terminal. Wenn am Ende der Statusmeldungen …


  =PROGRESS REPORT==== 29-Apr-2009::12:04:39 ===
  =PROGRESS REPORT==== 29-Apr-2009::12:04:39 ===
Zeile 160: Zeile 157:
… steht (Datum variiert natürlich), wurde der Server erfolgreich gestartet. Dies kann zudem auch mittels [[nmap]] auf den Host überprüft werden.
… steht (Datum variiert natürlich), wurde der Server erfolgreich gestartet. Dies kann zudem auch mittels [[nmap]] auf den Host überprüft werden.


$ nmap jabber.example.org
{{hc|nmap xmpp.example.org|[…]  
[…]  
PORT    STATE    SERVICE
PORT    STATE    SERVICE
[…]  
[…]  
5222/tcp open    unknown
5222/tcp open    unknown
5280/tcp open    unknown}}
5280/tcp open    unknown
 
Port 5222/tcp wird von XMPP für die Kommunikation verwendet. Port 5280/tcp wird vom Administrations-Webinterface verwendet. Sollten die beiden Ports nicht in der Portliste von nmap erscheinen, so muss die Firewall so konfiguriert werden, dass diese Ports weitergeleitet werden.


Port 5222/tcp wird von Jabber für die Kommunikation verwendet. Port 5280/tcp wird vom Administrations-Webinterface verwendet. Sollten die beiden Ports nicht in der Portliste von nmap erscheinen, so muss die Firewall so konfiguriert werden, dass diese Ports weitergeleitet werden.
Der Live-Test auf dem Server kann dann mittels zweimal {{Taste|Strg}}+{{Taste|C}} beendet werden.  


Der Live-Test auf dem Server kann dann mittels zweimal Strg+C beendet werden.  
Man kann den Server nun leider nicht mehr über systemd starten, da dieser Probelauf bereits wichtige Dateien als der User angelegt hat, der diesen Test ausgeführt hat. Der User, als der der ejabberd jedoch normalerweise läuft, hat dann leider keine Rechte mehr auf diese Dateien zuzugreifen. Nachdem dieser Test erfolgreich durchgeführt wurde, sollte man die Rechte in {{ic|/var/log/ejabberd}} und {{ic|/var/lib/ejabberd}} überprüfen; der User {{ic|ejabberd}} benötigt hier Lese- und Schreibrechte.


Nun kann entweder mittels „ejabberdctl start“, dem Ausführen von „/etc/rc.d/ejabberd start“, oder einem Neustart des Systems, wenn „ejabberd“ im DAEMONS-Array steht, der Jabber-Server gestartet werden.
Nun kann entweder mittels {{ic|ejabberdctl start}}, dem Ausführen von {{ic|systemctl start ejabberd}}, oder einem Neustart des Systems, wenn zuvor {{ic|systemctl enable ejabberd}} eingegeben wurde, der XMPP-Server gestartet werden.


== User anlegen ==
== User anlegen ==
Zuerst sollte nun über „ejabberdctl“ der Administrations-Nutzer angelegt werden. Diese ist nötig, um auf das Web-Interface zugreifen zu können.
Zuerst sollte nun über {{ic|ejabberdctl}} der Administrations-Nutzer angelegt werden. Dieser ist nötig, um auf das Web-Interface zugreifen zu können.


Da die Passwörter mit dieser Methode in Plaintext in der Bash-History angezeigt werden, sollte man diese entweder vorher deaktivieren, hinterher löschen, oder das Passwort auf etwas unkritisches stellen und die Nutzer zum Ändern des Passwortes auffordern.
Da die Passwörter mit dieser Methode in Plaintext in der Bash-History angezeigt werden, sollte man diese entweder vorher deaktivieren, hinterher löschen, oder das Passwort auf etwas unkritisches stellen und die Nutzer zum Ändern des Passwortes auffordern.


  ejabberdctl register root jabber.example.org adminpasswort
  ejabberdctl register root xmpp.example.org adminpasswort


Weitere User werden im selben Stil angelegt, man kann sich das Anlegen mehrerer User-Accounts allerdings vereinfachen.
Weitere User werden im selben Stil angelegt, man kann sich das Anlegen mehrerer User-Accounts allerdings vereinfachen.
Zeile 184: Zeile 182:
  for USER in frank dirk anton susanne michael andreas jana martina
  for USER in frank dirk anton susanne michael andreas jana martina
  do
  do
   ejabberdctl register $USER jabber.example.org changeme
   ejabberdctl register $USER xmpp.example.org changeme
  done
  done


Mittels dieses Scripts werden mehrere User gleichzeitig angelegt. Allen Usern wird das Passwort „changeme“ zugewiesen. Geändert werden kann das Passwort wahlweise durch den Administrator im Webinterface, oder von den jeweiligen Benutzern selbst über die Funktionen des von ihnen verwendeten Clients.
Mittels dieses Scripts werden mehrere User gleichzeitig angelegt. Allen Usern wird das Passwort {{ic|changeme}} zugewiesen. Geändert werden kann das Passwort wahlweise durch den Administrator im Webinterface, oder von den jeweiligen Benutzern selbst über die Funktionen des von ihnen verwendeten Clients.


Sollte man die externe Registrierung nicht deaktiviert haben, ist es nicht nötig, weitere User über das Administrationstool anzulegen. Zudem kann in einem solchen Fall der administrative Account ebenfalls direkt über einen Client angelegt werden.
Sollte man die externe Registrierung nicht deaktiviert haben, ist es nicht nötig, weitere User über das Administrationstool anzulegen. Zudem kann in einem solchen Fall der administrative Account ebenfalls direkt über einen Client angelegt werden.
Zeile 194: Zeile 192:


=== Weboberfläche ===
=== Weboberfläche ===
Die Weboberfläche ist unter der Adresse „http://jabber.example.org:5280/admin“ zu erreichen. Als Nutzername muss die Jabber-ID (JID) des Administrations-Users verwendet werden, das Passwort ist jenes, das beim Anlegen des User-Accounts verwendet wurde. Also beispielsweise
Die Weboberfläche ist unter der Adresse {{ic|<nowiki>http://xmpp.example.org:5280/admin</nowiki>}} zu erreichen. Als Nutzername muss der ''Jabber Identifier'' (JID) des Administrations-Users verwendet werden, das Passwort ist jenes, das beim Anlegen des User-Accounts verwendet wurde. Also beispielsweise


* Username: root@jabber.example.org
* Username: root@xmpp.example.org
* Passwort: adminpasswort
* Passwort: adminpasswort


Zeile 204: Zeile 202:
Man befindet sich durch die Auswahl des Hostnamens in einem Unter-Konfigurationsinterface. Hier können alle hostbezogenen Einstellungen vorgenommen werden. Mit einem Klick auf den Hostnamen über dem Menü gelangt man wieder zur Startseite der Host-Konfiguration, mit einem Klick auf den Header des Administrationsinterfaces gelangt man zurück zum Gesamt-Konfigurationsinterface.
Man befindet sich durch die Auswahl des Hostnamens in einem Unter-Konfigurationsinterface. Hier können alle hostbezogenen Einstellungen vorgenommen werden. Mit einem Klick auf den Hostnamen über dem Menü gelangt man wieder zur Startseite der Host-Konfiguration, mit einem Klick auf den Header des Administrationsinterfaces gelangt man zurück zum Gesamt-Konfigurationsinterface.


Es wird nachfolgend immer vom Unter-Konfigurationsinterface ausgegangen. Änderungen, die über die Web-Oberfläche vorgenommen werden, bedürfen keines Neustarts des Daemons.
Es wird nachfolgend immer vom Unter-Konfigurationsinterface ausgegangen. Änderungen, die über die Web-Oberfläche vorgenommen werden, bedürfen keines Neustarts des Services.


==== Userverwaltung ====
==== Userverwaltung ====
Über den Punkt „Benutzer“ gelangt man in die User-Verwaltung. Hier werden alle registrierten User-Accounts inklusive letztem Anmeldedatum des Nutzers angezeigt, zudem können hier weitere Accounts angelegt werden.
Über den Punkt „Benutzer“ gelangt man in die User-Verwaltung. Hier werden alle registrierten User-Accounts inklusive letztem Anmeldedatum des Nutzers angezeigt, zudem können hier weitere Accounts angelegt werden.


Durch einen Klick auf die Jabber-ID eines Nutzers kann man weitere Einstellungen vornehmen und man bekommt zudem detailierte Informationen über den Account. So kann man hier das Passwort ändern, sieht die Offline-Nachrichten-Informationen des Users, und kann sich zudem die Kontaktliste anzeigen lassen, und diese auch bearbeiten.
Durch einen Klick auf die JID eines Nutzers kann man weitere Einstellungen vornehmen und man bekommt zudem detaillierte Informationen über den Account. So kann man hier das Passwort ändern, sieht die Offline-Nachrichten-Informationen des Users, und kann sich zudem die Kontaktliste anzeigen lassen, und diese auch bearbeiten.


Der Menüpunkt „Angemeldete Benutzer“ zeigt alle derzeit aktiven Benutzer auf dem Server. Ein Klick auf die JID führt zur selben User-Informations-Seite, wie unter „Benutzer“.
Der Menüpunkt „Angemeldete Benutzer“ zeigt alle derzeit aktiven Benutzer auf dem Server. Ein Klick auf die JID führt zur selben User-Informations-Seite, wie unter „Benutzer“.


==== Automatische Kontaktliste ====
==== Automatische Kontaktliste ====
Die automatische Verteilung der Kontaktliste wird über den Menüpunkt „Gruppen der gemeinsamen Kontaktliste“ verwaltet. Zuerst sollte man eine Gruppe „Alle“ anlegen. In diese Gruppe werden per Alias alle Benutzer eingefügt.
Die automatische Verteilung der Kontaktliste wird über den Menüpunkt „Gruppen der gemeinsamen Kontaktliste“ verwaltet. Zuerst sollte man eine Gruppe {{ic|Alle}} anlegen. In diese Gruppe werden per Alias alle Benutzer eingefügt.


Mit einem Klick auf „Alle“ wird diese Gruppe geöffnet. Hier können nun weitere Einstellungen vorgenommen werden. „Name“ und „Beschreibung“ sind frei wählbar. In das Feld „Mitglieder“ muss nun der Alias @all@für alle User eingefügt werden. Damit gehören alle User dieser Gruppe an.
Mit einem Klick auf {{ic|Alle}} wird diese Gruppe geöffnet. Hier können nun weitere Einstellungen vorgenommen werden. „Name“ und „Beschreibung“ sind frei wählbar. In das Feld „Mitglieder“ muss nun der Alias {{ic|@all@}} für alle User eingefügt werden. Damit gehören alle User dieser Gruppe an.


Nun hat man zwei Möglichkeiten. Im Abschnitt „Angezeigte Gruppen“ kann man nun entweder „Alle“ reinschreiben, oder man definiert hier weitere Gruppen, und lässt „Alle“ weg.
Nun hat man zwei Möglichkeiten. Im Abschnitt „Angezeigte Gruppen“ kann man nun entweder „Alle“ reinschreiben, oder man definiert hier weitere Gruppen, und lässt „Alle“ weg.
Zeile 223: Zeile 221:
Der Aufteilung in Gruppen sind keine Grenzen gesetzt. So könnte man zum Beispiel in einem Unternehmen Gruppen je Abteilung anlegen. Für das Beispiel werden zwei Zusatz-Gruppen angelegt, um die Kontaktliste in Männer und Frauen zu trennen.
Der Aufteilung in Gruppen sind keine Grenzen gesetzt. So könnte man zum Beispiel in einem Unternehmen Gruppen je Abteilung anlegen. Für das Beispiel werden zwei Zusatz-Gruppen angelegt, um die Kontaktliste in Männer und Frauen zu trennen.


Es wird zunächst eine Gruppe „Alle“ angelegt. In das „Mitglieder“-Feld wird der Alias @all@geschrieben. „Angezeigte Gruppen“ wird mit „Männer“ und „Frauen“ gefüllt.
Es wird zunächst eine Gruppe „Alle“ angelegt. In das „Mitglieder“-Feld wird der Alias {{ic|@all@}} geschrieben. „Angezeigte Gruppen“ wird mit {{ic|Männer}} und {{ic|Frauen}} gefüllt.


Es wird nun eine Gruppe „Männer“ angelegt. „Mitglieder“ enthält hier nun keinen Alias mehr, sondern eine Liste der Benutzer, die dieser Gruppe angehören sollen.
Es wird nun eine Gruppe {{ic|Männer}} angelegt. „Mitglieder“ enthält hier nun keinen Alias mehr, sondern eine Liste der Benutzer, die dieser Gruppe angehören sollen.


  andreas@jabber.example.org
  andreas@xmpp.example.org
  anton@jabber.example.org
  anton@xmpp.example.org
  dirk@jabber.example.org
  dirk@xmpp.example.org
  frank@jabber.example.org
  frank@xmpp.example.org
  michael@jabber.example.org
  michael@xmpp.example.org


Das Feld „Angezeigte Gruppen“ bleibt vorerst leer.
Das Feld „Angezeigte Gruppen“ bleibt vorerst leer.
Zeile 237: Zeile 235:
Der selbe Vorgang wird nun auch für die Gruppe „Frauen“ ausgeführt, diesmal werden in das „Mitglieder“-Feld nur die Useraccounts der weiblichen Nutzer eingefügt.
Der selbe Vorgang wird nun auch für die Gruppe „Frauen“ ausgeführt, diesmal werden in das „Mitglieder“-Feld nur die Useraccounts der weiblichen Nutzer eingefügt.


  jana@jabber.example.org
  jana@xmpp.example.org
  martina@jabber.example.org
  martina@xmpp.example.org
  susanne@jabber.example.org
  susanne@xmpp.example.org


Nun bestehen drei Gruppen. In der Gruppe „Alle“ sind durch den Alias @all@alle User Mitglied. In der Gruppe „Frauen“ sind nur die User-Accounts der weiblichen Nutzer Mitglied, und in der Gruppe „Männer“ nur die User-Accounts der männlichen Nutzer. Dadurch, dass in der Gruppe „Alle“ als „Angezeigte Gruppen“, die Gruppen „Männer“ und „Frauen“ definiert wurden, werden allen Usern, die in der Gruppe „Alle“ sind, diese beiden Gruppen angezeigt.
Nun bestehen drei Gruppen. In der Gruppe „Alle“ sind durch den Alias {{ic|@all@}} alle User Mitglied. In der Gruppe „Frauen“ sind nur die User-Accounts der weiblichen Nutzer Mitglied, und in der Gruppe „Männer“ nur die User-Accounts der männlichen Nutzer. Dadurch, dass in der Gruppe „Alle“ als „Angezeigte Gruppen“, die Gruppen „Männer“ und „Frauen“ definiert wurden, werden allen Usern, die in der Gruppe „Alle“ sind, diese beiden Gruppen angezeigt.


Änderungen an der Shared-Roster-Funktion werden automatisch an die Clients weitergeleitet und sind in den Clients nahezu in Echtzeit nachvollziehbar.
Änderungen an der Shared-Roster-Funktion werden automatisch an die Clients weitergeleitet und sind in den Clients nahezu in Echtzeit nachvollziehbar.
Zeile 247: Zeile 245:
Nun sei es so, dass für männliche Nutzer und für weibliche Nutzer getrennt Assistenz-Systeme eingerichtet werden sollen, die könnten zum Beispiel User-Accounts für Bots sein. Da die Kontaktliste aber kompakt gehalten werden soll, sollen die jeweiligen Assistenz-Systeme nur der entsprechenden Gruppe sichtbar sein.
Nun sei es so, dass für männliche Nutzer und für weibliche Nutzer getrennt Assistenz-Systeme eingerichtet werden sollen, die könnten zum Beispiel User-Accounts für Bots sein. Da die Kontaktliste aber kompakt gehalten werden soll, sollen die jeweiligen Assistenz-Systeme nur der entsprechenden Gruppe sichtbar sein.


[[Bild:Ejabberd_pidgin_maenner.png|thumb|Gruppen-Anzeige des Users „dirk@jabber.example.org“ in Pidgin]]
[[Bild:Ejabberd_pidgin_maenner.png|thumb|Gruppen-Anzeige des Users {{ic|dirk@xmpp.example.org}} in Pidgin]]
Man legt nun für die Assistenz-Systeme jeweils eigene Gruppen an, und fügt die User diesen Gruppen hinzu. Sei die Assistenz-Gruppe für Männer „MA“ und für Frauen „FA“. Die User seien „ma1“ bis „ma3“, bzw. „fa1“ bis „fa3“. So werden zwei Gruppen erzeugt, und diesen die jeweiligen Mitglieder hinzugefügt.
Man legt nun für die Assistenz-Systeme jeweils eigene Gruppen an, und fügt die User diesen Gruppen hinzu. Sei die Assistenz-Gruppe für Männer {{ic|MA}} und für Frauen {{ic|FA}}. Die User seien {{ic|ma1}} bis {{ic|ma3}}, bzw. {{ic|fa1}} bis {{ic|fa3}}. So werden zwei Gruppen erzeugt, und diesen die jeweiligen Mitglieder hinzugefügt.


* MA
* MA
** ma1@jabber.example.org
** ma1@xmpp.example.org
** ma2@jabber.example.org
** ma2@xmpp.example.org
** ma3@jabber.example.org
** ma3@xmpp.example.org


* FA
* FA
** fa1@jabber.example.org
** fa1@xmpp.example.org
** fa2@jabber.example.org
** fa2@xmpp.example.org
** fa3@jabber.example.org
** fa3@xmpp.example.org


Nun wird die Gruppe „Männer“ geöffnet. In das noch leere Feld „Angezeigte Gruppen“ wird nun der Name der Männer-Assistenz-Gruppe „MA“ hineingeschrieben, und das Ganze bestätigt. In der Gruppe „Frauen“ wird analog dazu „FA“ in das Feld geschrieben.
Nun wird die Gruppe „Männer“ geöffnet. In das noch leere Feld „Angezeigte Gruppen“ wird nun der Name der Männer-Assistenz-Gruppe {{ic|MA}} hineingeschrieben, und das Ganze bestätigt. In der Gruppe „Frauen“ wird analog dazu {{ic|FA}} in das Feld geschrieben.


So sehen Mitglieder der Gruppe „Männer“ nur die Gruppe „MA“. Mitglieder der Gruppe „Frauen“ sehen hingegen nur die Gruppe „FA“. Würde man die Gruppen „MA“ und „FA“ als angezeigte Gruppe in der „Alle“-Gruppe hinzufügen, würden alle User diese Gruppen sehen können.
So sehen Mitglieder der Gruppe „Männer“ nur die Gruppe {{ic|MA}}. Mitglieder der Gruppe „Frauen“ sehen hingegen nur die Gruppe {{ic|FA}}. Würde man die Gruppen {{ic|MA}} und {{ic|FA}} als angezeigte Gruppe in der „Alle“-Gruppe hinzufügen, würden alle User diese Gruppen sehen können.


==== User-Zuordnung ====
==== User-Zuordnung ====
Soll im obigen Beispiel der User „dirk@jabber.example.org“, obwohl er in der Männer-Gruppe ist, das Assistenz-System „FA2@jabber.example.org“ direkt sehen können, so ist unter „Benutzer“ auf „dirk@jabber.example.org“ zu klicken. Auf der User-Informationsseite ist dann unter „Kontaktliste“ die JID „fa2@jabber.example.org“ hinzuzufügen.
Soll im obigen Beispiel der User {{ic|dirk@xmpp.example.org}}, obwohl er in der Männer-Gruppe ist, das Assistenz-System {{ic|FA2@xmpp.example.org}} direkt sehen können, so ist unter „Benutzer“ auf {{ic|dirk@xmpp.example.org}} zu klicken. Auf der User-Informationsseite ist dann unter „Kontaktliste“ die JID {{ic|fa2@xmpp.example.org}} hinzuzufügen.


Zusätzlich sollte man diesen Vorgang für „fa2@jabber.example.org“ wiederholen, und dort „dirk@jabber.example.org“ zur Kontaktliste hinzufügen. Allerdings sollte ein Assistenz-System wie ein Bot die Authorisierung selbständig durchführen, so dass dies im Normalfall nicht nötig ist.
Zusätzlich sollte man diesen Vorgang für {{ic|fa2@xmpp.example.org}} wiederholen, und dort {{ic|dirk@xmpp.example.org}} zur Kontaktliste hinzufügen. Allerdings sollte ein Assistenz-System wie ein Bot die Autorisierung selbständig durchführen, so dass dies im Normalfall nicht nötig ist.


Der so hinzugefügte User erscheint im Client dann unter keiner Gruppe, bzw. in Pidgin unter der generischen Gruppe „Buddys“.
Der so hinzugefügte User erscheint im Client dann unter keiner Gruppe, bzw. in Pidgin unter der generischen Gruppe „Buddys“.
Zeile 273: Zeile 271:
== Transports ==
== Transports ==
[[Bild:Psi_services_directory.png|thumb|ICQ im Diensteverzeichnis, angezeigt in [[Psi]]s „Service Discovery“-Fenster]]
[[Bild:Psi_services_directory.png|thumb|ICQ im Diensteverzeichnis, angezeigt in [[Psi]]s „Service Discovery“-Fenster]]
Mit ejabberd ist es möglich, auch andere Messaging-Dienste zu verwenden. Dies geschieht mit Hilfe von ''Transports''. Transports sind Zusatzprogramme, mittels derer ein Jabber-Server fähig ist, auch als Server für andere Messaging-Dienste benutzt werden zu können. Es gibt für alle gängigen Dienste Transports. Für dieses Beispiel wird der Transport für ICQ installiert und konfiguriert.
Mit ejabberd ist es möglich, auch andere Messaging-Dienste zu verwenden. Dies geschieht mit Hilfe von ''Transports''. Transports sind Zusatzprogramme, mittels derer ein XMPP-Server fähig ist, auch als Server für andere Messaging-Dienste benutzt werden zu können. Es gibt für alle gängigen Dienste Transports. Für dieses Beispiel wird der Transport für ICQ installiert und konfiguriert.


=== Installation ===
=== Installation ===
Der Transport für ICQ heißt ''pyicqt'' und muss aus dem „community“-Repository installiert werden.
Der Transport für ICQ heißt ''pyicqt'' und muss aus dem {{ic|extra}}-Repository installiert werden.
 
pacman -S pyicqt


pacman -Sy pyicqt
pyicqt muss dann noch aktiviert und gestartet werden.


pyicqt muss dann noch in das DAEMONS-Array in der „rc.conf“ eingetragen werden. Ob der Transport schon läuft, oder nicht, wenn ejabberd gestartet wird, ist nicht von Bedeutung.
systemctl enable pyicqt
systemctl start pyicqt
 
Ob der Transport schon läuft, oder nicht, wenn ejabberd gestartet wird, ist nicht von Bedeutung.


=== Konfiguration pyicqt ===
=== Konfiguration pyicqt ===
Nach der Installation sollte aus Sicherheitsgründen ein Schlüsselwort gesetzt werden. Dies wird in der Datei /etc/ejabberd/pyicq.xml“ konfiguriert. In diesem Fall wird „key“ als Schlüsselwort verwendet.
Nach der Installation sollte aus Sicherheitsgründen ein Schlüsselwort gesetzt werden. Dies wird in der Datei {{ic|/etc/ejabberd/pyicq.xml}} konfiguriert. In diesem Fall wird {{ic|key}} als Schlüsselwort verwendet.


  <secret>key</secret>
  <secret>key</secret>


Zusätzlich muss in dieser Datei noch der Host eingestellt werden, unter dem der Jabber-Transport erreichbar sein soll. Dieser Host muss über das DNS auflösbar sein.
Zusätzlich muss in dieser Datei noch der Host eingestellt werden, unter dem der XMPP-Transport erreichbar sein soll. Dieser Host muss über das DNS auflösbar sein.


  <jid>icq.jabber.example.org</jid>
  <jid>icq.xmpp.example.org</jid>


Es können noch weitere Einstellungen vorgenommen werden: So kann in der Zeile „port“ zum Beispiel der Verbindungs-Port angegeben werden, über den der Transport erreichbar ist. Auch können unter „icqPort“ und „icqServer“ die Konfiguration der ICQ-Seitigen Einstellungen vorgenommen werden. Für alle Einstellungen wurden sinnvolle Standardwerte gesetzt.
Es können noch weitere Einstellungen vorgenommen werden: So kann in der Zeile {{ic|port}} zum Beispiel der Verbindungs-Port angegeben werden, über den der Transport erreichbar ist. Auch können unter {{ic|icqPort}} und {{ic|icqServer}} die Konfiguration der ICQ-Seitigen Einstellungen vorgenommen werden. Für alle Einstellungen wurden sinnvolle Standardwerte gesetzt.


=== Konfiguration ejabberd ===
=== Konfiguration ejabberd ===
Der ICQ-Transport muss ejabberd noch in der Datei /etc/ejabberd/ejabberd.cfg“ hinzugefügt werden, so dass dieser den ICQ-Dienst anbieten kann. Im Abschnitt „LISTENING PORTS“ wird ein neuer Eintrag erstellt.
Der ICQ-Transport muss ejabberd noch in der Datei {{ic|/etc/ejabberd/ejabberd.cfg}} hinzugefügt werden, so dass dieser den ICQ-Dienst anbieten kann. Im Abschnitt {{ic|LISTENING PORTS}} wird ein neuer Eintrag erstellt.


  {5347, ejabberd_service, [
  {5347, ejabberd_service, [
     {access, all},
     {access, all},
     {hosts,
     {hosts,
       ["icq.jabber.example.org"],
       ["icq.xmpp.example.org"],
       [{password, "key"}]
       [{password, "key"}]
     }
     }
Zeile 308: Zeile 311:


  ejabberdctl start
  ejabberdctl start
  /etc/rc.d/pyicqt start
  systemctl start pyicqt
 
Wenn man will, kann man auch erst pyicqt starten, und danach ejabberd mittels „ejabberdctl live“ in den Live-Modus versetzen, um eventuell auftretende Fehler direkt sehen zu können.


== Todo ==
Wenn man will, kann man auch erst pyicqt starten, und danach ejabberd mittels {{ic|ejabberdctl live}} in den Live-Modus versetzen, um eventuell auftretende Fehler direkt sehen zu können.
* Ein Multi-Node-System muss ebenfalls noch getestet werden


== Siehe auch ==
== Siehe auch ==
* [[Firewall]]
* [[iptables]]
* [[Daemons]]
* [[XMPP]]
* [[Liste von Jabber-Software]]
* [[Liste von XMPP-Software]]


== Weblinks ==
== Weblinks ==
* [http://www.ejabberd.im/ Community-Site des ejabberd]
* [http://www.ejabberd.im/ Community-Site des ejabberd] {{sprache|en}}
* [http://www.process-one.net/en/ejabberd/ Kommerzieller Support vom Anbieter]
* [http://www.process-one.net/en/ejabberd/ Kommerzieller Support vom Anbieter] {{sprache|en}}
* [http://xmpp.org/ Website der XMPP-Standards-Founddation]
* [http://xmpp.org/ Website der XMPP-Standards-Founddation] {{sprache|en}}
* [http://helmschrott.de/blog/jabber-in-5-minuten/ Jabber-Einführung „Jabber in 5 Minuten“]
* [http://web.jabber.ccc.de/ XMPP-Server des CCC] {{sprache|de}}
* [http://web.jabber.ccc.de/ Jabber-Server des CCC]


[[Kategorie:Daemons]]
[[Kategorie:Services]]
[[Kategorie:Installation]]
[[Kategorie:Netzwerk]]
[[Kategorie:Netzwerk]]
[[Kategorie:Jabber]]
[[Kategorie:XMPP]]
[[Kategorie:Server]]
[[Kategorie:Server]]

Aktuelle Version vom 24. Mai 2023, 18:37 Uhr

Dieser Artikel wurde als veraltet markiert, und sollte kontrolliert, und gegebenfalls korrigiert bzw. aktualisiert werden.


XMPP ist eine von der IETF standardisierte Sammlung diverser XML-basierender Netzwerkprotokolle, die ein erweiterbares Messaging- und Anwesenheitsprotokoll darstellen.

Anders als die meisten anderen Messaging-Dienste ist XMPP dezentral aufgebaut. Die nötige Server-Software sowie das Protokoll um einen XMPP-Server zu betreiben sind ebenfalls frei verfügbar. So steht jedem Anwender die Möglichkeit offen, selbst einen XMPP-Server aufzusetzen.

XMPP eignet sich daher nicht nur, um großen, öffentlichen Nutzergruppen eine Möglichkeit der Kommunikation zu bieten, sondern auch, um im kleinen Rahmen schnell und einfach, und ohne große Hürden (XMPP-Clients sind für alle gängigen Architekturen und Systeme verfügbar) eine Kommunikationsmöglichkeit bereitzustellen.

Installation

Das Programm ist als ejabberd in extra verfügbar, und kann von dort mittels Pacman installiert werden.

pacman -S ejabberd

Nach der Installation sollte der Service noch mittels systemctl enable ejabberd für den automatischen Start markiert werden. Allerdings sollte man vor dem ersten Start noch einiges anpassen und konfigurieren, und das System ein mal in einem Live-Modus testen.

Erster Start

Vor der Inbetriebnahme des XMPP-Servers sollte dieser konfiguriert werden. Alle Einstellungen werden in der Datei /etc/ejabberd/ejabberd.cfg vorgenommen. Änderungen an dieser Datei bedürfen eines Neustarts des Services.

Aufbau der Datei

vi zeigt die Konfigurationsdatei an, Abschnitt MODULES

Die Datei hat eine für viele User vielleicht etwas ungewöhnliche Syntax.

% Dies ist ein Kommentar
{definition, "wert"}.
{anderedefinition, ["gruppe", "von", "werten"]}.
{weiteres, [{wert, "mit"}, {gruppe, "die"}, {weitere, "definitionen"}, {setzen, "kann"}]}.

Der besseren Lesbarkeit halber können diese Definitionen auch umgebrochen und zudem innerhalb der Definitionen auch mit weiteren Kommentaren versehen werden.

{weiteres, [
  % Setzt „wert“ und „gruppe“
  {wert, "mit"},
  {gruppe, "die"},

  % Hier werden weitere Werte gesetzt
  {weitere, "definitionen"},
  {setzen, "kann"},

  % Verschachtelungen gehen auch noch
  {untergruppe, [
    {optiona, "werta"},
    {optionb, "wertb"},
    {optionc, "wertc"}
  ]}
]}.

In der ejabberd-Konfigurationsdatei ist vor allem die letzte Form stark vertreten. In der Konfigurationsdatei werden Kommentare mit %% oder %%% versehen, was hier aber ignoriert werden kann.

Die Datei ist intern durch ausführliche Kommentierung in verschiedene Abschnitte unterteilt und gut dokumentiert.

Konfiguration

Vor dem ersten Start von ejabberd müssen noch einige Dinge angepasst werden. Zum Beispiel wurde noch kein Administrations-User angelegt, und der Hostname wurde zudem auch noch nicht definiert. Es wird hier nur die Grundkonfiguration mit nur einem einzigen Server (in der XMPP-Terminologie Node) beschrieben. Dinge, auf die nicht eingegangen wird, können so belassen werden.

Hostname

ejabberd ist in der Lage, mehrere Hostnamen anzubieten. Allerdings muss der Rechner, auf dem ejabberd läuft, per DNS über den Hostnamen erreichbar sein, damit man diesen auch zum Anmelden nutzen kann.

In kleineren Umgebungen, die XMPP ausschließlich im LAN anbieten, ist es ausreichend, den LAN-Hostnamen zu verwenden. Sobald der Server aber auch von außen erreichbar sein soll, ist es ratsam, einen vollständigen Domain-Namen zu verwenden.

Die Hostnamen, mittels derer man sich am XMPP-Server anmelden kann werden im Abschnitt SERVED HOSTNAMES in der Konfigurationsdatei definiert.

{hosts, ["xmpp", "xmpp.example.org"]}.

In diesem Fall werden zwei Hostnamen, xmpp, und jabber.example.org definiert. Es können am Server mit beiden Hostnamen Accounts registriert werden. Mit jabber-Accounts kann man sich allerdings nicht an jabber.example.org-Accounts anmelden, und umgekehrt.

Der Einfachkeit halber ist es also sinnvoller, ejabberd nur einen Hostnamen anbieten zu lassen, allerdings muss dieser auch als Liste deklariert übergeben werden.

{hosts, ["xmpp.example.org"]}.

So wird von ejabberd nur der FQDN angeboten. Verwirrungen durch verschiedene Hostnamen sind dadurch nicht mehr möglich. Zudem vereinfacht dies die Konfiguration.

Nutzer-Registrierung

Über diese Option auth_method im Abschnitt AUTHENTIFICATION wird definiert, ob das interne Datenbanksystem (Mnesia), oder ein anderes verwendet werden soll. Zur Wahl stehen hier ein externes Script, eine beliebige Datenbank (ODBC), MySQL, PostreSQL, PAM oder LDAP.

PAM oder LDAP können direkt in diesem Abschnitt konfiguriert werden, ODBC benötigt die Konfiguration der Datenbank im darauffolgenden Abschnitt. Es können voreingestellt MySQL oder PostgreSQL verwendet werden. Allerdings unterstützt ejabberd jede ODBC-Kompatible Datenbank.

{auth_method, internal}.

Wenn nichts elementar Wichtiges dagegen spricht, sollte der ejabberd-internen Nutzerverwaltung der Vorzug gegeben werden. Hier können mehrere hundert User verwaltet werden, und die Datenbank arbeitet dennoch performant.

Einschränkung der Registrierung

Wenn man einen festen Benutzerkreis hat, möchte man eventuell nicht, dass sich jeder beliebige Nutzer am Server registrieren kann, auch wenn der Server im Internet verfügbar sein sollte.

Im Abschnitt ACCESS RULES kann definiert werden, dass die externe Nutzer-Registrierung nicht möglich ist. So kann nur der Administrator einen Nutzer anlegen.

{access, register, [{deny, all}]}.

Im selben Abschnitt können auch weitere Regeln definiert werden. Für den normalen Betrieb sind alle Regeln bereits mit sinnvollen Voreinstellungen belegt, so dass es hier keiner weiteren Änderung bedarf.

Administrator

Der erste Administrations-User ist der einzige User, der händisch in der Konfigurationsdatei angelegt wird. Dieser User besitzt alle Rechte, vergleichbar mit root. Es können allerdings beliebig viele „root“-User angelegt werden. Konfiguriert wird der Administrations-Account im Abschnitt ACCESS CONTROL LISTS.

{acl, admin, {user, "root", "xmpp.example.org"}}.

Der so definierte User mit der User-ID root am Server xmpp.example.org verfügt somit über alle Rechte. Allerdings wurde der User noch nicht angelegt und verfügt noch über kein Passwort.

Darauf, wie ein User angelegt wird, wird später in diesem Artikel eingegangen.

Serversprache

Wenn man einen internationalen Server betreibt, ist englisch natürlich die erste Wahl, was die Statusmeldungen des Servers betrifft, wenn man hingegen einen rein von deutschsprachigen Nutzern verwendeten Server betreibt, kann man die Sprache natürlich auf deutsch stellen. Dies geschieht im Abschnitt DEFAULT LANGUAGE

{language "de"}.

Wenn man einen Server mit mehreren Hostnamen betreibt, kann man die Sprache auch je Hostname definieren.

Module

Über Module kann der XMPP-Server um Funktionen erweitert werden. Module werden im Abschnitt MODULES geladen und konfiguriert.

Mehrbenutzer-Chat

Das standardmäßig aktivierte Modul mod_muc erlaubt Mehrbenutzer-Chaträume auf dem Server. Standardmäßig ist der Hostname hierfür conference.HOST, wobei HOST der Hostname ist. Wem dies nicht zusagt, kann das anpassen.

{mod_muc, [
  {host, "chat.@HOST@"},
  {access, muc},
  {access_create, muc},
  {access_persistent, muc},
  {access_admin, muc_admin}
 ]},

Hier wird der Mehrbenutzer-Chat-Host auf chat.@HOST@ gesetzt, @HOST@ wird durch ejabberd selbständig durch jabber.example.org ersetzt. Diese Angabe bedarf keiner weiteren Konfiguration, da ejabberd sich selbständig um die Auflösung der Second-(bzw. Third-)Level-Domain kümmert.

Willkommens-Nachricht

Wenn man die User-Registrierung nicht deaktiviert hat, und sich ein neuer Benutzer am Server anmeldet, ist es möglich, diesem Nutzer per Server-Nachricht eine Meldung zukommen zu lassen, und jemanden darüber zu informieren, dass ein User-Account registriert wurde. Dies wird über das Modul mod_register konfiguriert.

{mod_register, [
  {welcome_message, {"Hallo!",
                     "Willkommen auf diesem XMPP-Server!",
                     "Immer schön artig bleiben!"}}
  {registration_watchers, ["regadmin@xmpp.example.org",
                           "admin2@xmpp.example.org"]},

Über diese Konfiguration wird jedem neu registrierten User bei erster Anmeldung eine Nachricht geschickt.

Hallo!
Willkommen auf diesem XMPP-Server
Immer schön artig bleiben!

Zusätzlich werden regadmin@xmpp.example.org und admin2@jabber.example.org per Nachricht darüber informiert, dass ein neuer User-Account registriert wurde. Diese User müssen dafür natürlich existieren

Verteilte Kontaktliste

Damit man sich in Netzwerken nicht selbst darum kümmern muss, ob und wie alle Nutzer die weiteren User-Accounts auf dem Server in ihre Kontaktliste eintragen, gibt es eine Funktion, die sich „Shared Roster“ oder „Autoroster“ nennt. („Roster“, engl.: Mitgliedsverzeichnis). Diese Funktion wird über das Modul mod_shared_roster verfügbar gemacht.

Wenn dieses Modul aktiviert (sprich: nicht auskommentiert) ist, ist es möglich, zu definieren, dass die Kontaktliste allen angemeldeten Mitgliedern automatisch zur Verfügung gestellt wird. So haben Nutzer, die sich erstmalig anmelden, sofort alle weiteren registrierten User-Accounts in ihrer Kontaktliste, ohne, dass sie diese manuell hinzufügen müssen.

Die Konfiguration der verteilten Kontaktliste kann später über das Web-Interface einfach konfiguriert werden. Dort können dann auch Nutzergruppen und deren gegenseitige Sichtbarkeit definiert werden.

Test-Start

Nach der Konfiguration in der ejabberd-Konfigurationsdatei sollte man den Server nicht gleich als Daemon starten, sondern vorerst einen Live-Test vornehmen. Dass dabei noch kein User existiert ist nebensächlich, es geht lediglich um die Funktion des Servers.

ejabberdctl live

Hiermit wird ein Live-Start ausgeführt. Alle Meldungen des Servers werden direkt auf der Konsole ausgegeben. Es wird vorerst allerdings ein Warntext ausgegeben, an den man sich halten sollte. Wenn man sich komplett „verrant“ haben sollte, oder den Test beenden will, einfach zweimal Strg+C drücken.

Nach dem Druck einer beliebigen Taste laufen viele Statusmeldungen durch das Terminal. Wenn am Ende der Statusmeldungen …

=PROGRESS REPORT==== 29-Apr-2009::12:04:39 ===
        application: ejabberd
         started_at: ejabberd@localhost

… steht (Datum variiert natürlich), wurde der Server erfolgreich gestartet. Dies kann zudem auch mittels nmap auf den Host überprüft werden.

nmap xmpp.example.org
[…] 
PORT     STATE    SERVICE
[…] 
5222/tcp open     unknown
5280/tcp open     unknown

Port 5222/tcp wird von XMPP für die Kommunikation verwendet. Port 5280/tcp wird vom Administrations-Webinterface verwendet. Sollten die beiden Ports nicht in der Portliste von nmap erscheinen, so muss die Firewall so konfiguriert werden, dass diese Ports weitergeleitet werden.

Der Live-Test auf dem Server kann dann mittels zweimal Strg+C beendet werden.

Man kann den Server nun leider nicht mehr über systemd starten, da dieser Probelauf bereits wichtige Dateien als der User angelegt hat, der diesen Test ausgeführt hat. Der User, als der der ejabberd jedoch normalerweise läuft, hat dann leider keine Rechte mehr auf diese Dateien zuzugreifen. Nachdem dieser Test erfolgreich durchgeführt wurde, sollte man die Rechte in /var/log/ejabberd und /var/lib/ejabberd überprüfen; der User ejabberd benötigt hier Lese- und Schreibrechte.

Nun kann entweder mittels ejabberdctl start, dem Ausführen von systemctl start ejabberd, oder einem Neustart des Systems, wenn zuvor systemctl enable ejabberd eingegeben wurde, der XMPP-Server gestartet werden.

User anlegen

Zuerst sollte nun über ejabberdctl der Administrations-Nutzer angelegt werden. Dieser ist nötig, um auf das Web-Interface zugreifen zu können.

Da die Passwörter mit dieser Methode in Plaintext in der Bash-History angezeigt werden, sollte man diese entweder vorher deaktivieren, hinterher löschen, oder das Passwort auf etwas unkritisches stellen und die Nutzer zum Ändern des Passwortes auffordern.

ejabberdctl register root xmpp.example.org adminpasswort

Weitere User werden im selben Stil angelegt, man kann sich das Anlegen mehrerer User-Accounts allerdings vereinfachen.

for USER in frank dirk anton susanne michael andreas jana martina
do
  ejabberdctl register $USER xmpp.example.org changeme
done

Mittels dieses Scripts werden mehrere User gleichzeitig angelegt. Allen Usern wird das Passwort changeme zugewiesen. Geändert werden kann das Passwort wahlweise durch den Administrator im Webinterface, oder von den jeweiligen Benutzern selbst über die Funktionen des von ihnen verwendeten Clients.

Sollte man die externe Registrierung nicht deaktiviert haben, ist es nicht nötig, weitere User über das Administrationstool anzulegen. Zudem kann in einem solchen Fall der administrative Account ebenfalls direkt über einen Client angelegt werden.

Wenn man bei deaktivierter externer Anmeldung lieber grafisch arbeitet, kann man die User auch über die Weboberfläche anlegen, nachdem der administrative User angelegt wurde.

Weboberfläche

Die Weboberfläche ist unter der Adresse http://xmpp.example.org:5280/admin zu erreichen. Als Nutzername muss der Jabber Identifier (JID) des Administrations-Users verwendet werden, das Passwort ist jenes, das beim Anlegen des User-Accounts verwendet wurde. Also beispielsweise

  • Username: root@xmpp.example.org
  • Passwort: adminpasswort

Die Verwaltung des Servers erfolgt an zwei Stellen. Zum Einen gibt es die generelle Verwaltung, diese umfasst alle direkt erreichbaren Menüpunkte. Zum Anderen gibt es die spezielle Server-Verwaltung. Diese Befindet sich unter „Virtuelle Hosts“. Dort wählt man Namen des Hosts aus, dessen Einstellungen man bearbeiten möchte.

Das Administrations-Webinterface von ejabberd direkt nach dem Einloggen

Man befindet sich durch die Auswahl des Hostnamens in einem Unter-Konfigurationsinterface. Hier können alle hostbezogenen Einstellungen vorgenommen werden. Mit einem Klick auf den Hostnamen über dem Menü gelangt man wieder zur Startseite der Host-Konfiguration, mit einem Klick auf den Header des Administrationsinterfaces gelangt man zurück zum Gesamt-Konfigurationsinterface.

Es wird nachfolgend immer vom Unter-Konfigurationsinterface ausgegangen. Änderungen, die über die Web-Oberfläche vorgenommen werden, bedürfen keines Neustarts des Services.

Userverwaltung

Über den Punkt „Benutzer“ gelangt man in die User-Verwaltung. Hier werden alle registrierten User-Accounts inklusive letztem Anmeldedatum des Nutzers angezeigt, zudem können hier weitere Accounts angelegt werden.

Durch einen Klick auf die JID eines Nutzers kann man weitere Einstellungen vornehmen und man bekommt zudem detaillierte Informationen über den Account. So kann man hier das Passwort ändern, sieht die Offline-Nachrichten-Informationen des Users, und kann sich zudem die Kontaktliste anzeigen lassen, und diese auch bearbeiten.

Der Menüpunkt „Angemeldete Benutzer“ zeigt alle derzeit aktiven Benutzer auf dem Server. Ein Klick auf die JID führt zur selben User-Informations-Seite, wie unter „Benutzer“.

Automatische Kontaktliste

Die automatische Verteilung der Kontaktliste wird über den Menüpunkt „Gruppen der gemeinsamen Kontaktliste“ verwaltet. Zuerst sollte man eine Gruppe Alle anlegen. In diese Gruppe werden per Alias alle Benutzer eingefügt.

Mit einem Klick auf Alle wird diese Gruppe geöffnet. Hier können nun weitere Einstellungen vorgenommen werden. „Name“ und „Beschreibung“ sind frei wählbar. In das Feld „Mitglieder“ muss nun der Alias @all@ für alle User eingefügt werden. Damit gehören alle User dieser Gruppe an.

Nun hat man zwei Möglichkeiten. Im Abschnitt „Angezeigte Gruppen“ kann man nun entweder „Alle“ reinschreiben, oder man definiert hier weitere Gruppen, und lässt „Alle“ weg.

Autoroster-Beispiel

Der Aufteilung in Gruppen sind keine Grenzen gesetzt. So könnte man zum Beispiel in einem Unternehmen Gruppen je Abteilung anlegen. Für das Beispiel werden zwei Zusatz-Gruppen angelegt, um die Kontaktliste in Männer und Frauen zu trennen.

Es wird zunächst eine Gruppe „Alle“ angelegt. In das „Mitglieder“-Feld wird der Alias @all@ geschrieben. „Angezeigte Gruppen“ wird mit Männer und Frauen gefüllt.

Es wird nun eine Gruppe Männer angelegt. „Mitglieder“ enthält hier nun keinen Alias mehr, sondern eine Liste der Benutzer, die dieser Gruppe angehören sollen.

andreas@xmpp.example.org
anton@xmpp.example.org
dirk@xmpp.example.org
frank@xmpp.example.org
michael@xmpp.example.org

Das Feld „Angezeigte Gruppen“ bleibt vorerst leer.

Der selbe Vorgang wird nun auch für die Gruppe „Frauen“ ausgeführt, diesmal werden in das „Mitglieder“-Feld nur die Useraccounts der weiblichen Nutzer eingefügt.

jana@xmpp.example.org
martina@xmpp.example.org
susanne@xmpp.example.org

Nun bestehen drei Gruppen. In der Gruppe „Alle“ sind durch den Alias @all@ alle User Mitglied. In der Gruppe „Frauen“ sind nur die User-Accounts der weiblichen Nutzer Mitglied, und in der Gruppe „Männer“ nur die User-Accounts der männlichen Nutzer. Dadurch, dass in der Gruppe „Alle“ als „Angezeigte Gruppen“, die Gruppen „Männer“ und „Frauen“ definiert wurden, werden allen Usern, die in der Gruppe „Alle“ sind, diese beiden Gruppen angezeigt.

Änderungen an der Shared-Roster-Funktion werden automatisch an die Clients weitergeleitet und sind in den Clients nahezu in Echtzeit nachvollziehbar.

Nun sei es so, dass für männliche Nutzer und für weibliche Nutzer getrennt Assistenz-Systeme eingerichtet werden sollen, die könnten zum Beispiel User-Accounts für Bots sein. Da die Kontaktliste aber kompakt gehalten werden soll, sollen die jeweiligen Assistenz-Systeme nur der entsprechenden Gruppe sichtbar sein.

Gruppen-Anzeige des Users dirk@xmpp.example.org in Pidgin

Man legt nun für die Assistenz-Systeme jeweils eigene Gruppen an, und fügt die User diesen Gruppen hinzu. Sei die Assistenz-Gruppe für Männer MA und für Frauen FA. Die User seien ma1 bis ma3, bzw. fa1 bis fa3. So werden zwei Gruppen erzeugt, und diesen die jeweiligen Mitglieder hinzugefügt.

  • MA
    • ma1@xmpp.example.org
    • ma2@xmpp.example.org
    • ma3@xmpp.example.org
  • FA
    • fa1@xmpp.example.org
    • fa2@xmpp.example.org
    • fa3@xmpp.example.org

Nun wird die Gruppe „Männer“ geöffnet. In das noch leere Feld „Angezeigte Gruppen“ wird nun der Name der Männer-Assistenz-Gruppe MA hineingeschrieben, und das Ganze bestätigt. In der Gruppe „Frauen“ wird analog dazu FA in das Feld geschrieben.

So sehen Mitglieder der Gruppe „Männer“ nur die Gruppe MA. Mitglieder der Gruppe „Frauen“ sehen hingegen nur die Gruppe FA. Würde man die Gruppen MA und FA als angezeigte Gruppe in der „Alle“-Gruppe hinzufügen, würden alle User diese Gruppen sehen können.

User-Zuordnung

Soll im obigen Beispiel der User dirk@xmpp.example.org, obwohl er in der Männer-Gruppe ist, das Assistenz-System FA2@xmpp.example.org direkt sehen können, so ist unter „Benutzer“ auf dirk@xmpp.example.org zu klicken. Auf der User-Informationsseite ist dann unter „Kontaktliste“ die JID fa2@xmpp.example.org hinzuzufügen.

Zusätzlich sollte man diesen Vorgang für fa2@xmpp.example.org wiederholen, und dort dirk@xmpp.example.org zur Kontaktliste hinzufügen. Allerdings sollte ein Assistenz-System wie ein Bot die Autorisierung selbständig durchführen, so dass dies im Normalfall nicht nötig ist.

Der so hinzugefügte User erscheint im Client dann unter keiner Gruppe, bzw. in Pidgin unter der generischen Gruppe „Buddys“.

Transports

ICQ im Diensteverzeichnis, angezeigt in Psis „Service Discovery“-Fenster

Mit ejabberd ist es möglich, auch andere Messaging-Dienste zu verwenden. Dies geschieht mit Hilfe von Transports. Transports sind Zusatzprogramme, mittels derer ein XMPP-Server fähig ist, auch als Server für andere Messaging-Dienste benutzt werden zu können. Es gibt für alle gängigen Dienste Transports. Für dieses Beispiel wird der Transport für ICQ installiert und konfiguriert.

Installation

Der Transport für ICQ heißt pyicqt und muss aus dem extra-Repository installiert werden.

pacman -S pyicqt

pyicqt muss dann noch aktiviert und gestartet werden.

systemctl enable pyicqt
systemctl start pyicqt

Ob der Transport schon läuft, oder nicht, wenn ejabberd gestartet wird, ist nicht von Bedeutung.

Konfiguration pyicqt

Nach der Installation sollte aus Sicherheitsgründen ein Schlüsselwort gesetzt werden. Dies wird in der Datei /etc/ejabberd/pyicq.xml konfiguriert. In diesem Fall wird key als Schlüsselwort verwendet.

<secret>key</secret>

Zusätzlich muss in dieser Datei noch der Host eingestellt werden, unter dem der XMPP-Transport erreichbar sein soll. Dieser Host muss über das DNS auflösbar sein.

<jid>icq.xmpp.example.org</jid>

Es können noch weitere Einstellungen vorgenommen werden: So kann in der Zeile port zum Beispiel der Verbindungs-Port angegeben werden, über den der Transport erreichbar ist. Auch können unter icqPort und icqServer die Konfiguration der ICQ-Seitigen Einstellungen vorgenommen werden. Für alle Einstellungen wurden sinnvolle Standardwerte gesetzt.

Konfiguration ejabberd

Der ICQ-Transport muss ejabberd noch in der Datei /etc/ejabberd/ejabberd.cfg hinzugefügt werden, so dass dieser den ICQ-Dienst anbieten kann. Im Abschnitt LISTENING PORTS wird ein neuer Eintrag erstellt.

{5347, ejabberd_service, [
   {access, all},
   {hosts,
     ["icq.xmpp.example.org"],
     [{password, "key"}]
   }
]},

Starten

Danach muss ejabberd (neu) gestartet werden. Ebenfalls muss pyicqt gestartet werden.

ejabberdctl start
systemctl start pyicqt

Wenn man will, kann man auch erst pyicqt starten, und danach ejabberd mittels ejabberdctl live in den Live-Modus versetzen, um eventuell auftretende Fehler direkt sehen zu können.

Siehe auch

Weblinks