Matrix Dokumentation


Installation des Identitätsserver „mxisd“


Die folgende Anleitung beschreibt die Installation des alternativen Identitätsservers mxisd.

Was ist ein Identitätsserver?

Bei Matrix dient ein Identitätsserver dazu, die Matrix-User-ID (@benutzername:homeserver.tld) und (optional) zugehörige 3rd party IDs (3PIDs) zu speichern. Solche 3PIDs sind beispielsweise E-Mail-Adresse und Handynummer. Ein Identitätsserver übernimmt auch die Verifizierung der E-Mail-Adresse und ermöglicht die Wiederherstellung des Kennwortes, falls zuvor eine E-Mail-Adresse hinterlegt wurde.

Eine Matrix-User-ID kann ohne Identitätsserver bei einem Matrix-Server registriert und genutzt werden, für die Speicherung von 3PIDs ist jedoch ein Identitätsserver erforderlich.

Die zwei bekanntesten Implementierungen von Identitätsservern für Matrix sind Sysdent, die Referenz-Implementation, und mxisd.

Oftmals werden einfach die Identitätsserver verwendet, welche die Matrix-Entwickler bereitstellen, aktuell sind dies "matrix.org" und "vector.im". Das Problem hierbei: Die personenbezogenen Daten (3PID) landen auch auf diesen Servern im Ausland. Mit Blick auf den Datenschutz ist dies eine sehr unschöne Situation. Deswegen ist es für Betreiber eines Matrix-Servers sinnvoll, auch einen eigenen Identitätsserver zu betreiben, so dass auch diese Daten lokal gespeichert werden.

Die folgenden Abschnitte beschreiben die Installation von mxisd auf einem Linux-basierten Serversystem.

Achtung Derzeit ist es nicht möglich, eine einmal eingetragene 3PID wieder zu löschen. Das ist kein Fehler von mxisd, sondern von Synapse. Details sind hier aufgeführt: https://github.com/matrix-org/synapse/issues/4782. In der weiter unten aufgeführten Konfigurationsdatei für mxisd ist ein "session"-Block hinterlegt, der dem Rechnung trägt und über den das Hinterlegen 3PIDs deaktiviert werden kann.

Voraussetzungen

Die folgende Anleitung geht davon aus, dass folgende Voraussetzungen erfüllt sind:

  • gute Grundkenntnisse in der Administration von Linux-basierten Servern
  • eine Linux-Distribution mit Systemd als Init-System, beispielsweise Debian, Fedora oder CentOS
  • Der Matrix-Server "Synapse" ist bereits installiert und voll funktionsfähig.
  • Eine Java-Laufzeitumgebung ist bereits installiert:
    • Debian/Ubuntu: sudo apt-get install default-jre
    • Fedora: sudo dnf install java
    • Redhat: sudo yum install java
  • Der Webserver NGinx fungiert als Reverse-Proxy zu Synapse.
  • Das Serversystem verfügt über einen SMTP-Server, der E-Mails ins Internet versenden kann.
  • Das Serversystem verwendet ausschließlich IPv4. Es ist jedoch leicht möglich, die einzelnen Schritte für IPv6 anzupassen.

Installation

Die Installation von mxisd erfolgt in der Verzeichnis /usr/local/opt/mxisd/.

Wir starten mit dem Herunterladen der aktuellen Version von mxisd:

cd ~ && wget https://github.com/kamax-matrix/mxisd/releases/download/v1.3.1/mxisd.jar 

Die folgenden Installationsschritte benötigen die Rechte des Systemverwalters. Daher starten wir zunächst eine Login-Shell mit Root-Rechten:

sudo su -

Erstellen des Installationsverzeichnisses für mxisd und setzen der Zugriffsrechte:

mkdir -p /usr/local/opt/mxisd && chmod 755 /usr/local/opt/mxisd; echo "Status: $?"

Kopieren der JAR-Datei in das Installationsverzeichnis und Anpassen von Eigentümer uund Zugriffrechten:

cp [Download-Verzeichnis von mxisd.jar]/mxisd.jar /usr/local/opt/mxisd
chmod 644 /usr/local/opt/mxisd/mxisd.jar
chown -R root:root /usr/local/opt/mxisd

Aus Sicherheitsgründen soll der Identitätsserver später unter einer eigenen Benutzerkennung ausgeführt werden. Hierfür legen wir nun den Benutzer "mxisd" nebst der gleichnamigen Gruppe an:

groupadd -r mxisd
useradd -r -s /bin/false -g mxisd mxisd

Konfigurationsdatei von mxisd

Danach bereiten wir das Konfigurationsverzeichnis und die Konfigurationsdatei für mxisd vor:

mkdir /etc/mxisd

chmod 750 /etc/mxisd
touch /etc/mxisd/mxisd.yaml
chmod 640 /etc/mxisd/mxisd.yaml
chown -R root:mxisd /etc/mxisd

In die Datei /etc/mxisd/mxisd.yaml wird zunächst Folgendes eingetragen:

#######################
# Matrix config items #
#######################
# Matrix domain, same as the domain configure in your Homeserver configuration.
# NOTE: in Synapse Homeserver, the Matrix domain is defined as 'server_name' in configurat
ion file.
#
# This is used to build the various identifiers in all the features.
matrix:
  domain: '[VOLL QUALIFIZIERTER HOSTNAME DEINES MATRIX-SERVERS]'

################
# Signing keys #
################
# Absolute path for the Identity Server signing keys database.
# /!\ THIS MUST NOT BE YOUR HOMESERVER KEYS FILE /!</span>
# If this path does not exist, it will be auto-generated.
#
# During testing, /var/tmp/mxisd/keys is a possible value
# For production, recommended location shall be one of the following:
#   - /var/lib/mxisd/keys
#   - /var/opt/mxisd/keys
#   - /var/local/mxisd/keys
#
key:
  path: '/var/lib/mxisd/keys'
# Path to the SQLite DB file for mxisd internal storage
# /!\ THIS MUST NOT BE YOUR HOMESERVER DATABASE /!</span>
#
# Examples:
#  - /var/opt/mxisd/store.db
#  - /var/local/mxisd/store.db
#  - /var/lib/mxisd/store.db
#
storage:
  provider:
    sqlite:
      database: '/var/lib/mxisd/store.db'
###################
# Identity Stores #
###################
# If you are using synapse standalone and do not have an Identity store,
# see https://github.com/kamax-matrix/mxisd/blob/master/docs/stores/synapse.md#synapse-identity-store
#
# If you would like to integrate with your AD/Samba/LDAP server,
# see https://github.com/kamax-matrix/mxisd/blob/master/docs/stores/ldap.md
#
# For any other Identity store, or to simply discover them,
# see https://github.com/kamax-matrix/mxisd/blob/master/docs/stores/README.md
#################################################
# Notifications for invites/addition to profile #
#################################################
# This is mandatory to deal with anything e-mail related.
#
# For an introduction to sessions, invites and 3PIDs in general,
# see https://github.com/kamax-matrix/mxisd/blob/master/docs/threepids/session/session.md#3pid-sessions
#
# If you would like to change the content of the notifications,
# see https://github.com/kamax-matrix/mxisd/blob/master/docs/threepids/notification/template-generator.md
#
#### E-mail connector
threepid:
  medium:
    email:
      identity:
        # The e-mail to send as.
        from: "matrix-identity@[VOLLQUALIFIZIERTER HOSTNAME DEINES MATRIX-SERVERS]"
      connectors:
        smtp:
          # SMTP host
          host: "localhost"
          # SMTP port
          port: 25
          # STARTLS mode for the connection.
          # SSL/TLS is currently not supported. See https://github.com/kamax-matrix/mxisd/issues/125
          #
          # Possible values:
          #  0    Disable any kind of TLS entirely
          #  1    Enable STARTLS if supported by server (default)
          #  2    Force STARTLS and fail if not available
          #
          tls: 1
          # Login for SMTP
          login: ""
          # Password for the account
          password: ""
# --- added Kai Kalei ---
session:
  policy:
    # Set validation to 'false' to disable 3PID sessions altogether, preventing
    # users from validating emails and/or phone numbers and any subsequent
    # actions that requires them, like adding them to their profiles.
    # Unfortunately this makes currently sense because of.
    # https://github.com/matrix-org/matrix-doc/issues/1194
    validation:
      enabled: true
    # unbind.fraudulent controls warning notifications if an illegal/fraudulent.
    # 3PID removal is attempted on the Identity server. This is directly related.
    # to synapse disregard for privacy and new GDPR laws in Europe in an attempt.
    # to inform users about potential privacy leaks.
    unbind:
      fraudulent:
        sendWarning: true
############################
# Synapse Identity Store
############################
# You NEED an Identity Store. Synapse's database itself can be used as
# an Identity store, but you can use LDAP, SQL, Firebase and so on, too.
# We'll use synapse here.
# Use Synapse's database as Identity store
synapseSql:
  enabled: true
# -----------------
# SQLite
# -----------------
# If your are using SQLite for Synapse use:
#synapseSql:
#  type: sqlite
#synapseSql: 
#  connection: [ABSOLUTER PFAD ZUR SQLite-DATENBANKDATEI VON SYNAPSE]
# -------------
# PostgreSQL
# -------------
# If your are using PostgreSQL for Synapse use:
#synapseSql:
#  type: postgresql
#synapseSql:
#  connection: //localhost:5432/synapse?user=[DEIN SYNAPSE-DATENBENUTZER]&password=[KENNWORT DES SYNAPSE-DATENBENUTZERS]
# -----------------------

Bei dieser Konfiguration wird davon ausgegangen, dass die Synapse-Datenbank selbst für die Speicherung der 3PIDs genutzt wird d. h. die Synapse-Datenbank ist gleichzeitig der Identity Store für die 3PIDs. Unter "from:" muss eine geeignete Absenderadresse für Mxsid eingetragen. Diese verwendet Mxsid für die E-Mails an die Benutzer.

Zum Schluss wird die Konfigurationsdatei in Abhängigkeit von der bei Synapse verwendeten Datenbank (SQLite oder PostgreSQL) angepasst. Die Datei ist bereits für beide Varianten vorkonfiguriert. Es muss nur noch der jeweilige Block am Ende der Datei einkommentiert werden. Im Falle von PostgreSQL müssen dann auch noch Benutzernamen und Kennwort für den Zugriff auf die PostgreSQL- Datenbank analog zur Synapse-Installation bei "connection:" hinterlegt werden.

Speicherplatz für mxisd

mxisd speichert selbst auch Informationen in einer eigenen SQlite-Datenbank und benötigt Speicherplatz für seine Schlüssel. Hierfür legen wir ein Verzeichnis entsprechend an:

mkdir -p  /var/lib/mxisd && chown 750 /var/lib/mxisd; echo "Status: $?"

chown mxisd: /var/lib/mxisd

mxisd wird beim ersten Start automatisch seine Schlüssel generieren und die benötigte Datenbank anlegen.

Anpassungen an der Synapse-Konfiguration

Bei dem Matrix-Server Synapse werden die zu verwendenden 3PID-Server über die Option "trusted_third_party_id_servers" konfiguriert. Daher wird die Konfigurationsdatei von Synapse so angepasst, dass ausschließlich der eigene 3PID-Server verwenden wird:

trusted_third_party_id_servers:
            - [VOLLQUALIFIZIERTER HOSTNAME DEINES MATRIX-SERVERS]

Anpassungen an der NGinx-Konfiguration

Wenn NGinx als Reverse-Proxy für Synapse eingesetzt wird, gibt es in der zugehörigen Konfigurationsdatei von NGinx einen Block wie

location /_matrix {
    ...
}

Vor diesem Block wird nun ein weitere Block für den 3PID-Server mxisd eingefügt:

location /_matrix/identity {
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass http://127.0.0.1:8090/_matrix/identity;
}

Anschließend wird die geänderte Konfigurationsdatei von NGinx überprüft:

nginx -t

Systemd Service Unit für Mxsid

Um Mxsid in das System zu integrieren und insbesondere den automatischen Start und das Stoppen zu regeln, erstellen wir eine Systemd Service Unit für Mxsid:

touch /etc/systemd/system/mxisd.service

In die Datei /etc/systemd/system/mxisd.service wird Folgendes eingetragen:

[Unit]
Description=mxisd (matrix identity server)
After=syslog.target network.target synapse.service

[Service]
Type=simple
User=mxisd
; Our keys and database are stored in /var/lib/mxisd
StateDirectory=mxisd
; -Xms32m and  -Xmx128m are used to set the minimum and maximum.
; memory that the application can use.
ExecStart=/bin/sh -c "exec /bin/java -Xms32m -Xmx128m -jar /usr/local/opt/mxisd/mxisd.jar
Restart=on-failure
RestartSec=10
; "ProtectSystem=" takes a boolean argument or the special values "full" or "strict"..
; If true, mounts the /usr and /boot directories read-only for processes invoked by.
; this unit. If set to "full", the /etc directory is mounted read-only, too. If set.
; to "strict" the entire file system hierarchy is mounted read-only, except for.
; the API file system subtrees /dev, /proc and /sys (protect these directories.
; using PrivateDevices=, ProtectKernelTunables=, ProtectControlGroups=).
ProtectSystem=full
; Only ipv4, unix socket and netlink networking is possible
; netlink is necessary so that mxisd can list available IPs on startup
RestrictAddressFamilies=AF_INET AF_UNIX AF_NETLINK
[Install]
WantedBy=multi-user.target

Über den Befehl

systemctl daemon-reload

wird Systemd angewiesen, die neue Service-Unit-Datei einzulesen.

Damit sind Installation und Konfiguration grundsätzlich angeschlossen.

Erster Start von Mxsid

Mxsid kann nun über den Befehl

systemctl start mxisd.service; systemctl --no-pager -l status mxisd.service

erstmalig gestartet werden. Falls der Start erfolgreich ist, wird Mxsid für den automatischen Start konfiguriert:

systemctl enable mxisd.service

Neustart von Synapse und NGinx

Zum Schluss müssen nur noch Synapse und NGinx neu gestartet werden, damit die Änderungen an deren Konfigurationsdateien aktiv werden:

systemctl restart nginx.service; systemctl --no-pager -l status nginx.service

systemctl stop synapse.service; sleep 1; systemctl start synapse.service; systemctl --no-pager -l status synapse.service

Test des 3PID-Servers

Testen kann man den Erfolg der Installation, indem man versucht, bei einem Benutzer auf dem eigenen Matrix-Server in den Einstellungen eine E-Mail-Adresse über den Matrix-Client Riot zu hinterlegen. mxisd wird eine E-Mail mit einem Link versenden. Erst, wenn man diesen Link im Browser aufgerufen hat, klickt man im Riot-Client auf "Fortsetzen".

Autoren

Kai Kalei <@kai:matrix.chat-secure.de>