Hallo zusammen,
ich habe mir vor ca. 3 Jahren ein Synapse/Matrix-Server aufgesetzt. Dank Docker / docker-compose ist das kinderleicht, auch wenn ich aktuell noch keine (Video-)Telefonate durchführen kann, da ich noch keinen coturn-Server hinzugefügt habe.
Nichts desto Trotz ist es als reiner Messenger echt Gold wert, vor allem in der Familie nutzen wir das ganze intensiv.
Das regelmäßige Problem:
Wenn eines meiner Familienmitglieder ein neues Handy hat, braucht man die Zugangsdaten, da man das Passwort nur einmalig eingibt, hat man das nach jahrelanger Nicht-Eingabe vergessen.
Neulich war es wieder so weit, leider hatte ich gerade Stress und keine Zeit, so habe ich mit Biegen und Brechen irgendwie schnell einen neuen Nutzer eingerichtet, anstatt das Kennwort des bestehenden Nutzers zu ändern, obwohl das relativ einfach ist.
Damit ich das beim nächsten Mal wieder nicht vergessen, hier ein kurzer Artikel dazu.
Mein Synapse/Matrix läuft wie oben erwähnt als Docker/docker-compose-Image. Bevor ich nun das Passwort resetten kann, brauche ich einen Admin-Access-Token. Dazu logge ich mich in meinen (Linux-)Server ein und schaue erst mal, welche Container-ID mein docker-Container besitzt:
docker ps
Anschließend logge ich mich auf dem Docker-Container ein mit:
docker exec -it 4cf9380e590d /bin/bash
Jetzt muss ich mir über die sqlite-Datenbank einen token ermitteln. Interessanterweise hatte mein Docker-Image keine sqlite-Installation daher musste ich das entsprechend nachinstallieren:
apt update && apt -y install sqlite3
Nun müsst ihr Euch in die Datenbank einloggen:
sqlite3 /data/homeserver.db
Ggf. habt ihr andere Pfade, aber wenn ihr das Docker-Image und docker-compose.yml nutzt, sollte die Datenbank im /data-Verzeichnis liegen.
Ruft nun die für euch gültigen Tokens ab:
SELECT token FROM access_tokens WHERE user_id='<eureNutzerId>';
Dabei ist wichtig, dass ihr als „<eureNutzerId>“ entsprechend die NutzerId in der Form: @nutzername:servername angebt.
Außerdem muss dieser Nutzer ein Admin-Nutzer sein. In der Regel erhaltet ihr mehr als einen Token, kopiert Euch einfach einen (z.B. den ersten) davon.
Wenn Ihr euch das rauskopiert habt, könnt ihr die SQL-Sitzung mit .exit oder mit Ctrl + D verlassen.
Nun könnt ihr über ein Webservice-Testtool (SoapUI, Postman, …) aber natürlich auch über curl entsprechend die Daten abrufen. Gebt dabei das kopierte Token als Bearer-Token für den entsprechenden Request an. Nur so könnt ihr dann auch die Daten abrufen.
Eine Übersicht über mögliche Befehle findet ihr hier: https://matrix-org.github.io/synapse/latest/usage/administration/admin_api/index.html
Am Beispiel von Postman hier mal, wie man ein Passwort zurücksetzt:
- Macht einen neuen Request auf, wählt als Art POST auf. Gebt die entsprechende URL an https://<serverName>/_synapse/admin/v1/reset_password/<nutzerId>
- Wählt unter „Authorization“ : Bearer Token und tragt als Token den im vorherigen Schritt kopierten Token ein
- wählt unter Body als Typ: raw aus, wählt dann als „Format“ json und packt in den Body ein Json-Objekt mit den Daten
- „new_password“: „<euerNeuesPasswort>“
- „logout_devices“: true
Wenn ihr das absendet, soll als Ergebnis (unterer Bereich) i.d.R. ein leeres Objekt zurückkommen. Ist irgendetwas schief gelaufen, sollten dann irgendwelche Fehler angezeigt werden.
Ich werde in Kürze mal ein Tutorial zum Aufsetzen eines Matrix-Servers mit CoTurn online stellen, damit ihr dann selbst einen entsprechenden Server bereitstellen könnt.
Bis dahin, machts gut.