Pass - administrador de contraseñas para Unix
(passwordstore.org)- Pass es una herramienta simple de gestión de contraseñas que sigue la filosofía Unix y guarda cada contraseña en un archivo cifrado con GPG
- Las contraseñas pueden organizarse de forma estructurada mediante una jerarquía de carpetas, y con la herramienta de línea de comandos es fácil agregar, editar, generar, consultar y eliminar entradas
- Gracias a la integración con Git, es posible rastrear el historial de cambios y sincronizar contraseñas, por lo que resulta útil incluso en varias computadoras y entornos de equipo
- Ofrece un alto grado de libertad para el usuario, permitiendo organizar libremente la estructura de archivos y el formato de los datos almacenados según cada necesidad
- Su extensibilidad y alta compatibilidad han impulsado el desarrollo y la distribución activa de diversas extensiones y clientes/GUI para distintas plataformas
Introducción a Pass
- La gestión de contraseñas debe ser simple y seguir la filosofía Unix
- Pass guarda cada contraseña como un archivo cifrado con GPG, y el nombre del archivo usa el nombre del sitio web o recurso para el que se necesita esa contraseña
- Estos archivos cifrados pueden organizarse en la estructura de carpetas que prefieras. También es fácil copiarlos, moverlos o eliminarlos entre computadoras usando comandos comunes de gestión de archivos
- Pass ofrece comandos especializados para agregar, editar, generar y consultar cada archivo de contraseña, y por defecto las contraseñas se guardan dentro de
~/.password-store - Está implementado únicamente como un script de shell simple
- Usa Git para copiar contraseñas (al portapapeles) y registrar el historial de cambios de contraseñas
- También puede editarse con comandos básicos del shell, y admite autocompletado en varios shells como Zsh, Fish y Bash
- La comunidad desarrolla activamente diversas extensiones y clientes/GUI para otras plataformas
Cómo usar el password store
- Permite ver la lista completa de contraseñas almacenadas
- Admite consultar una contraseña específica y copiarla al portapapeles (con borrado automático)
- Con
gpg-agent, facilita el ingreso de contraseñas y el proceso de autenticación - Se pueden agregar nuevas contraseñas, guardar contenido multilínea en archivos existentes (opción
-m) y editar archivos directamente con el editor de texto predeterminado - Ofrece generación de contraseñas aleatorias usando
/dev/urandom(con opciones para incluir o excluir símbolos, y copiar directamente al portapapeles) - Al eliminar una contraseña, también se elimina el archivo cifrado del sistema de archivos
- Tras inicializarlo como repositorio Git, se crea un commit con cada cambio de contraseña y puede sincronizarse con
pass git push/pull - Para funciones adicionales y uso detallado, consulta la man page
Método de configuración básica
- Al inicializar el password store, puedes comenzar fácilmente con solo ingresar una clave GPG (si especificas varias claves GPG, es adecuado para entornos de equipo)
- Es posible asignar claves GPG separadas por carpeta específica (opción
-p) - También puede inicializarse como repositorio Git (y definir un remote por separado)
- Todas las operaciones de agregar, eliminar y editar contraseñas se gestionan mediante commits de Git
- En la man page puedes ver ejemplos de inicialización más avanzados
Instalación
- Debian/Ubuntu: apt-get install pass
- Fedora/RHEL: yum install pass
- Compatible con varias plataformas como openSUSE/Gentoo/Arch/Macintosh/FreeBSD
- Se puede usar un tarball o clonar directamente el repositorio Git (todas las versiones incluyen tags firmados)
Organización de datos y flexibilidad
- Pass permite organizar los datos libremente según la preferencia del usuario (sin imponer esquemas ni formatos)
- Puedes elegir entre varias formas, como almacenamiento multilínea, distinguir datos por nombre de archivo o usar estructuras de carpetas
- Ejemplo: en Amazon/bookreader, la primera línea puede contener la contraseña y después pueden guardarse la URL, el nombre de usuario, preguntas secretas y otra información adicional
- Si es necesario, también puedes administrar cada dato en archivos separados (por ejemplo: password, secretquestion1, etc.)
- La opción de copiar al portapapeles solo copia la primera línea, por lo que permite combinar de forma eficiente el uso real con el almacenamiento de información adicional
Extensiones
- Las extensiones (extensions) están soportadas para responder a diversas necesidades de los usuarios
- Se instalan en la carpeta del sistema o en la carpeta del usuario, y su activación puede definirse mediante variables de entorno
- La comunidad desarrolla y ofrece activamente una gran variedad de extensiones
Clientes compatibles
- La comunidad desarrolla y distribuye clientes/GUI para múltiples plataformas
- Los usuarios pueden elegir el cliente que mejor se adapte a su sistema operativo o entorno de uso
Migración desde otros administradores de contraseñas
- Al migrar datos desde otros administradores de contraseñas, se ofrecen varios scripts y métodos de conversión
- El usuario puede elegir la organización de datos óptima de la forma que mejor se adapte a sus necesidades
Autor y licencia
- Desarrollado por Jason A. Donenfeld (zx2c4.com)
- Puede usarse y modificarse libremente bajo la licencia GPLv2+
2 comentarios
De hecho, hay muchas herramientas que simplemente almacenan, pero lo importante es la integración, como el autocompletado.
Opiniones de Hacker News
Aquí hay muchas opiniones positivas sobre pass, pero también tiene claramente algunas desventajas importantes
Al ser datos no estructurados, por lo general es incómodo de manejar
Por ejemplo, si quieres usar
usernameypassworden un script, resulta incómodo porque tienes que escribir tu propio código de parsing cada vezSi creas una nueva contraseña con
pass generate, se sobrescriben todos los valores existentesEs decir, si tienes juntos la contraseña y la respuesta a la pregunta secreta, al generar solo la contraseña desaparece la respuesta
Es muy difícil revisar el historial
Como todo está cifrado, ni siquiera
git diffda información útil, y tampoco es cómodo recuperar historial o errores con herramientas de línea de comandosEl nombre es demasiado genérico, así que cuesta buscarlo
Últimamente está desarrollando una herramienta similar llamada passworth (también considerando uso de contenedores/sandbox) https://github.com/andrewbaxter/passworth
Sobre lo de que es difícil revisar el historial, en realidad pass soporta configurar un archivo
.gitattributespara que git convierta los archivos gpg a texto y así poder ver los diff*.gpg diff=gpgen~/.password-store/.gitattributes.git/config, definirtextconv = gpg2 -d ...en la configuración[diff "gpg"]Comparte otros problemas adicionales que tuvo usando pass
gpg-agent)El problema de la estructura de datos lo resuelve con la estructura de carpetas
username,passwordyemailpara cada sitionotes(notas no estructuradas), o en casos especiales un archivojson(para lectura por máquina)En su caso, más bien siente que la falta de estructura de los datos es una gran ventaja
Username: xxx, plugins del navegador como browserpass lo reconocen y lo autocompletanComparte su opinión por funcionalidad sobre los temas de estructura de datos e historial
pass generatesobrescriba todo, se puede manejar en archivos separados comosite/passysite/secret-questiongit diffserá difícil, pero lo importante en realidad es cuándo cambiaron por última vez (se puede ver congit log) y, si hace falta, restaurarlas congit checkout -d$ passen la terminal, te muestra paquetes relacionados, así que el problema de búsqueda tampoco es tan graveEl administrador de contraseñas del navegador + passkey es mucho más cómodo, pero un vault de pass también sirve para guardar códigos de recuperación y claves de API
Lo más ambiguo de usar pass era que el modelo de amenaza no quedaba claro
Si dejas en caché el agente de GPG, cualquier script (
npm postinstall, etc.) puede recorrer todas las credenciales conpass lsEn ese caso termina siendo parecido a simplemente guardar todo en un solo archivo
~/passwords.txtPero si no usas caché, sufres ingresando la contraseña larga de GPG cada vez
También probó usar un YubiKey para desbloqueo on-demand, pero la integración es pobre y se vuelve bastante incómodo cuando necesitas introducir contraseñas con frecuencia
Por eso terminó migrando a Bitwarden
En su caso, deja conectado el yubi todo el tiempo
Todos los administradores de contraseñas, en esencia, pueden exponer todas las contraseñas si el almacén está desbloqueado y la master password queda en RAM o caché
Si te sobra un puerto USB, también puedes dejar conectado un Nano key
Guarda sus contraseñas en una base de datos sqlite dentro de una partición de archivo cifrada
En yubikey puedes configurar que el uso de la clave GPG requiera PIN o toque para ser aprobado
A mí esto me encanta y lo uso todos los días
Para alguien a quien le gusta la CLI, pass es interesante, pero para un usuario común (“normie”), parece más adecuado usar KeepassXC en desktop, KeepassDX en Android y acceso remoto con Wireguard
Una función útil de keepass de la que no se habla mucho es que puedes abrir y buscar en varios vaults al mismo tiempo
Cree que el criterio de “normie” es relativo
Tampoco hay que olvidar
keepassxc.cliUn caso de uso suyo que keepass no resuelve es crear contraseñas por separado en dos computadoras aisladas y luego fusionarlas después
También quisiera usar KeepassXC, pero no es fácil compartir credenciales con su pareja
pass es una solución divertida cuando lo usas solo, pero hay que tener cuidado al compartirlo con varias personas
Si se usa para administrar contraseñas de empresa, no hay forma de saber quién vio qué secreto y cuándo, así que cada vez que cambia personal habría que rotar todas las contraseñas
Si alguien nuevo necesita acceso, no hay una forma estándar de re-cifrar archivos selectivamente; tendrías que implementarlo tú mismo
Sí guarda en git, pero como los mensajes de commit se generan automáticamente, en la práctica no ganas mucho más que con dropbox
Si por error haces push de algo incorrecto y quieres revertirlo, tienes que reescribir el historial de git, lo que puede romper cosas en los dispositivos de otros usuarios
Que sea simple y editable a mano también es una ventaja, pero esa misma simplicidad es una trampa
Es como el enfoque
hash(site_name+main_password): elegante, pero en la práctica aparecen varios problemasIncluso en entornos de negocio hacen falta funciones como cifrado end-to-end y verificación de fingerprints entre usuarios; Bitwarden parece lo más adecuado, pero agradecería recomendaciones si hay algo mejor
En pass también se puede granular el acceso por grupo o por persona aplicando claves distintas (o varias claves) por directorio
git submodulepara controlar el alcance de acceso por empleadoEn su empresa usan 1Password
op runmediante archivos.env, integración con CI, etc.Solo lo evaluó y no tiene experiencia real usándolo, pero passbolt también parecía una buena opción para compartir contraseñas en equipo https://www.passbolt.com
En su empresa usan bien una herramienta poco conocida llamada "pa" https://git.j3s.sh/pa
También parece posible construir una buena solución basada en FOKS https://foks.pub
Hace poco cambió de pass a Bitwarden y Vaultwarden
En un entorno donde las apps GUI se instalan con flatpak, la integración entre la extensión de Firefox y pass no funcionaba, lo cual era incómodo
Como workaround usaba
pass -c <path>desde la ventana de ejecución para copiar la contraseña y luego pegarla en el navegador, pero no era una experiencia idealTambién influyó que la app oficial de Android fuera archivada; existe un fork, pero no sabe cuánto tiempo seguirá manteniéndose https://github.com/android-password-store/Android-Password-Store/discussions/3260
Actualmente autoalberga vaultwarden y lo usa con varios clientes de bitwarden
Comparte su experiencia migrando de pass a KeePassXC
También existe una herramienta llamada passmenu
No sabía que la app de Android para pass había sido descontinuada
pass -cdesde el prompt que usar pluginsTiene curiosidad por la experiencia de uso offline en vaultwarden
También existe la extensión pass-otp https://github.com/tadfisher/pass-otp
La app de Android para pass también está bastante bien https://play.google.com/store/apps/details?id=dev.msfjarvis.aps
También funciona en termux
La app Android Password Store fue archivada el año pasado, y agrahn hizo un fork con muchas mejoras
Mi alternativa personal es poner un pequeño script en
~/biny usar pass junto con oathtool para generar OTPAlgunas apps viejas de Android para pass ya ni siquiera se pueden instalar en su dispositivo
Si usas age en lugar de GPG, puede servir la herramienta passage https://github.com/FiloSottile/passage
Últimamente lleva casi 10 años usando otro enfoque
Todos los metadatos de las contraseñas se guardan en JSON plano, y cada entrada registra usuario, versión y reglas de contraseña (longitud, tipos de caracteres, etc.)
La contraseña real no se guarda, sino que se genera de forma “determinista” a partir del hash de la passphrase + metadatos
Solo cambiando el número de versión ya se genera una contraseña completamente nueva, y con cambiar la “versión” también se puede revisar fácilmente el historial
La desventaja es que casi no se puede compartir (la otra persona tendría que conocer la passphrase que él usa)
Si fuera necesario compartir, pensó en un modo de generar un texto cifrado con el generador de contraseñas y guardarlo aparte como metadato, pero en la práctica no le hizo mucha falta
El enfoque de generador de contraseñas le parece bueno porque reduce la preocupación por perder el vault
Recientemente conoció este método a través del generador de contraseñas de SECUSO https://secuso.aifb.kit.edu/english/105.php
Si compartes la passphrase, aumenta mucho la superficie de exposición, así que una sola filtración puede poner en riesgo varias credenciales a la vez
Lleva más de 8 años usando pass y guarda 1300 contraseñas
Está muy satisfecho usándolo y sincronizándolo entre dispositivos con git
“¿Cómo se llega a tener 1300 contraseñas?”