presentazione-pass/content/_index.md

7.1 KiB

+++ title = "Introduzione a pass" outputs = ["Reveal"]

+++

Il problema della condivisione dei segreti

  • i segreti "informatici" possono essere piu' inviolabili di un caveau, vantaggi e svantaggi.

  • condividere i segreti alleggerisce la centralita' dell'individuo per la loro recuperabilita', il rovescio della medaglia e' che la superficie di attacco aumenta.

  • attenzione a con chi si condivide, la fiducia nelle pratiche altrui.

  • quando e' necessario condividere un segreto ?


problematiche nella condivisione dei segreti

  • i segreti devono essere custoditi e trasmessi crittati

  • i segreti devono essere disponibili per il gruppo in modo immediato (no telefonate in urgenza)

  • gli aggiornamenti devono essere il piu' possibile automatizzati

  • deve essere semplice revocare l'accesso ai segreti

  • deve essere semplice aggiungere una persona all'accesso dei segreti.


il "formato" in cui salvare i segreti

ovviamente devono essere crittati in qualche modo:

  • crittografia simmetrica: una password uguale per tutti.

    e' piu' semplice da implementare, ma c'e' il problema di comunicare la password a tutti

  • crittografia asimmetrica: ognuno ha le sue credenziali per decrittare

    richiede che tutti usino un software che supporti questa funzione (es. gnupg)

  • un file unico con tutto (es. keepassxc) o un file per segreto


il modo in cui condividere i segreti

ce ne sono a bizzeffe, es.

  • mail - il piu' semplice ma non automatizzato

  • cloud - puo' essere manuale o automatizzato ma non e' detto che ci sia il versioning

  • git - puo' essere automatizzato e ha il versioning, e pass ne automatizza l'uso


PASS

https://www.passwordstore.org/

$ sudo apt-get install pass
  • permette di salvare ogni singola password in un file crittato con gpg

  • e' possibile specificare piu' di una chiave per cui crittare le password

  • le password possono essere divise per progetto, ogni progetto con i suoi membri.


Inizializzazione dello store

$ gpg  --keyid-format long  --list-keys putro@autistici.org

pub   rsa4096/EA0C9FEE5FAC40A1 2018-04-22 [SC] [expires: 2028-04-19]
     6CD5DB9995A2519D38A635E6EA0C9FEE5FAC40A1
uid                 [ultimate] putro <putro@autistici.org>
sub   rsa4096/FAD54D2D6C585FCE 2018-04-22 [E] [expires: 2028-04-19]


$ pass init KEY-ID

questo crea la cartella $HOME/.password-store/ contenente il file .gpg-id che contiene il KEY-ID (che puo' essere sia il key id della chiave che un indirizzo email)

in genere meglio usare il key-id per essere certi di usare proprio la chiave che vogliamo, e non semplicemente la chiave associata a un indirizzo email (che chiunque potrebbe creare).


Aggiunta di una password

$ pass generate unit/wiki 32

genera (automaticamente) una password di 32 caratteri casuali e la salva crittata per la chiave definita in $HOME/.password-store/.key-id nel file $HOME/.password-store/unit/wiki.gpg

$ pass insert unit/ldap-root

aggiunge una password che deve essere digitata (2 volte per conferma)


Visualizzazione di una password

$ pass ls  (o anche solo pass)

vi mostra tutto l'albero delle password salvate

$ pass show unit/wiki

vi mostra la password (a schermo) dopo averla decrittata (puo' essere necessario digitare la password della chiave gpg se il gpg-agent non l'ha in memoria). Per non mostrarla a video ma copiarla nella clipboard aggiungere l'opzione "-c"


modifica ed eliminazione di una password

modificare una password esistente

$ pass edit unit/wiki

eliminare una password

$ pass rm unit/wiki

spostare o rinominare una password

$ pass mv unit/ldap-root unit/slapd/root

organizzare le password in cartelle/progetti

le password possono salvate come un albero di cartelle e files

$ pass insert personal/bancaetica/pin

$ pass insert personal/autistici.org/mail

ora potete vedere le password divise per le varie cartelle/directory, in pratica ogni directory puo' essere un progetto ogni directory/progetto puo' avere il suo .gpg-id che contiene le chiavi per cui crittare le pwd in quel progetto


il multiline

con l'opzione -m pass vi permette di inserire piu' dati in un file, non solo la password ma ad esempio che lo username (utile per i form di login nei siti)

Yw|ZSNH!}z"6{ym9pI
URL: *.pippo.com/*
Username: Chicken@example.com
Secret Question 1: What is your childhood best friend's superhero fantasy?
Phone Support PIN #: 84719

pass clients


la distribuzione dei segreti

bisogna prendere tutta la cartella del progetto e passarla in qualche modo a chi di dovere

si puo' fare in molti modi, ma forse il piu' comodo e' git, anche perche' consente il versioning.

inoltre e' possibile creare un repository git per i vari progetti, sincronizzando quindi i dati dei diversi progetti in modo compartimentato.


impostare pass per il progetto "unit"

$ cd ~/.passwordstore

$ git clone ssh://git@git.abbiamoundominio.org:10022/unit/pass.git unit

in questo modo cloniamo il repository pass di unit, che contiene anche il .gpg-id con le chiavi per cui crittare.

ovviamente il repository e' bene che non sia pubblico (al momento e' privato ai membri di unit come definiti in gitea).


l'automazione di git

ogni volta che modifichiamo qualcosa nel repository, pass crea automaticamente un commit

se si crea un file unit/.git/hooks/post-commit che contiene

git pull
git push

e lo si rende eseguibile, ad ogni modifica c'e' automaticamente il pull/push

P.S. nel gitignore e' specificato di ignorare qualsiasi file eccetto il .gpg-id e i files .gpg, per evitare di committare cose che non si dovrebbero.


aggiungere chiavi di crittazione

se ad es. Terry entra nel progetto unit, bisogna aggiungere il suo key-id al file .gpg-id del progetto, in ~/.password-store/unit/.gpg-id

NOTA IMPORTANTE: la sua chiave deve essere "trusted", quindi dovete importarla anche nel vostro keyring personale e impostare il trust a livello ultimate, oppure firmarla, ma SOLO SE AVETE VERIFICATO che la chiave sia davvero fidata.

$ gpg --edit-key jane@acme.org
$ gpg> lsign

e poi il progetto va reinizializzato in modo che tutte le pwd al suo interno siano recrittate usando i key-id aggiornati.

$ pass init -p unit/ $(cat ~/.password-store/unit/.gpg-id)

estensioni


accortezze

  • se qualcuno vede la cartella delle password, dai nomi dei file puo' capire a cosa serve la password che c'e' in quel file.

  • non si deve usare su server remoti (perche' non e' una buona idea usare GPG su macchine remote).

  • il .gpg-id contiene le chiavi per cui crittare, VERIFICARE sempre che le chiavi siano quelle giuste (quindi prima di dare un trust o di firmarle, essere certi dell'autenticita' della chiave)