User Tools

Site Tools


doc:appunti:linux:sa:matrix

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
doc:appunti:linux:sa:matrix [2021/01/19 12:00] – [Perdita della password] niccolodoc:appunti:linux:sa:matrix [2024/03/27 15:05] niccolo
Line 1: Line 1:
 ====== Matrix Messenger ====== ====== Matrix Messenger ======
  
-Come installare un server per la messaggistica **[[https://matrix.org/|Matrix]]** su una **Debian GNU/Linux 10 Buster**.+{{ .:matrix:matrix-synapse-running.png?280|Homeserver Matrix-Synapse is running}} 
 +**[[https://matrix.org/|Matrix]]** è un sistema di comunicazione in tempo reale che offre servizi di chat, chiamata e videochiamata in modo simile ai famosi **[[wpit>WhatsApp]]**, **[[wpit>Telegram]]** o **[[wpit>Signal_(software)|Signal]]**, ma a differenza di questi è totalmente **decentralizzato** (cioè privo di una autorità centrale) e **distribuito** (si appoggia su molti server che funzionano in federazione). Il sistema funziona grazie a numerosi **homeserver** che ognuno può installare per partecipare al funzionamento del network. Il ruolo di un server Matrix è quello di **memorizzare le chat personali** di un utente e le **informazioni dell'account** in un modo molto simile a quello di un server di posta IMAP/SMTP. In questa pagina vediamo come installare un server per la messaggistica Matrix su una **Debian GNU/Linux 10 Buster**.
  
-Il ruolo di un server Matrix è quello di **memorizzare le chat personali** di un utente e le **informazioni dell'account** in un modo molto simile a quello di un server di posta IMAP/SMTP. +Il server di riferimento sviluppato da Matrix per la propria piattaforma è **Matrix Synapse**. Si tratta di una implementazione adeguata ad eseguire un **home server**. Queste sono le caratteristiche della nostra installazione:
- +
-Il server di riferimento sviluppato da Matrix per la propria piattaforma è **Matrix Synapse**. Si tratta di una implementazione adeguata ad eseguire un **home server**. +
- +
-Queste sono le caratteristiche della nostra installazione:+
  
   * Installazione di un server sotto un nome di dominio, esempio **matrix.example.org**.   * Installazione di un server sotto un nome di dominio, esempio **matrix.example.org**.
Line 74: Line 71:
  
 Ciò significa che **ogni utente** di questo nodo Matrix dovrà essere **creato dall'amministratore**. In alternativa è possibile avere l'auto-registrazione, come viene offerta ad esempio dal nodo di riferimento **matrix.org**. Ciò significa che **ogni utente** di questo nodo Matrix dovrà essere **creato dall'amministratore**. In alternativa è possibile avere l'auto-registrazione, come viene offerta ad esempio dal nodo di riferimento **matrix.org**.
- 
  
 ==== Ottenere i certificati SSL/TLS da Let's Encrypt ==== ==== Ottenere i certificati SSL/TLS da Let's Encrypt ====
Line 141: Line 137:
  
 Con la configurazione vista sopra, chiamando l'URL **%%http://matrix.example.org/%%**, si viene rediretti prima verso il protocollo HTTPS e quindi al percorso **%%https://matrix.example.org/_matrix/static/%%**. A questo URL c'è semplicemente un messaggio che avvisa dell'homeserver Synapse in esecuzione e invita ad **installare un client**. Con la configurazione vista sopra, chiamando l'URL **%%http://matrix.example.org/%%**, si viene rediretti prima verso il protocollo HTTPS e quindi al percorso **%%https://matrix.example.org/_matrix/static/%%**. A questo URL c'è semplicemente un messaggio che avvisa dell'homeserver Synapse in esecuzione e invita ad **installare un client**.
 +
 ==== Alternativa: matrix-synapse senza reverse proxy ==== ==== Alternativa: matrix-synapse senza reverse proxy ====
  
Line 157: Line 154:
 <code> <code>
 openssl dhparam -out /etc/matrix-synapse/homeserver.tls.dh 2048 openssl dhparam -out /etc/matrix-synapse/homeserver.tls.dh 2048
-</code> 
- 
-==== Creazione di un account ==== 
- 
-Avendo disabilitato l'auto-registrazione, si deve creare manualmente il primo **account**, essendo il primo esistente lo faremo di tipo **amministratore**. Useremo il comando **register_new_matrix_user**, che però richiede la seguente opzione nel file di configurazione: 
- 
-<file> 
-registration_shared_secret: MySecret 
-</file> 
- 
-Eseguendo il comando successivo sulla stessa macchina, non è necessario digitare tale password; questa verrà letta direttamente dal file yaml: 
- 
-<code> 
-register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008 
-</code> 
- 
-<code> 
-New user localpart [root]: niccolo 
-Password: 
-Confirm password: 
-Make admin [no]: yes 
-Sending registration request... 
-Success! 
 </code> </code>
  
 ==== Configurazione del DNS ==== ==== Configurazione del DNS ====
  
-Per far funzionare la federazione tra server Matrix è necessario dichiarare un **record SRV** nella **zona DNS**. Supponiamo che la zona DNS sia **example.org**, questa è la relativa riga di configurazione per **Bind9**:+Dopo aver scelto il nome del nostro homeserver è opportuno registrarlo nel DNS sia come record di tipo **A** che come record di tipo **SRV**. Dichiarare il record SRV è necessario per far funzionare la federazione tra server Matrix. Supponiamo che la zona DNS sia **example.org**, queste sono le righe di configurazione per **Bind9**:
  
 <file> <file>
 +matrix        IN  A    123.234.34.45
 _matrix._tcp  IN  SRV  0 10 8448 matrix.example.org. _matrix._tcp  IN  SRV  0 10 8448 matrix.example.org.
 </file> </file>
  
-Gli utenti del nostro nodo saranno conosciuti alla federazione con il nome **%%@username:example.org%%** oppure con **%%@username:matrix.example.org%%** FIXME (verificare se è vero).+Gli utenti del nostro nodo saranno conosciuti alla federazione con il nome **%%@username:matrix.example.org%%**. 
 ==== Debug ==== ==== Debug ====
  
Line 259: Line 235:
   - Nella app è possibile adesso tappare il pulsante **prosegui**.   - Nella app è possibile adesso tappare il pulsante **prosegui**.
   - Per ulteriore conferma è necessario **immettere la propria password** dell'account Matrix.   - Per ulteriore conferma è necessario **immettere la propria password** dell'account Matrix.
 +
 +===== Gestione utenti =====
 +
 +==== Creazione di un account ====
 +
 +Avendo disabilitato l'auto-registrazione, si deve creare manualmente il primo **account**, essendo il primo esistente lo faremo di tipo **amministratore**. Useremo il comando **register_new_matrix_user**, che però richiede la seguente opzione nel file di configurazione:
 +
 +<file>
 +registration_shared_secret: MySecret
 +</file>
 +
 +Eseguendo il comando successivo sulla stessa macchina, non è necessario digitare tale password; questa verrà letta direttamente dal file yaml:
 +
 +<code>
 +register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008
 +</code>
 +
 +<code>
 +New user localpart [root]: niccolo
 +Password:
 +Confirm password:
 +Make admin [no]: yes
 +Sending registration request...
 +Success!
 +</code>
 +
 +==== Reset password ====
 +
 +Generare un nuovo hash con il tool **hash_password** (incluso nel pacchetto Debian **matrix-synapse**):
 +
 +<code>
 +hash_password -p MySecret
 +$2b$12$6Q.zARcyW0nnRzmmo8d1H.NblSGbj309lBevr/1kiGmtE0FFJGP0S
 +</code>
 +
 +Collegarsi al database di backend, individuare l'utente e modificare la tabella:
 +
 +<code sql>
 +SELECT name FROM users;
 +SET password_hash='$2b$12$6Q.zARcyW0nnRzmmo8d1H.NblSGbj309lBevr/1kiGmtE0FFJGP0S' 
 +WHERE name='@niccolo:matrix.rigacci.org';
 +</code>
  
 ===== Test dal client web riot.im ===== ===== Test dal client web riot.im =====
Line 287: Line 305:
   * Se a suo tempo abbiamo salvato il **codice di decifrazione**, sarà possibile recuperare le vecchie chat.   * Se a suo tempo abbiamo salvato il **codice di decifrazione**, sarà possibile recuperare le vecchie chat.
  
 +===== Verifica identità =====
 +
 +{{.:matrix:element-user-unverified.png?200 |Element/Matrix: Crittografia end-to-end attiva}}
 +In una chat di messaggi diretti, quando la **crittografia end-to-end** è attiva, compare il simbolo di uno **scudo nero** sopra l'icona dell'interlocutore. Questo garantisce che i messaggi sono **cifrati appena escono dal nostro dispositivo** e vengono decifrati solo sul dispositivo del nostro interlocutore. Neanche l'amministratore dell'homeserver può leggerne il contenuto. Questo tuttavia **non garantisce l'identità dell'interlocutore**; se vogliamo avere la certezza che l'interlocutore sia davvero chi dice di essere, dobbiamo scambiarci un codice di conferma su un canale diverso da Matrix.
 +
 +{{.:matrix:element-user-verified.png?200 |Element/Matrix: Crittografia end-to-end attiva e identità verificata}}
 +La via più semplice è **lo scambio di un codice QR in presenza fisica**. Per farlo è sufficiente che uno dei due interlocutori faccia tap sull'intestazione della chat, scelga il menu **2 persone**, il nome dell'**interlocutore** e quindi **Sicurezza** => **Verifica**. Viene avviata una procedura durante la quale uno dei due smartphone **genera a video un codice QR** e l'altro **avvia la fotocamera** per scansionare tale codice. Al termine della procedura l'icona dell'interlocutore avrà il simbolo di uno **scudo verde**.
 +
 +===== Farsi trovare =====
 +
 +Un **sistema di directory** (elenco) consente di cercare e trovare l'ID Matrix di una persona a partire dall'**indirizzo email** oppure da un **numero di telefono**. Al momento Matrix **non offre un sistema di Identity Server distribuito** simile alla federazione degli homeserver; non è facile delegare la verifica di email o numeri di telefono. Per questo motivo attualmente viene suggerito di **attivare in maniera facoltativa** l'utilizzo dell'identity server centralizzato **%%https://vector.im%%**. Nella app Element è sufficiente accedere alle **Impostazioni** => **Generali** => **Farsi trovare** e inserire l'URL del server. Quindi sarà possibile pubblicare il nostro indirizzo email e associarlo al nostro ID Matrix (vector.im provvede ad inviare una email di verifica). Per effettuare questa operazione il nostro homeserver deve supportare l'invio di email.
 +
 +In maniera analoga è possibile pubblicare sull'Identity Server anche il nostro numero di telefono, ma anche in questo caso il nostro homeserver deve supportare un meccanismo per la **verifica del numero di telefono** (ad esempio l'invio di un codice di conferma tramite SMS).
 +
 +**ATTENZIONE**: Questa impostazione è del tutto **facoltativa**: si possono utilizzare tutti i servizi Matrix **senza utilizzare un Identity Server**.
 +
 +===== Client web =====
 +
 +Oltre alla **app Element** per Android e iOS, esiste anche un **client basato su web**, si tratta di **[[https://matrix.org/docs/projects/client/element|Element Web]]** (chiamato in precedenza //Riot// oppure //riot-web//), scaricabile dal **[[https://github.com/vector-im/element-web|repository GitHub]]**. È possibile installarlo sul proprio server web oppure utilizzare l'istanza presente su **[[https://app.element.io/]]**.
 +
 +**ATTENZIONE**: Effettuare il **logout** dal client web può essere operazione pericolosa se non si salva la **Security Key** (chiamata anche **recovery key**), infatti le chiavi crittografiche vivono nella sessione del browser e vengono perse se si chiude la sessione. Si deve fare una copia della **Security Key** per poter recuperare tutte le chat passate. Quando si effettua un **nuovo login** verrà chiesta la Security Key per sbloccare le vecchie chat, in alternativa, se abbiamo un altro client correttamente connesso, sarà possibile autorizzare il nostro accesso dalla sessione sull'altro client.
 +
 +===== Migrazione da SQLite a Postgres =====
 +
 +L'installazione predefinita di **matrix-synapse** in Debian utilizza un database SQLite3 (file **/var/lib/matrix-synapse/homeserver.db**). Le **[[https://matrix.org/blog/2019/12/13/synapse-1-7-0-released|note di rilascio per la versione 1.7.0]]** suggeriscono di migrare a Postgres per motivi di prestazioni, soprattutto se si partecipa alla federazione Matrix. Esistono delle opportune **[[https://github.com/matrix-org/synapse/blob/v1.7.0/docs/postgres.md|istruzioni per utilizzare Postgres]]**. Le istruzioni qui riportate sono semplificate leggermente diverse per adeguarsi all'ambiente Debian.
 +
 +Verificate che siano installati i pacchetti Debian:
 +
 +  * **postgresql** - Object-relational SQL database
 +  * **python3-psycopg2** - Python 3 module for PostgreSQL
 +  * **libpq5** - PostgreSQL C client library
 +
 +Cambiare utente in **postgres** ed eseguire nella shell **psql** i seguenti comandi SQL:
 +
 +<code sql>
 +CREATE USER synapse_user PASSWORD 'MyDbSecret';
 +CREATE DATABASE synapse
 +    ENCODING 'UTF8'
 +    LC_COLLATE='C'
 +    LC_CTYPE='C'
 +    template=template0
 +    OWNER synapse_user;
 +</code>
 +
 +Nel file di configurazione **/etc/matrix-synapse/homeserver.yaml** deve esserci il parametro **server_name**, che invece con l'installazione Debian **non c'è** (pacchetto matrix-synapse versione **1.24.0-1~bpo10+1**). Per eseguire lo script **synapse_port_db** è indispensabile aggiungerlo:
 +
 +<file>
 +server_name: "matrix.example.org"
 +</file>
 +
 +Preparare una nuova versione del file di configurazione **/etc/matrix-synapse/homeserver.pg.yaml** dove cambia solo la sezione **database**:
 +
 +<file>
 +# Database configuration
 +database:
 +  name: "psycopg2"
 +  args:
 +    user: synapse_user
 +    password: MyDbSecret
 +    database: synapse
 +    host: 127.0.0.1
 +    cp_min: 5
 +    cp_max: 10
 +</file>
 +
 +Spostarsi nella directory **/var/lib/matrix-synapse/** ed eseguire i sequenti comandi:
 +
 +<code bash>
 +#!/bin/sh -xe
 +cd /var/lib/matrix-synapse
 +systemctl stop matrix-synapse.service
 +synapse_port_db \
 +    --sqlite-database /var/lib/matrix-synapse/homeserver.db \
 +    --postgres-config /etc/matrix-synapse/homeserver.pg.yaml
 +mv /etc/matrix-synapse/homeserver.yaml /etc/matrix-synapse/homeserver.yaml.bak
 +mv /etc/matrix-synapse/homeserver.pg.yaml /etc/matrix-synapse/homeserver.yaml
 +systemctl start matrix-synapse.service
 +</code>
 +
 +La nostra ricetta semplificata **tiene fermo il servizio Matrix per tutto il tempo della migrazione**. Con database di una certa dimensione questa operazione potrebbe richiedere diversi minuti; vedere le **[[https://github.com/matrix-org/synapse/blob/v1.7.0/docs/postgres.md|istruzioni originali]]** per un metodo che esegue la migrazione in due o tre **passaggi incrementali**.
  
 ===== Web References ===== ===== Web References =====
doc/appunti/linux/sa/matrix.txt · Last modified: 2024/04/15 16:46 by niccolo