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 11:44] – [Installazione della app Element] niccolodoc:appunti:linux:sa:matrix [2024/03/27 15:04] – [Creazione di un account] 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 158: Line 155:
 openssl dhparam -out /etc/matrix-synapse/homeserver.tls.dh 2048 openssl dhparam -out /etc/matrix-synapse/homeserver.tls.dh 2048
 </code> </code>
 +
 +===== Gestione utenti =====
  
 ==== Creazione di un account ==== ==== Creazione di un account ====
Line 181: Line 180:
 Success! Success!
 </code> </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>
 +
  
 ==== 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 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.txt · Last modified: 2024/04/15 16:46 by niccolo