Dieser Anleitung fehlen noch einige Informationen. Wenn Du etwas verbessern kannst, dann editiere den Beitrag, um die Qualität des Wikis noch weiter zu verbessern.
Anmerkung: Die Installation aus den offiziellen Paketquellen müsste überprüft werden. Aber auch die manuelle Installation über den Universal-Installer scheint nicht unproblematisch zu sein (siehe Diskussion).
Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Ejabberd ist einer der am weitesten verbreiteten XMPP-Server im Open-Source-Bereich, obwohl er in der ziemlich exotischen Sprache Erlang geschrieben ist. U.a. setzt sowohl die Jabber-Foundation als auch der deutsche Freemail-Anbieter GMX früher auf diese Serversoftware, weil sie auch unter hohen Anforderungen zuverlässig arbeitet. Aber auch für einen kleinen privaten Server eignet sich der ejabberd gut, weil er (meist) ziemlich problemlos einzurichten ist.
Um den Serverdienst zu installieren, reicht es zunächst aus, folgendes Paket inkl. aller Abhängigkeiten zu installieren [1]:
ejabberd (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install ejabberd
sudo aptitude install ejabberd
Das Einzige, worauf man dabei achten sollte ist, dass nur die wirklichen Abhängigkeiten mit installiert werden und nicht alle "empfohlenen" Pakete, denn sonst werden einem auch auf einem Server schnell mal die ganzen X11-Bibliotheken auf die Platte gebracht. Man sollte also genau hinschauen und bei Bedarf die Option --no-install-recommends
im Installationsbefehl nutzen.
Um mit dem Server dann auch etwas anfangen zu können, muss man ihn noch kurz konfigurieren:
sudo dpkg-reconfigure ejabberd
Als erstes wird man nach dem Namen des Servers gefragt. Dieser muss inkl. der Domain eingegeben werden und der Rechner muss auch über das DNS-System unter diesem Namen bekannt sein.
Als nächstes wird nach einer Admin-ID gefragt. Dabei handelt es sich um eine Jabber-ID (JID), der administrative Rechte eingeräumt werden. Mit dieser JID kann man sich dann später auch über einen XMPP-Client einloggen. Der Domainteil der JID darf nicht mit angegeben werden, da er ja schon in der vorherigen Frage angegeben wurde.
Sollte ein Fehler wie dieser auftreten:
Can't register admin user "[EMAIL PROTECTED]. Probably ejabberd is configured for serving another hostname.
kann Folgendes weiterhelfen:
sudo killall epmd
Abschließend muss man für diesen Account noch ein Passwort setzen. Damit ist die Konfiguration erstmal fertig und nachdem man den Dienst neu gestartet hat [5], ist ejabberd einsatzbereit.
sudo /etc/init.d/ejabberd restart
Damit der Server einwandfrei funktioniert, müssen mindestens folgende TCP-Ports ungefiltert und erreichbar sein: (Nur relevant für Leute, die mit Firewalls und/oder Portforwarding zu tun haben.)
5222
eingehend, für Client-Verbindungen unverschlüsselt oder TLS-verschlüsselt
5223
eingehend, für SSL-verschlüsselte Clientverbindungen (veraltet)
5269
ein- und ausgehend, für Verbindungen zu anderen Servern
5280
eingehend, für Client-Verbindungen über HTTP-Polling (nützlich für Webapplikationen)
Für einen internen Server ohne Kontakt zu anderen kann man letzteren natürlich auch weglassen.
In der Standardkonfiguration bietet ejabberd eine Weboberfläche, die über die URL http://serveradresse:5280/admin/
zu erreichen ist. Hier kann man sich über die Admin-JID (diesmal komplett mit Domain) und das Passwort einloggen.
Die Bedienung ist leider ziemlich unintuitiv, weswegen man abgesehen von den Statistikfunktionen vielleicht besser auf die anderen Möglichkeiten zurückgreift.
Die Datei /etc/ejabberd/ejabberd.cfg ist das Herzstück der ejabberd-Konfiguration. Diese ist in Erlang-Syntax geschrieben und sieht deshalb etwas gewöhnungsbedürftig aus. Z.B. werden Kommentare durch ein Prozent-Zeichen eingeleitet. Nach jeder Änderung an dieser Datei [4] muss der ejabberd wiederum neu gestartet werden [5].
Wer nicht über einen leistungsfähigen Server mit breiter Internetanbindung verfügt, möchte z.B. vielleicht nicht jedem ermöglichen, sich auf dem Server zu registrieren, sondern nur ausgewählten Bekannten/Mitarbeitern/Kunden einen Account zur Verfügung stellen. Dafür muss man nur ein %-Zeichen von einer in die andere Zeile setzen:
% Every username can be registered via in-band registration: %{access, register, [{allow, all}]}. % None username can be registered via in-band registration: {access, register, [{deny, all}]}.
Jetzt kann nur noch der Admin neue Benutzerzugänge anlegen. Die automatische Registrierung über den Jabber-Client schlägt fehl.
In der ejabberd-Version 2.1.11, welche in Ubuntu 14.04 LTS in den Paketquellen enthalten ist, ist die Benutzerregistrierung standardmäßig deaktiviert. Der entsprechende Eintrag lautet hier:
1 2 3 4 5 6 7 | %% No username can be registered via in-band registration: %% To enable in-band registration, replace 'deny' with 'allow' % (note that if you remove mod_register from modules list then users will not % be able to change their password as well as register). % This setting is default because it's more safe. {access, register, [{deny, all}]}. |}} |
Die webbasierte Administrationsoberfläche kann man bei Bedarf auf einen anderen Port legen - der Port 5280 wird ja nebenbei auch für HTTP-Polling benutzt - und auch an eine bestimmte Netzwerkschnittstelle binden, z.B. an die Loopback-Schnittstelle. Dafür einfach die folgende Zeile in der ejabberd.cfg-Datei suchen...
{5280, ejabberd_http, [http_poll, web_admin]}
... und durch folgende ersetzen:
{5280, ejabberd_http, [http_poll]}, {5281, ejabberd_http, [{ip, {127, 0, 0, 1}}, web_admin]}
Dabei besonders auf das Komma achten.
Unter Ubuntu 14.04 LTS sieht die Konfiguration etwas anders aus. Um die webbasierte Administrationsoberfläche zu deaktivieren, sucht man folgenden Codeblock, in der Konfigurationsdatei und kommentiert den Eintrag web_admin
aus. Auch hier ist auf die korrekte Kommasetzung zu achten.
1 2 3 4 5 6 7 8 9 10 | {5280, ejabberd_http, [ %%{request_handlers, %% [ %% {["pub", "archive"], mod_http_fileserver} %% ]}, %%captcha, http_bind, http_poll %%, %%web_admin ]} |
Manchmal möchte man bestimmten Clients einen temporären anonymen Zugang zum Server bieten, ohne gleich einen Account mit einem Passwort registrieren zu müssen.
Dafür bietet der ejabberd zwei verschiedene Protokolle an, nämlich sasl_anon und login_anon. login_anon benötigt keine besondere Unterstützung im Client. Es wird einfach jede JID/Passwort-Kombination akzeptiert, sofern die JID nicht von jemandem fest registriert wurde. sasl_anon ist dagegen ein eigenes Protokoll, mit dessen Hilfe der Server dem Client für die Dauer der Verbindung eine einzigartige, zufällige JID zuweist.
Obwohl der Server von sich aus darauf achtet, dass kein anonymer Benutzer sich eine real existierende JID von jemand anderem unter den Nagel reißt, sollte man anonyme Logins besser auf einen eigenen virtuellen Server auslagern, um Verwirrung zu vermeiden. Dazu ändert man die hosts-Zeile in der ejabberd.cfg ab und fügt einen entsprechenden Servernamen hinzu:
{hosts, ["jabber-server.tld", "anonymous.jabber-server.tld"]}.
Nun fügt man noch einen host-spezifischen Absatz ein, der die Authentifizierung regelt. (Es gibt schon einen auskommentierten Abschnitt, wo verschiedene host_config-Beispiele vorgestellt werden. An dieser Stelle passen die folgenden Zeilen sehr gut hin.)
{ host_config, "anonymous.jabber-server.tld", [{auth_method, anonymous}, {allow_multiple_connections, false}, {anonymous_protocol, sasl_anon}]}.
An der Stelle von sasl_anon kann man auch login_anon oder both eintragen, wenn man Clients verwenden will, die sasl_anon nicht unterstützen. In diesem Fall muss man je nach Verwendung evtl. auch allow_multiple_connections auf true setzen.
Im laufenden Betrieb benutzt man das Kommandozeilenwerkzeug "ejabberdctl
" zur Administration [3].
Wenn man die öffentliche Registrierung von JIDs wie oben beschrieben deaktiviert hat, muss man die Benutzerverwaltung selber übernehmen:
sudo ejabberdctl register Benutzername Servername Passwort # Benutzer hinzufügen sudo ejabberdctl unregister Benutzername Servername # Benutzer löschen
Mit folgenden Befehlen kann man ein Backup der Benutzerdatenbank anlegen bzw. wiederherstellen:
sudo ejabberdctl backup Datei # Sicherung anlegen sudo ejabberdctl restore Datei # Sicherung wiederherstellen
Folgende Befehle funktionieren auch, benutzen aber auch für Menschen lesbare Dateien:
sudo ejabberdctl dump Datei # Sicherung anlegen sudo ejabberdctl load Datei # Sicherung wiederherstellen
Wenn man keine absoluten Dateinamen benutzt, findet man die Backup-Dateien im Heimatverzeichnis von ejabberd, /var/lib/ejabberd.
Wer vorher einen jabberd1.4-Server betrieben hat und jetzt umsteigen möchte, kann einzelne Benutzerdatensätze oder komplette Serversätze in ejabberd importieren:
sudo ejabberdctl import-file /wo/auch/immer/servername.tld/benutzername.xml # Benutzer importieren sudo ejabberdctl import-dir /wo/auch/immer/servername.tld # kompletten Serverdatensatz importieren
So erfährt man wie viele Benutzer gerade online sind, welche Benutzer online sind bzw. welche Benutzerkonten überhaupt existieren:
sudo ejabberdctl connected-users-number sudo ejabberdctl connected-users sudo ejabberdctl vhost Servername registered-users ## oder: sudo ejabberdctl registered-users Servername ## in neueren Versionen
Für weitere Kommandos sei auf die Manpage von ejabberdctl verwiesen.
Wer aus irgendwelchen Gründen nicht die ejabberd-Version aus den Ubuntu-Repositories verwenden will - weil er vielleicht den Ärger mit den kaputten Erlang-Paketen von Ubuntu Edgy vermeiden will oder in der allerneuesten Version der Software eine unglaublich praktische Funktion entdeckt hat - kann auf den Universal-Installer des ejabberd-Projektes für alle Linux-Distributionen zurückgreifen, der auch schon den Erlang-Interpreter beinhaltet. (Z.B. Version 1.1.3 .)
Als erstes muss man die Datei ejabberd-<Version>-installer.bin herunterladen und ausführbar machen [6], dann startet man das selbstextrahierende Paket unter genau der Benutzerkennung, unter welcher der Server später laufen soll. Standardmäßig geschieht das durch Anlegen eines Verzeichnisses im home des entsprechenden Benutzers bzw. in /opt, falls man Root ist (nicht empfohlen). Die Installationsroutine startet mit einer Frage nach der bevorzugten Sprache. Danach darf man der Lizenz (GPL) zustimmen, und es wird nach dem Installationsverzeichnis gefragt. Es folgen die schon im obigen Konfigurationsabschnitt beschriebenen Fragen nach Domain, Admin-Account, etc. Neu ist die Frage, ob man den Server in einem Cluster aus mehreren Rechnern betreiben will. Das sollte man in den meisten Fällen verneinen.
Leider versucht das Skript nach beendeter Erstkonfiguration, den Server sofort zu starten, was wegen dem im Folgenden beschriebenen Problem unter Umständen nicht funktioniert und der Installer hängt sich auf. Wenn man aber wartet, bis der Fortschrittsbalken auf 100% steht und die Disk-Aktivität nachlässt, kann man die Routine über Strg + C abbrechen.
Das Skript ejabberdctl im bin/-Verzeichnis ist nämlich fehlerhaft, weil es in der #!-Zeile /bin/sh als Shell angibt, aber bash-spezifische Erweiterungen nutzt. Da bei Ubuntu die sh kein Link auf die bash, sondern auf dash ist, muss man also die erste Zeile wie folgt abändern, um das Skript benutzen zu können [4]:
#!/bin/bash
Ebenfalls im bin/-Verzeichnis der ejabberd-Installation finden sich Skripte namens start und stop, die genau das machen, was ihr Name vermuten lässt, nämlich den Server starten und stoppen.
Die ejabberd.cfg-Datei, zu finden im conf/-Verzeichnis, benutzt selbstverständlich dieselbe Syntax wie die aus dem Ubuntu-Paket (siehe oben), aber die Voreinstellungen sind anders - weniger sinnvoll.
Als erstes möchte man vielleicht - wie oben schon beschrieben - die automatische Registrierung neuer Benutzer sperren. Das funktioniert, indem man die access-register-Zeile folgendermaßen anpasst:
{access, register, [{deny, all}]}.
Außerdem ist der ejabberd aus dem Installer - im Gegensatz zu dem aus dem Ubuntu-Paket - standardmäßig nicht für SSL-/TLS-Verschlüsselung ausgelegt. Wer das ändern will, muss wie im folgenden Abschnitt dargestellt ein paar Kommentarzeichen ('%') verrücken:
{listen, [ %%{5222, ejabberd_c2s, [{access, c2s}, {max_stanza_size, 65536}, {shaper, c2s_shaper}]}, %% Use this line to enable SSL: %%{5223, ejabberd_c2s, [{access, c2s}, {max_stanza_size, 65536}, tls, {certfile, "/opt/ejabberd-1.1.3/conf/serv er.pem"}]}, %% %% Use those lines instead for TLS support: {5222, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper}, starttls, {certfile, "/opt/ejabberd-1.1.3/conf/serve r.pem"}]}, {5223, ejabberd_c2s, [{access, c2s}, tls, {certfile, "/opt/ejabberd-1.1.3/conf/server.pem"}]},
Es empfiehlt sich, das bin/-Verzeichnis in den eigenen Programm-Pfad aufzunehmen, damit man für die start-/stop-Skripte und ejabberdctl nicht immer den kompletten Pfad benutzen muss. Wie das geht, steht im Artikel Umgebungsvariable. Außerdem möchte man sich wahrscheinlich ein Startskript in /etc/init.d/ erstellen, um den Server gleich beim Systemstart hochzufahren [5].
Der ejabberd-Server wird mithilfe eines Skripts unter /etc/init.d/ejabberd gestartet/gestoppt. Dabei wird der Prozess unter dem Benutzer ejabberd
gestartet. Dieser Benutzer hat in /etc/passwd als Shell "/bin/sh" definiert. Einen Server-Prozess unter Linux sollte möglichst als unpriviligierter Benutzer mit möglichst wenig Rechten laufen. Dazu wird die eingetragene Shell entfernt:
sudo usermod -s /usr/sbin/nologin ejabberd
Nach dieser Änderung lässt sich ejabberd aber nicht mehr starten. Um das zu beheben, legt man zunächst eine Sicherung des bestehenden init-Skript an:
sudo cp -a /etc/init.d/ejabberd /etc/init.d/ejabberd.bak
Danach passt man das init-Skript an:
sudo sed -i 's/su $EJABBERDUSER -c/sudo -u "$EJABBERDUSER" sh -c/g' /etc/init.d/ejabberd
Jetzt sollte der Start-Befehl wieder funktionieren:
sudo service ejabberd start
Eine Besonderheit ist, dass der Server nach einem Wechsel der Host-Namens nicht mehr richtig läuft. Besser ausgedrückt, der Server kann auf den Datenbestand nicht mehr zugreifen. Wenn die Nutzerdaten z.B. über LDAP von anderer Stelle geholt werden, reicht es aus, das Verzeichnis /var/lib/ejabberd/ zu leeren. Leider gehen dabei die eingerichteten Räume verloren.
Diese Revision wurde am 18. Dezember 2016 15:28 von donar42 erstellt.