+++ 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 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 * 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) --- ### 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 * https://github.com/tijn/awesome-password-store --- # 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)