Un gestionnaire de mot de passe

Avec vim(1) et gpg(1), c'est facile ! Dans votre .vimrc, ajoutez :

" Transparent editing of gpg encrypted files.
" Placed Public Domain by Wouter Hanegraaff <wouter@blub.net>
" (asc support and sh -c"..." added by Osamu Aoki)
augroup aencrypted
        au!
 
        " First make sure nothing is written to ~/.viminfo while editing
        " an encrypted file.
        autocmd BufReadPre,FileReadPre      *.asc set viminfo=
        " We don't want a swap file, as it writes unencrypted data to disk
        autocmd BufReadPre,FileReadPre      *.asc set noswapfile
        " Switch to binary mode to read the encrypted file
        autocmd BufReadPre,FileReadPre      *.asc set bin
        autocmd BufReadPre,FileReadPre      *.asc let ch_save = &ch|set ch=2
        autocmd BufReadPost,FileReadPost    *.asc '[,']!sh -c "gpg --decrypt 2> /dev/null"
        " Switch to normal mode for editing
        autocmd BufReadPost,FileReadPost    *.asc set nobin
        autocmd BufReadPost,FileReadPost    *.asc let &ch = ch_save|unlet ch_save
        autocmd BufReadPost,FileReadPost    *.asc execute ":doautocmd BufReadPost " . expand("%:r")
 
        " Convert all text to encrypted text before writing
        autocmd BufWritePre,FileWritePre    *.asc   '[,']!sh -c "gpg --default-recipient-self -ae 2>/dev/null"
        " Undo the encryption so we are back in the normal text, directly
        " after the file has been written.
        autocmd BufWritePost,FileWritePost    *.asc   u
augroup END
augroup bencrypted
        au!
 
        " First make sure nothing is written to ~/.viminfo while editing
        " an encrypted file.
        autocmd BufReadPre,FileReadPre      *.gpg set viminfo=
        " We don't want a swap file, as it writes unencrypted data to disk
        autocmd BufReadPre,FileReadPre      *.gpg set noswapfile
        " Switch to binary mode to read the encrypted file
        autocmd BufReadPre,FileReadPre      *.gpg set bin
        autocmd BufReadPre,FileReadPre      *.gpg let ch_save = &ch|set ch=2 
        autocmd BufReadPost,FileReadPost    *.gpg '[,']!sh -c "gpg --decrypt 2> /dev/null"
        " Switch to normal mode for editing 
        autocmd BufReadPost,FileReadPost    *.gpg set nobin 
        autocmd BufReadPost,FileReadPost    *.gpg let &ch = ch_save|unlet ch_save
        autocmd BufReadPost,FileReadPost    *.gpg execute ":doautocmd BufReadPost " . expand("%:r")
 
        " Convert all text to encrypted text before writing
        autocmd BufWritePre,FileWritePre    *.gpg   '[,']!sh -c "gpg --default-recipient-self -e 2$gt;/dev/null"
        " Undo the encryption so we are back in the normal text, directly
        " after the file has been written.
        autocmd BufWritePost,FileWritePost    *.gpg   u
augroup END

(trouvé sur http://www.vim.org/tips/vimtips, plus exactement vimtips#651). Plus qu'à créer un fichier vide et le chiffrer :

$ touch file
$ gpg -a -e file > file.asc
gpg: WARNING: `file' is an empty file

Plus qu'à éditer avec vim(1).

Si vous n'êtes pas seul, il vous faut un compte, disons netadmin@. Dans le $HOME seront les fichiers partagés (et chiffrés).

Tout s'articule sur la phrase secrète de la clef GnuPG : le chef d'équipe (disons bo@) crée la clef, exporte le certificat de révocation. bo@ a sa propre phrase secrète sur la clef exportée.

bo@ confie la clef a son acolyte fh@ qui l'importe dans son trousseau. fh@ demande à changer la phrase secrète, bo@ tape la « vieille » et fh@ la nouvelle. On n'a partagé aucun secret, aucune phrase secrète mais chacun dispose de la clef et peut l'utiliser à sa guise.

Ça marcherait tout aussi bien pour une clef SSH…

Dans le $HOME de netadmin@, on crée :

  • un fichier .vimrc reprenant la configuration ci-dessus,
  • un répertoire .gnupg-bo et un autre .gnupg-fh,
  • un fichier .trucrc pour avoir un shell correctement configuré.

On remplit les répertoires à partir des ~bo/.gnupg et ~fh/.gnupg.

Le shell va avoir une variable d'environnement GNUPGHOME=$HOME/.gnupg-$SUDO_USER (on va utiliser sudo(1)).

Quand tout ça est prêt, plus qu'à :

$ sudo -u netadmin -i

Voilà, sous l'identité de netadmin@, bo@ et fh@ enregistrent dans ~netadmin les fichiers qu'ils se partagent et qui sont chiffrés avec la même clef GnuPG.

On n'a pas inventé l'eau froide mais ça marche très bien. Évidemment, ça marche tout aussi bien à trois ou plus.

On peut faire plus simple avec un Wiki et l'extension FireGPG (http://fr.getfiregpg.org/) de Firefox.

  • user/pc/sysadmin/vim-gnupg-passwds.txt
  • Dernière modification : 2011/07/22 19:38
  • de pc