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
doc:appunti:linux:sa:matrix [2021/01/19 11:44] – [Installazione della app Element] niccolodoc:appunti:linux:sa:matrix [2024/03/27 15:05] (current) 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 273: Line 291:
  
 La versione **Android**, essendo un programma **libero ed open source**, è scaricabile sia dal **[[https://play.google.com/store/apps/details?id=im.vector.app|Google Play]]** che da repository alternativi come **[[https://f-droid.org/en/packages/im.vector.app/|F-Droid]]**. Fra le due versioni c'è una sostanziale differenza sia in termini di dimensione (circa **22 Mb** per la versione Google Play, **50 Mb** per la versione F-Droid), sia in termini di funzionalità; la versione Google Play infatti utilizza **i servizi Google** per la gestione delle notifiche, ottimizzando il traffico e la gestione della batteria a discapito della libertà: infatti è necessario avere **un account Google attivo** per utilizzarla. La versione **Android**, essendo un programma **libero ed open source**, è scaricabile sia dal **[[https://play.google.com/store/apps/details?id=im.vector.app|Google Play]]** che da repository alternativi come **[[https://f-droid.org/en/packages/im.vector.app/|F-Droid]]**. Fra le due versioni c'è una sostanziale differenza sia in termini di dimensione (circa **22 Mb** per la versione Google Play, **50 Mb** per la versione F-Droid), sia in termini di funzionalità; la versione Google Play infatti utilizza **i servizi Google** per la gestione delle notifiche, ottimizzando il traffico e la gestione della batteria a discapito della libertà: infatti è necessario avere **un account Google attivo** per utilizzarla.
 +
 +===== Security key =====
 +
 +Un account Matrix è costituito da un **login** e una **password**, ma c'è un altro elemento altrettanto importante: le **chiavi di cifratura** di tutte le chat effettuate. Tali chiavi sono memorizzate nella sessione del client (app Element sullo smartphone, oppure interfaccia web riot.im). Se la sessione viene chiusa o distrutta potremo accedere nuovamente al nostro account con login/password, ma non verranno decifrate tutte le chat passate, a meno che non abbiamo salvato la **security key**. Tale chiave verrà chiesta quando useremo il client per accedere nuovamente al nostro account.
  
 ===== Perdita della password ===== ===== Perdita della password =====
Line 283: 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.1611053050.txt.gz · Last modified: 2021/01/19 11:44 by niccolo