presentazione-pass/content/_index.md

254 lines
7.1 KiB
Markdown
Raw Permalink Normal View History

2020-06-19 21:42:18 +02:00
+++
title = "Introduzione a pass"
outputs = ["Reveal"]
+++
2020-06-29 20:11:23 +02:00
## Il problema della condivisione dei segreti
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
* 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.
2020-06-19 21:42:18 +02:00
* attenzione a con chi si condivide, la fiducia nelle pratiche altrui.
* quando e' necessario condividere un segreto ?
---
2020-06-29 20:11:23 +02:00
### problematiche nella condivisione dei segreti
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
* i segreti devono essere custoditi e trasmessi crittati
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
* i segreti devono essere disponibili per il gruppo in modo immediato (no telefonate in urgenza)
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
* gli aggiornamenti devono essere il piu' possibile automatizzati
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
* deve essere semplice revocare l'accesso ai segreti
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
* deve essere semplice aggiungere una persona all'accesso dei segreti.
2020-06-19 21:42:18 +02:00
---
2020-06-29 20:11:23 +02:00
#### il "formato" in cui salvare i segreti
2020-06-19 21:42:18 +02:00
ovviamente devono essere crittati in qualche modo:
2020-06-29 20:11:23 +02:00
* crittografia simmetrica: una password uguale per tutti.
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
e' piu' semplice da implementare, ma c'e' il problema di comunicare la password a tutti
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
* crittografia asimmetrica: ognuno ha le sue credenziali per decrittare
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
richiede che tutti usino un software che supporti questa funzione (es. gnupg)
* un file unico con tutto (es. keepassxc) o un file per segreto
2020-06-19 21:42:18 +02:00
---
2020-06-29 20:11:23 +02:00
### il modo in cui condividere i segreti
ce ne sono a bizzeffe, es.
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
* mail - il piu' semplice ma non automatizzato
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
* cloud - puo' essere manuale o automatizzato ma non e' detto che ci sia il versioning
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
* git - puo' essere automatizzato e ha il versioning, e pass ne automatizza l'uso
2020-06-19 21:42:18 +02:00
---
# PASS
https://www.passwordstore.org/
2020-06-29 20:11:23 +02:00
$ sudo apt-get install pass
2020-06-19 21:42:18 +02:00
* 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.
---
2020-06-29 20:11:23 +02:00
### 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]
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
$ pass init KEY-ID
2020-06-19 21:42:18 +02:00
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).
---
2020-06-29 20:11:23 +02:00
### Aggiunta di una password
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
$ pass generate unit/wiki 32
2020-06-19 21:42:18 +02:00
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
2020-06-29 20:11:23 +02:00
$ pass insert unit/ldap-root
2020-06-19 21:42:18 +02:00
aggiunge una password che deve essere digitata (2 volte per conferma)
---
2020-06-29 20:11:23 +02:00
### Visualizzazione di una password
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
$ pass ls (o anche solo pass)
2020-06-19 21:42:18 +02:00
vi mostra tutto l'albero delle password salvate
2020-06-29 20:11:23 +02:00
$ pass show unit/wiki
2020-06-19 21:42:18 +02:00
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"
---
2020-06-29 20:11:23 +02:00
### modifica ed eliminazione di una password
2020-06-19 21:42:18 +02:00
modificare una password esistente
2020-06-29 20:11:23 +02:00
$ pass edit unit/wiki
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
eliminare una password
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
$ pass rm unit/wiki
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
spostare o rinominare una password
$ pass mv unit/ldap-root unit/slapd/root
2020-06-19 21:42:18 +02:00
---
2020-06-29 20:11:23 +02:00
### organizzare le password in cartelle/progetti
2020-06-19 21:42:18 +02:00
le password possono salvate come un albero di cartelle e files
2020-06-29 20:11:23 +02:00
$ pass insert personal/bancaetica/pin
$ pass insert personal/autistici.org/mail
2020-06-19 21:42:18 +02:00
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
---
2020-06-29 20:11:23 +02:00
### 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)
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
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
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
---
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
## pass clients
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
* passmenu (dmenu script)
* rofi-pass (https://www.youtube.com/watch?v=VlHBRYTtm3s)
* https://gitlab.com/repomaa/autopass.cr
* qtpass (GUI per linux)
* passff (firefox extension, richiede passff-host)
* browserpass (chrome extension)
* password-store.el (emacs package)
* pass-git-helper (git credentials helper)
2020-06-19 21:42:18 +02:00
---
2020-06-29 20:11:23 +02:00
### la distribuzione dei segreti
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
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.
2020-06-19 21:42:18 +02:00
inoltre e' possibile creare un repository git per i vari progetti, sincronizzando quindi i dati dei
2020-06-29 20:11:23 +02:00
diversi progetti in modo compartimentato.
2020-06-19 21:42:18 +02:00
---
2020-06-29 20:11:23 +02:00
### 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.
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
ovviamente il repository e' bene che non sia pubblico (al momento e' privato ai membri di unit come definiti in gitea).
2020-06-19 21:42:18 +02:00
---
2020-06-29 20:11:23 +02:00
### l'automazione di git
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
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.
2020-06-19 21:42:18 +02:00
---
2020-06-29 20:11:23 +02:00
### aggiungere chiavi di crittazione
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
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
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
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.
2020-06-19 21:42:18 +02:00
2020-06-29 20:11:23 +02:00
$ 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
* https://github.com/tijn/awesome-password-store
---
2020-06-19 21:42:18 +02:00
# accortezze
* se qualcuno vede la cartella delle password, dai nomi dei file puo' capire a cosa serve la password
2020-06-29 20:11:23 +02:00
che c'e' in quel file.
2020-06-19 21:42:18 +02:00
* non si deve usare su server remoti (perche' non e' una buona idea usare GPG su macchine remote).
2020-06-29 20:11:23 +02:00
* 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)