Hoy os voy a presentar un tutorial en profundidad del administrador de contraseñas seguro y libre que llevo utilizan desde hace un par de años. El administrador en cuestión se llama pass
. Es un interesante herramienta que funciona tanto desde línea de comandos como desde interfaz gráfica. Asimismo, gracias a la comunidad entorno a ella, podemos integrarlo con GNU/Linux, Firefox, Android, etc.
Índice
En este tutorial crearemos nuestro gestor de contraseñas. Administraremos y sincronizaremos las contraseñas entre nuestro dispositivo Android y dos ordenadores GNU/Linux mediante la integración con git
que nos ofrece pass
.
pass
?pass, the standard unix password manager
pass
es un gestor de contraseñas muy simple que guarda las contraseñas en archivos cifrados con gpg2
utilizando claves asimétricas. Este gestor nos permite añadir, eliminar, editar, sincronizar, generar y editar nuestras contraseñas. Para más información acerca de pass
podéis consultar este artículo.
Instalamos nuestro nuevo gestor de contraseñas pass
, y git
para sincronizar las contraseñas.
1 |
sudo apt install pass git |
Creamos una clave GPG que utilizaremos para cifrar y descifrar las contraseñas:
1 |
gpg --full-gen-key |
Vamos introduciendo los siguientes valores:
Acto seguido nos pedirá cuál queremos que sea nuestra contraseña maestra para la clave. La contraseña debe ser segura dado que con ella, podremos acceder a todas las contraseñas que guardaremos en pass
.
Tras introducir la contraseña, se nos generará la clave gpg
. Obtenemos el key id
de nuestra clave haciendo este sencillo paso. La reemplazamos por el siguiente <KEY_ID>
:
1 |
pass init "<KEY_ID>" |
A partir de aquí ya podemos añadir, modificar y eliminar contraseñas. Por ejemplo, para agregar una contraseña de la web lignux.com
:
1 |
pass insert lignux.com |
Más adelante explicaré como gestionar las contraseñas en profundidad.
Mostramos las claves gpg
guardadas en nuestro sistema:
1 |
gpg -k --keyid-format long |
Buscamos el bloque de la clave que corresponde a pass
. En mi caso solo tengo una clave, pero si tenéis más de una, la podéis identificar por la fecha, nombre o correo electrónico.
Dentro del bloque de clave identificada, nuestra key id
es el código alfanumérico mostrado después del cifrado (rsa4096
) que utilizamos en nuestra clave. En mi caso, mi key id
es: 81F0CD4B06C52998
.
pass
En caso de que ya tengamos un gestor de contraseñas y queramos importar todas nuestras contraseñas a pass
, la comunidad de pass
nos lo facilita la tarea con una serie de scripts. En el momento de escribir este artículo, hay scripts «aceptados/oficiales» para importar contraseñas desde los siguientes administradores de contraseñas:
Podemos consultar todos estos scripts aquí.
Listar todas las cuentas/contraseñas:
1 |
pass |
Mostrar una contraseña en concreto:
1 |
pass Disroot/wakutiteo |
Con el parámetro -c
copiamos la contraseña al portapapeles:
1 |
pass -c Disroot/markel |
Buscar contraseñas por texto, en esta caso «wakutiteo» que listará todas las cuentas con ese nombre de usuario:
1 |
pass find wakutiteo |
Añadir contraseña:
1 |
pass insert Disroot/markel |
Generar un contraseña segura de 15 caracteres de longitud para nuestro usuario de Wikipedia:
1 |
pass generate Wikipedia/wakutiteo 15 |
Eliminar contraseña:
1 |
pass rm Lignux/wakutiteo |
Si preferimos utilizar una interfaz gráfica, tenemos el programa multiplataforma QtPass licenciado bajo la GPLv3. Como el propio nombre indica, es una interfaz escrita en Qt, por lo que tendrá mejor integración en los entornos de escritorio KDE Plamas, LXQt, etc. Pero lo podremos utilizar con cualquier DE. Procedemos a instalarlo:
1 |
sudo apt install qtpass |
Me gustaría señalar que este programa integra, una opción para hacer git pull
y git push
de manera automática. Os invito a investigar más acerca de QtPass en su página web.
pass
no nos impone ninguna esquema o manera de organizas nuestras contraseñas en particular, de hecho, por defecto, cuando creamos una nueva contraseña con pass insert
solo contiene la contraseña. Sin embargo, en la mayoría de los casos no es suficiente. A menudo, además de la contraseña, también queremos guardar el nombre de usuario, la URL de la web, preguntas secretas/de verificación, observaciones/notas, etc.
Para editar, o si todavía no existe, crear, una contraseña:
1 |
pass edit Disroot/wakutiteo |
Esto, nos abre un editor de texto en el que podemos escribir nuestra propia estructura sin ningun tipo de limitación. No obstante, desde el proyecto pass
nos recomiendan la siguiente:
1 2 3 4 5 |
Yw|ZSNH!}z"6{ym9pI URL: *.wikipedia.org/* Username: wikipediauser@example.com Secret Question 1: ¿Cómo te llamában de pequeño? Wiki Phone Support PIN #: 84719 |
Paso a explicaros la estructura de los datos de esta contraseña:
Notas:
pass
con Firefox, por lo que debemos prestar especial atención al campo URL. Puesto que Firefox nos permitirá auto-rellenar los formularios de sesión con unas contraseñas u otras en función de la página web en la que nos encontremos basándose en el campo URL de las contraseñas.Para un organización mayor, podemos utilizar carpetas. Yo os recomiendo la estructura Servicio/usuario
porque si tenemos más de un usuario en ese Servicio
podemos añadir otro en Servicio/usuario2
. Así, si queremos buscar nuestros usuario de Servicio
simplemente, sabemos que tenemos que acceder a Servicio
y dentro tendremos todos sus usuarios.
Un ejemplo de la organización de la cual os hablo podría ser este:
1 2 3 4 5 6 7 8 9 |
mint@virtmachine:~$ pass Password Store ├── Disroot │ ├── markel │ └── wakutiteo ├── Lignux │ └── wakutiteo └── Wikipedia └── wakutiteo |
Donde tendríamos dos cuentas de usuario en el correo electrónico de Disroot, un usuario en LiGNUx y otro en Wikipedia.
En cada dispositivo nuevo que queramos añadir a la sincronización, debemos importar la clave privada GPG y clonar el repositorio git
con nuestras contraseñas. El flujo de trabajo cuando hay alguna modificación en las contraseñas es el siguiente:
git
.git
.Nota: Todo esto se hace manualmente. La subida y bajada de datos no es automática.
Para poder explicarme de manera más precisa, puntualizaré lo que haremos con cada uno de los dispositivo:
pass
. Subiremos las contraseñas con el repositorio de git
. Porque más adelante las descargaremos desde los otros dispositivos para sincronizarlas con el servidor.pass
, sincronizar las contraseñas con el repositorio.pass
, sincronizar las contraseñas con el repositorio.git
(centro superior): aquí subiremos nuestras contraseñas cifradas.Para poder sincronizar las contraseñas con git
, primero tenemos que crear un repositorio en algún servidor como GitLab, GitHub, un servidor propio, etc. Yo utilizaré GitLab. Para ello primero nos tenemos que crear una cuenta si no tenemos ya una. Después crearemos un repositorio privado:
Hacemos clic en «New project».
Seleccionamos «Create blank project».
Creamos un nuevo proyecto, dándole un nombre a nuestro repositorio y muy importante seleccionar privado para que solo podamos acceder nosotros al repositorio.
Con el repositorio listo, pasamos a configurarlo y clonarlo en Debian.
git
en pass
:
1 |
pass git init |
2. Definimos el origin
de nuestro repositorio. Reemplazamos la URL por la nuestra propia:
1 |
pass git remote add origin https://gitlab.com/pruebaslignuxcom/pass.git |
Podemos obtener nuestra URL desde Clone > Clone with HTTPS en nuestro repositorio:
3. Subimos las contraseñas/cambios al repositorio (nos pedirá el usuario y la contraseña de nuestro usuario de git
):
1 |
pass git push -u --all |
Si todo ha ido bien, al recargar la página del repositorio git
veremos que ya tenemos nuestras contraseñas en el repositorio con la extensión .gpg
.
Al igual que en el ordenador Debian, instalamos pass
y git
:
1 |
sudo apt install pass git |
Clonamos nuestro repositorio, reemplazad la URL por la de vuestro repositorio:
1 |
git clone https://gitlab.com/pruebaslignuxcom/pass.git |
Esto nos crea una carpeta con el nombre del repositorio, en mi caso «pass». Renombramos esta carpeta por «~/.password-store»:
1 |
mv pass/ ~/.password-store |
Hacemos esto porque pass
, por defecto, busca las contraseñas en esa ruta. Comprobamos que nos detecte las cuentas:
1 |
pass |
Pero si intentamos ver la contraseña de alguna cuenta en concreto...:
1 |
pass Lignux/wakutiteo |
Nos salta el error gpg descifrado fallido: No tenemos la clave secreta
.
Es por ello que, ahora tenemos que volver al ordenador Debian para obtener la clave privada que nos servirá para descifrar nuestras contraseñas que están cifradas con nuestra clave pública. Esto es así porque utilizamos cifrado asimétrico.
Exportamos clave privada. Reemplazamos <KEY_ID>
por la nuestra.
1 |
gpg --export-secret-keys <KEY_ID> > clave-privada.asc |
Con la clave privada exportada, la copiamos a nuestro equipo con Linux Mint y seguimos con su configuración. Muy importante mantener segura nuestra clave privada, si alguien consiguiese nuestra clave privada podría descifrar todas nuestras contraseñas.
Antes de nada, debemos tener copiada la clave privada que acabamos de exportar en nuestro equipo Linux Mint. A continuación, entramos con la terminal al directorio en el cual hemos copiado la clave.
Importamos la clave privada copiada del equipo Debian:
1 |
gpg --import clave-privada.asc |
Nos preguntará por la contraseña maestra, o lo que es lo mismo, la contraseña de la clave privada, es la misma que hemos definimos en la sección de Instalación y configuración para generar la clave GPG. Nos la pide por seguridad: si alguien se hiciese con nuestra clave privada, además necesitaría saber nuestra contraseña.
Si ahora intentamos obtener la contraseña Lignux/wakutiteo
como hemos hecho hace un rato, ahora sí que nos lo permitirá dado que, hemos importado la clave privada que nos hacía falta para descifrar las contraseñas.
1 |
pass Lignux/wakutiteo |
Nos pedirá de nuevo la contraseña. Y como podéis observar, ya podemos acceder a las contraseñas.
Para empezar, necesitamos instalar dos aplicaciones:
pass
en Android. F-Droid | Play StoreCopiamos también aquí, en nuestro móvil Android, clave privada que hemos generado antes en el ordenador Debian para el ordenador Linux Mint para descifrar las contraseñas.
Abrimos OpenKeychain, y en la pantalla de bienvenida damos en «Importar clave desde fichero». Buscamos y seleccionamos la clave privada copiada en nuestro almacenamiento interno del paso anterior. Hacemos clic en «Importar»:
Abrimos Password Store, en la pantalla de bienvenida hacemos clic en «Clonar desde servidor». En el dialogo emergente «Ubicación del repositorio», seleccionamos «Oculto (recomendado)». Rellenamos los campos con nuestros los nuestros:
Damos a «¡Clonar!» y escribimos la contraseña de nuestro usuario git
. Automáticamente, nos dirige a la pantalla principal en la cual se nos listan todas las contraseñas:
Si intentamos acceder a una de nuestras contraseñas, nos saltará un mensaje (toast) en la parte inferior:
«¡No se ha seleccionado ningún proveedor OpenGPG!»
Para solucionarlo vamos a Ajustes > Cifrado (sección) > Selecciona un proveedor OpenPGP y seleccionamos «OpenKeychain».
pass
y damos en «De acuerdo»:Ahora si intentamos acceder de nuevo a nuestras contraseñas, nos saltará el mensaje «¿Permitir el acceso a su clave?» que permitiremos y luego nos pedirá la contraseña maestra.
Finalmente, tenemos pass
funcionando en nuestro Android.
Mientras usamos la aplicación puede que nos salte este mensaje.
Para solucionarlo:
El uso de la aplicación Password Store es sencillo. En la pantalla principal se nos listan todas nuestras contraseñas y en parte inferior derecha nos permite añadir nuevas contraseñas. Si accedemos a una de las contraseñas, se nos copia automáticamente la contraseña en cuestión al portapapeles. Además, desde ahí podemos compartir, editar y copiar la contraseña.
Si realizamos algún cambio en las contraseñas o si queremos obtener las modificaciones hechas desde nuestros otros dispositivos, debemos sincronizar los cambios con el repositorio git
. Para ello:
git
Si estamos utilizando la sincronización de contraseñas con git
, cada vez que hacemos un cambio se hace un git commit
del cambio automáticamente. Para subir los cambios locales a nuestro repositorio escribimos:
1 |
pass git push |
Y si desde otro dispositivo hemos realizado cambios y los hemos subido al repositorio con un pass git push
, y queremos obtener/actualizar esos cambios en nuestro ordenador actual, hacemos:
1 |
pass git pull |
De esta manera podemos mantener actualizadas las contraseñas entre nuestros dispositivos.
pass
Para integrar pass
con Firefox, primero debemos tenerlo configurado tal y como hemos hecho en los pasos anteriores.
La integración la haremos con la extensión passff
. Para que la extensión se pueda comunicar con pass
, necesitamos instalar passff-host
que funciona como intercomunicador:
1 |
curl -sSL github.com/passff/passff-host/releases/latest/download/install_host_app.sh | bash -s -- firefox |
Nos aseguramos de tener instalado un pinentry
(dialogo gráfico que nos pregunta por las contraseñas). Si utilizamos un entorno GTK+ (GNOME, Xfce, LXDE, Cinnamon, etc.):
1 |
sudo apt install pinentry-gtk2 |
O si utilizamos un entorno QT (KDE Plasma o LXQt):
1 |
sudo apt install pinentry-qt |
Para finalizar con la integración, instalamos la extensión para Firefox passff
desde aquí.
Si todo ha ido bien, al acceder a uno de los dominios de nuestras contraseñas, en el inicio de sesión nos aparecerá un «botón» en el campo de texto de usuario y contraseña con el cual nos auto-rellenará los campos (pidiéndonos antes la contraseña maestra).
zsh
Si utilizamos zsh
como intérprete de comandos, podemos activar su plugin para que nos ayude a completar y buscar entre todas nuestras contraseñas. También se podría implementar el completado en bash
y en fish
.
Editamos el archivo de configuración de zsh
:
1 |
nano ~/.zshrc |
Dentro del archivo buscamos plugins=(...)
. Y añadimos «pass» separándolo con un espacio o con una nueva línea:
1 2 3 4 5 6 |
[...] plugins=( git pass ) [...] |
gpg: No hay seguridad de que esta clave pertenezca realmente
al usuario que se nombra
Este error nos puede aparecer cuando intentamos insertar una nueva contraseña desde un ordenador del cual hemos clonado las contraseñas con un git clone
. En nuestro caso sería el ordenador con Linux Mint.
1 2 |
gpg: DE9479E3F2AFC458: No hay seguridad de que esta clave pertenezca realmente al usuario que se nombra |
El error también nos puede aparecer en ingles:
1 |
gpg: DE9479E3F2AFC458: There is no assurance this key belongs to the named user |
El error nos indica que la clave no tiene «confianza». Si nos fijamos, al listar las claves GPG del sistema, nos indica que la «confianza» de la clave es desconocida:
1 |
gpg -k --keyid-format long |
La solución, es dar confianza a la clave:
1 |
gpg --edit-key <KEY_ID> |
Entraremos en la consola de gpg
e introducimos el comando:
1 |
gpg> trust |
Indicamos confianza «absoluta» con el número «5» y lo confirmamos:
1 2 |
¿Su decisión? 5 ¿De verdad quiere asignar absoluta confianza a esta clave? (s/N) s |
Para salir de la consola de gpg
escribimos:
1 |
gpg> quit |
Si ahora intentamos insertar una contraseña podemos observar que ya no nos salta ese error.
Como habréis podido observar, es un tutorial paso a paso bastante detallado. Sin embargo, no tiene mucha complejidad siguiendo estos pasos. En cuanto al pass
, no es un administrador de contraseñas cualquiera, no. Es un administrador de contraseñas al estilo Unix. Sí que es cierto que lleva un rato configurarlo e instalarlo en todos nuestros dispositivos y que al principio nos puede parecer un poco confuso, pero a cambio, nos ofrece un control absoluto sobre nuestras contraseñas.
Como os suelo decir si tenéis alguna duda preguntad por los comentarios o por el grupo de Telegram de LiGNUx @liGNUx.
Espero que os haya sido útil 🙂
¡Nos leemos!