Cómo compartir secretos en un equipo usando pass
22 Jul 2016Cuando trabajamos en un equipo de desarrollo de software y queremos compartir credenciales, contraseñas, llaves, tokens u otro tipo de secretos, es importante hacerlo de una manera segura. Hay varios artículos que explican cómo conseguirlo con herramientas como BlackBox, git-crypt o 1Password.
Otra opción muy útil es el
almacén de contraseñas pass
, que hace uso
de gpg
para cifrar los secretos almacenados y, gracias a su integración con
git
, permite llevar un control de versiones y compartir secretos entre los
miembros de un equipo. Aquí se detallan los pasos para crear un almacén de
secretos compartidos.
Configuración inicial
Comenzamos instalando pass
como se indica en la
sección de descargas en su página oficial.
En versiones recientes de Debian y Ubuntu, por ejemplo, se lo puede instalar
desde los repositorios oficiales:
apt-get install pass
En Mac OS X, la instalación es igual de sencilla con Homebrew:
brew install pass
No existe una versión oficial para Windows, pero se puede utilizar el cliente Pass4Win en conjunto con Gpg4win. Sin embargo, esta guía no cubre el procedimiento en este sistema operativo.
Una vez completada la instalación, creamos un nuevo directorio y nos ubicamos en él:
mkdir secretos
cd secretos
A continuación, necesitamos crear un wrapper ejecutable para pass
que nos
permitirá almacenar los secretos en el directorio actual y no en el directorio
por defecto (~/.password-store
). De esta manera, evitamos mezclar los secretos
del equipo con los personales. Este ejecutable también eliminará todas las
instancias de la cadena .gpg
de los argumentos que reciba, permitiendo el
autocompletado con la tecla tabuladora.
Para esto, creamos un archivo llamado passw
con el siguiente contenido:
#!/bin/bash
PASSWORD_STORE_DIR=. pass "${@//.gpg/}"
Posteriormente, agregamos permisos de ejecución al archivo:
chmod +x passw
Estamos listos para inicializar nuestro almacén de secretos, para lo cual
ejecutamos el comando ./passw init
seguido de los correos electrónicos de los
miembros del equipo separados por espacios, así:
./passw init [email protected] [email protected] [email protected]
Es importante que todos los correos electrónicos tengan una llave PGP válida asociada; si no, los próximos pasos fallarán. Si nos hace falta una guía introductoria sobre este tema, tanto la EFF como la FSF han publicado excelentes recursos en español.
A continuación, inicializamos el repositorio de git
corriendo:
./passw git init
Este repositorio es el que compartiremos con nuestro equipo.
A partir de este punto, podemos continuar usando los comandos usuales de pass
,
recordando siempre utilizar el wrapper ./passw
que creamos al inicio. Por
ejemplo, para añadir la contraseña del ambiente de QA de nuestro proyecto
ejecutaríamos:
./passw insert logins/qa
Y para copiar la contraseña al portapapeles:
./passw -c logins/qa
La herramienta pass
es bastante versátil y tiene muchos otros comandos y
opciones, los cuales están documentados en su
página oficial y, con más detalle, en su
manual.
Sólo resta compartirlo con el equipo
El repositorio que hemos inicializado en los pasos anteriores debe ser subido a
un servidor de git
para que los otros miembros del equipo puedan clonar sus
copias del almacén de secretos.
Todas las credenciales estarán cifradas, pero los correos electrónicos de los
miembros del equipo serán visibles en el archivo .gpg-id
y, posiblemente, en
el historial de commits del repositorio. Si esta información se considera
sensible, no debemos subir el repositorio a servicios públicos de alojamiento
de git
(por ejemplo, GitHub).
¿Qué pasa si alguien se va del equipo? ¿Y si alguien más se une?
Si queremos agregar o remover a alguien del equipo, basta con correr de nuevo el
comando ./passw init
con la lista actualizada de correos electrónicos. Sin
embargo, quienes salgan del equipo aún tendrán acceso a las versiones anteriores
del repositorio, por lo que es recomendable restablecer los secretos.