8 puntos por GN⁺ 2025-09-15 | 2 comentarios | Compartir por WhatsApp
  • 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

 
ndrgrd 2025-09-15

De hecho, hay muchas herramientas que simplemente almacenan, pero lo importante es la integración, como el autocompletado.

 
GN⁺ 2025-09-15
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 username y password en un script, resulta incómodo porque tienes que escribir tu propio código de parsing cada vez

    • Si creas una nueva contraseña con pass generate, se sobrescriben todos los valores existentes

    • Es 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 diff da información útil, y tampoco es cómodo recuperar historial o errores con herramientas de línea de comandos

    • El 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 .gitattributes para que git convierta los archivos gpg a texto y así poder ver los diff

      • Por ejemplo, agregar *.gpg diff=gpg en ~/.password-store/.gitattributes
      • Y en .git/config, definir textconv = gpg2 -d ... en la configuración [diff "gpg"]
      • En ese caso se puede hacer diff del contenido cifrado de forma sencilla
    • Comparte otros problemas adicionales que tuvo usando pass

      • Procedimientos importantes de uso no están documentados (por ejemplo, no queda claro qué hay que copiar al mover un repositorio de pass a otra computadora)
      • Instalarlo en entornos sin empaquetado, por ejemplo en un NAS headless, es muy difícil por problemas como el cross-compile de gpg
      • pass es básicamente una interfaz muy delgada sobre gpg, así que arrastra todas las desventajas de gpg (sobre todo problemas relacionados con gpg-agent)
      • Varias organizaciones hoy están intentando migrar de GnuPG a herramientas de cifrado más simples como age https://github.com/FiloSottile/age
      • La combinación de pass con Android no fue buena; el paquete oficial ya no se mantiene, el fork no está en F-Droid y la UI también es incómoda
      • En general sigue usando pass, pero no hay muchas mejores soluciones de propósito general
      • Existe FiloSottile/passage para cambiar gpg por age, pero no tiene soporte para Android
      • gopass parece mejor (funciona en todo Unix, es compatible con pass, ofrece plugin de age, https://www.gopass.pw), pero tampoco tiene empaquetado para Android
    • El problema de la estructura de datos lo resuelve con la estructura de carpetas

      • Maneja por separado archivos de username, password y email para cada sitio
      • A veces agrega un archivo notes (notas no estructuradas), o en casos especiales un archivo json (para lectura por máquina)
      • Le parece una lástima que los metadatos no estén cifrados, pero en general está satisfecho con esta solución
    • En su caso, más bien siente que la falta de estructura de los datos es una gran ventaja

      • De hecho, si lo escribes con un formato como Username: xxx, plugins del navegador como browserpass lo reconocen y lo autocompletan
    • Comparte su opinión por funcionalidad sobre los temas de estructura de datos e historial

      • Ve como ventaja que cada quien pueda usar sus propias convenciones
      • Aunque pass generate sobrescriba todo, se puede manejar en archivos separados como site/pass y site/secret-question
      • La idea de aprovechar el árbol de directorios en sí le parece bastante buena
      • Seguir contraseñas generadas con git diff será difícil, pero lo importante en realidad es cuándo cambiaron por última vez (se puede ver con git log) y, si hace falta, restaurarlas con git checkout -d
      • Si escribes $ pass en la terminal, te muestra paquetes relacionados, así que el problema de búsqueda tampoco es tan grave
  • El 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 con pass ls

    • En ese caso termina siendo parecido a simplemente guardar todo en un solo archivo ~/passwords.txt

    • Pero 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

      • De todos modos requiere toque físico, así que si su espacio es seguro, en la práctica funciona como un segundo factor
      • A diferencia de fido2, con OpenPGP ingresas el PIN una sola vez y queda desbloqueado mientras siga conectado
      • A cambio, como requiere tocarlo cada vez para desbloquear cada contraseña, para él es perfecto y cómodo a la vez
      • En móvil también le funciona bien la combinación de openkeychain y password store
      • Aunque ya nadie lo mantenga, cree que basta con confiar en el cifrado por hardware de yubi
    • 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é

      • Es más seguro mantenerlo bloqueado cuando no se usa
      • En casos integrados con el navegador como Bitwarden, también se amplía la superficie de ataque (servidor remoto, extensiones, etc.)
      • Recientemente aparecieron vulnerabilidades en casi todos los administradores de contraseñas basados en navegador que permitían a un atacante remoto enviar contraseñas al navegador de la víctima
      • Usa Bitwarden, pero las credenciales realmente importantes las maneja aparte
    • Si te sobra un puerto USB, también puedes dejar conectado un Nano key

      • Incluso si malware roba el PIN del yubi, para robar todas las contraseñas tendría que convencerme de presionar el dispositivo mil veces
    • Guarda sus contraseñas en una base de datos sqlite dentro de una partición de archivo cifrada

      • En cuanto un script lee una contraseña, cierra de inmediato la partición
      • O también podrías guardar cada contraseña en archivos cifrados individualmente
      • Si hace falta, descifra el archivo de contraseñas y luego limpia el gpg agent
    • En yubikey puedes configurar que el uso de la clave GPG requiera PIN o toque para ser aprobado

      • El mayor problema de pass es que su compatibilidad con yubikey en iOS no es muy buena
  • A mí esto me encanta y lo uso todos los días

    • Sobre todo, la combinación de claves OpenPGP y yubi le parece impresionante
    • Como cada contraseña debe desbloquearse individualmente, aunque un atacante tomara por completo su computadora, solo se expondría aquello que él haya tocado físicamente
    • A diferencia de keepass o bitwarden, donde al desbloquear una vez queda todo abierto, aquí hay menos riesgo de exponer toda la base de datos
  • 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

      • La mayoría de los administradores de contraseñas están diseñados asumiendo un solo vault, y al final eso implica asumir que todas las contraseñas requieren el mismo nivel de seguridad
      • En su caso, alrededor del 70% son sitios poco importantes, y le molesta tener que introducir una master password larga cada vez que inicia sesión
      • En keepass puede poner ese 70% de datos no importantes en un vault separado con una contraseña más corta, así que no tiene que preocuparse tanto
    • Cree que el criterio de “normie” es relativo

      • Él simplemente usa 1Password y confía en el resultado
    • Tampoco hay que olvidar keepassxc.cli

      • Es realmente útil para meter o sacar secretos de forma programática
      • Hace tiempo, cuando quería crear un bundle de secretos cifrados, primero probó GNU pass, pero terminó abandonándolo por la complejidad de administrar gnupg y por guardar valores en el home directory, entre otras cosas
      • pass tiene la ventaja de ser ubicuo, pero no encaja con un flujo de trabajo de “copiar un solo archivo”, así que volvió a keepassxc
    • Un 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

      • Aunque usen un vault dedicado, al compartir información existente al final hay que hacerlo manualmente con copy/paste
      • Por eso ahora se quedó con Vaultwarden, y le ha resultado más estable de lo que esperaba
  • 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 problemas

    • Incluso 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

      • Por ejemplo: la carpeta admins usa la clave admin, y la carpeta techs permite acceso tanto con la clave admin como con la clave tech
      • También se puede asignar una clave individual a cada empleado para gestionar quién accede a ciertos sitios
      • Se puede usar git submodule para controlar el alcance de acceso por empleado
      • Y con el historial de git también se puede rastrear cuándo y a quién se le reveló cierta contraseña
    • En su empresa usan 1Password

      • Soporta varias funciones como vaults compartidos por grupo, cuentas de servicio, comando op run mediante 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

      • Usa un esquema de clave pública en el que las contraseñas en texto plano solo son visibles localmente para cada usuario, y las contraseñas compartidas se vuelven a cifrar con la clave pública de cada usuario
    • En su empresa usan bien una herramienta poco conocida llamada "pa" https://git.j3s.sh/pa

      • Está basada en age y puede cifrar con varias claves
    • 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 ideal

    • Tambié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

      • De forma similar, había guardado cientos de secretos en pass
      • Cambió porque era fácil sincronizar entre varios dispositivos, y mantener solo las contraseñas importantes en el teléfono/laptop tenía sus límites
      • KeePassXC se sincroniza fácilmente al ser un solo archivo, y además tiene dos buenas apps de Android
      • La migración manual de datos le tomó unas 3 horas, pero aprovechó para ordenar los datos
      • La gestión de contraseñas es una app de consulta ocasional, así que mover un solo archivo por la red fue suficiente para sincronizar tres dispositivos
    • También existe una herramienta llamada passmenu

      • La invocas con un atajo de teclado, eliges la contraseña deseada desde un menú con autocompletado y se copia al portapapeles
      • Es cómodo porque no hace falta escribir pass ni la ruta desde el prompt
    • No sabía que la app de Android para pass había sido descontinuada

      • Al revisar el fork, le dio tranquilidad ver que sigue con desarrollo activo
      • Le da curiosidad por qué el proyecto oficial y el fork no hicieron una transición formal (piensa si fue por temas de prácticas de seguridad)
      • En lo personal prefiere mucho más copiar manualmente con pass -c desde el prompt que usar plugins
      • Los plugins le generan dudas de confianza, porque podrían desbloquear la clave gpg al arrancar el navegador o incluso filtrar sus contraseñas intencionalmente
    • Tiene curiosidad por la experiencia de uso offline en vaultwarden

      • A veces necesita consultar o actualizar credenciales sin conexión en entornos con red inestable
      • Aún no lo ha usado directamente, así que no sabe qué tan bien resuelve esa parte
  • 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 ~/bin y usar pass junto con oathtool para generar OTP

      • Saca la clave con pass y genera el código totp con oathtool
    • Algunas apps viejas de Android para pass ya ni siquiera se pueden instalar en su dispositivo

      • La integración con GPG es engorrosa, así que en la práctica no funcionaban bien
  • 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

      • Mientras exista una función hash pública, se pueden generar contraseñas en cualquier entorno
      • El problema es que los metadatos (lista de sitios, reglas, etc.) quedan expuestos y eso sigue siendo una preocupación de seguridad
      • Siente que, en esencia, no es tan distinto del enfoque de vault
    • Recientemente conoció este método a través del generador de contraseñas de SECUSO https://secuso.aifb.kit.edu/english/105.php

      • Está usando generación determinista de contraseñas
      • SECUSO también tiene una colección interesante de apps open source
    • 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?”

      • En realidad no las ha contado exactamente, pero ni él mismo sabe bien cuántas tiene de verdad