Logo

Mi Blog con Emacs y Esteroides

Emacs, IA y Linux: Poder y Simplicidad en tu Flujo de Trabajo

mybloggingnotes@gmail.com


21/04/2025

Instalación y Uso Completo de Pass: El Gestor de Contraseñas Estándar de Unix

Introducción a Pass: El gestor de contraseñas estándar de Unix

pass (también conocido como "password-store") es una herramienta simple pero potente para gestionar contraseñas en sistemas Linux y Unix. Diseñado bajo la filosofía Unix de "hacer una cosa y hacerla bien", pass proporciona una interfaz de línea de comandos ligera para almacenar, recuperar y gestionar contraseñas de forma segura.

Las principales ventajas de pass incluyen:

  • Simplicidad: Interfaz de línea de comandos intuitiva
  • Seguridad: Cifrado GPG para todas las contraseñas
  • Flexibilidad: Almacenamiento basado en archivos que puede sincronizarse fácilmente
  • Extensibilidad: Numerosas extensiones disponibles
  • Integración: Compatible con diferentes herramientas y flujos de trabajo

Este artículo guiará al lector a través de la instalación, configuración y uso diario de pass, desde operaciones básicas hasta escenarios avanzados.

pass-architecture.png

Instalación

Requisitos previos

Antes de instalar pass, necesitamos asegurarnos de tener GnuPG instalado, ya que pass lo utiliza para el cifrado:

# En distribuciones basadas en Debian/Ubuntu
sudo apt update
sudo apt install gnupg2

# En distribuciones basadas en Red Hat/Fedora
sudo dnf install gnupg2

# En Arch Linux
sudo pacman -S gnupg

Instalación de Pass

La instalación de pass es sencilla en la mayoría de las distribuciones Linux:

# En distribuciones basadas en Debian/Ubuntu
sudo apt install pass

# En distribuciones basadas en Red Hat/Fedora
sudo dnf install pass

# En Arch Linux
sudo pacman -S pass

# En openSUSE
sudo zypper install password-store

Generación de una clave GPG (si aún no tienes una)

Para usar pass, necesitas una clave GPG. Si ya tienes una, puedes saltarte este paso. Si no, puedes crear una con el siguiente comando:

gpg --full-generate-key

Sigue las instrucciones para crear tu clave. Recomendaciones:

  • Tipo de clave: RSA and RSA (predeterminado)
  • Tamaño de clave: 4096 bits
  • Expiración: depende de tus necesidades (1-2 años es una buena práctica)
  • Introduce tu nombre, correo electrónico y un comentario opcional
  • Establece una contraseña segura para proteger tu clave privada

Para verificar que tu clave se ha creado correctamente:

gpg --list-secret-keys --keyid-format LONG

Anota el ID de tu clave GPG (una cadena alfanumérica larga) que aparece después de "sec rsa4096/". Lo necesitarás para inicializar pass.

Configuración inicial

Inicialización del almacén de contraseñas

Inicializa tu almacén de contraseñas con el ID de tu clave GPG:

pass init "TU_ID_DE_CLAVE_GPG"

Ejemplo con un ID ficticio:

pass init "8F2A0B5C3D9E7F61"

Esto creará un directorio ~/.password-store/ donde se almacenarán tus contraseñas cifradas.

Configuración del entorno

Aunque no es estrictamente necesario, puedes añadir la siguiente línea a tu archivo ~/.bashrc o ~/.zshrc para habilitar el autocompletado:

source /usr/share/bash-completion/completions/pass

Uso básico

Insertar una contraseña

Para añadir una nueva contraseña:

pass insert categoría/nombre-servicio

Por ejemplo:

pass insert email/gmail

El sistema te pedirá que introduzcas la contraseña dos veces para confirmación.

Si quieres añadir información adicional, como nombre de usuario, URL, etc., usa la bandera -m (multiline):

pass insert -m email/gmail

Esto abrirá un editor de texto donde puedes introducir toda la información:

Mi_contraseña_segura
usuario: miusuario@gmail.com
url: https://gmail.com
recuperación: +123456789
notas: Esta es mi cuenta principal

Generar una contraseña aleatoria

Pass puede generar contraseñas seguras y aleatorias:

pass generate categoría/nombre-servicio longitud

Ejemplo:

pass generate banco/santander 16

Esto generará una contraseña de 16 caracteres y la almacenará cifrada. Para generar una contraseña sin caracteres especiales:

pass generate banco/santander 16 -n

Recuperar una contraseña

Para mostrar una contraseña:

pass categoría/nombre-servicio

Por ejemplo:

pass email/gmail

Esto mostrará el contenido del archivo desencriptado en la terminal.

Copiar al portapapeles

Para evitar mostrar la contraseña en la pantalla, puedes copiarla directamente al portapapeles:

pass -c categoría/nombre-servicio

Por defecto, esto copiará solo la primera línea (la contraseña) y se borrará automáticamente del portapapeles después de 45 segundos.

Listar las contraseñas almacenadas

Para ver todas tus contraseñas organizadas en un árbol:

pass

O para ver una categoría específica:

pass categoría/

Buscar contraseñas

Para buscar una contraseña:

pass find término-búsqueda

Por ejemplo:

pass find gmail

Editar una contraseña existente

Para modificar una contraseña o la información asociada:

pass edit categoría/nombre-servicio

Eliminar una contraseña

Para eliminar una contraseña:

pass rm categoría/nombre-servicio

Si quieres eliminar toda una categoría:

pass rm -r categoría/

Gestión avanzada

Control de versiones con Git

Pass puede utilizar Git para llevar un control de versiones de tus contraseñas, lo que facilita la sincronización entre dispositivos y tener un historial de cambios.

Para inicializar Git en tu almacén de contraseñas:

pass git init

Cada vez que realices cambios, Pass automáticamente hará commit de ellos. Para ver el historial:

pass git log

Para configurar un repositorio remoto:

pass git remote add origin git@github.com:usuario/passwords-store.git
pass git push -u origin master

IMPORTANTE: Asegúrate de que tu repositorio remoto sea privado, aunque las contraseñas estén cifradas.

Para sincronizar cambios desde otro dispositivo:

pass git pull

Trabajo con múltiples claves GPG

Puedes compartir contraseñas específicas con otras personas cifrándolas con múltiples claves GPG:

pass init -p categoría/compartido ID_CLAVE_GPG_1 ID_CLAVE_GPG_2

Esto cifrará todas las contraseñas en esa categoría para ambas claves GPG, permitiendo que ambos usuarios puedan desencriptarlas.

Exportación e importación

Para exportar una contraseña o categoría:

pass export > passwords-backup.txt

ADVERTENCIA: Este archivo contendrá todas tus contraseñas en texto plano. Trátalo con extremo cuidado.

Para importar:

cat passwords-backup.txt | pass import

Extensiones de Pass

Una de las grandes ventajas de pass es su extensibilidad. Algunas extensiones populares incluyen:

pass-otp: Gestión de códigos OTP

Permite gestionar tokens OTP (One-Time Password) para autenticación de dos factores:

# Instalación en Debian/Ubuntu
sudo apt install pass-extension-otp

# En Arch Linux
sudo pacman -S pass-otp

Para añadir un token OTP:

pass otp insert categoría/servicio-otp

Luego introduce la clave secreta o el URI del OTP.

Para generar un código OTP:

pass otp categoría/servicio-otp

pass-import: Importar desde otros gestores

Permite importar contraseñas desde otros gestores como KeePass, LastPass, etc.:

# Instalación
pip install pass-import

# Ejemplo de importación desde KeePass
pass import keepass archivo.kdbx

Aplicaciones móviles

  • Android: Password Store (utiliza OpenKeychain para GPG)
  • iOS: Pass for iOS

Interfaces gráficas

  • QtPass: Interfaz gráfica multiplataforma
  • passmenu: Script simple para integración con dmenu
# Instalación de QtPass en Debian/Ubuntu
sudo apt install qtpass

Ejemplos prácticos

Flujo de trabajo para gestionar contraseñas web

# Crear una estructura organizada
pass
├── email
│   ├── gmail
│   ├── trabajo
│   └── personal
├── banco
│   ├── santander
│   └── bbva
├── social
│   ├── twitter
│   ├── facebook
│   └── linkedin
└── trabajo
    ├── vpn
    ├── gitlab
    └── jira

Ejemplo de gestión de credenciales SSH

# Almacenar una frase de contraseña SSH
pass insert ssh/laptop-trabajo

# Usar en combinación con ssh-agent
export SSH_ASKPASS="/usr/bin/pass-ssh-askpass"
pass show -c ssh/laptop-trabajo
ssh-add ~/.ssh/id_rsa

Configuración de contraseñas compartidas en equipo

# Crear estructura para contraseñas de equipo
pass
├── personal (cifrado solo con mi clave)
└── equipo (cifrado con múltiples claves)
    ├── wifi-oficina
    ├── servidor-prod
    └── cuenta-aws

Rotación periódica de contraseñas

Script para ayudar a rotar contraseñas periódicamente:

#!/bin/bash
# rotate-passwords.sh

# Lista de contraseñas a rotar
passwords=(
  "email/gmail"
  "banco/santander"
  "trabajo/vpn"
)

for p in "${passwords[@]}"; do
  echo "Rotando $p..."
  new_pass=$(pass generate -f "$p" 20)
  echo "Nueva contraseña para $p: $new_pass"
  # Aquí podrías añadir código para actualizar la contraseña en el servicio correspondiente
  echo "============================================="
done

pass git push

Mejores prácticas de seguridad

Protección de la clave maestra

Tu clave GPG es el único punto de acceso a todas tus contraseñas. Protégela adecuadamente:

  • Usa una frase de contraseña larga y segura
  • Considera guardar una copia de seguridad de tu clave GPG en un lugar físico seguro
  • Evalúa el uso de una smartcard o token de seguridad como YubiKey para almacenar tu clave GPG

Copias de seguridad

Aunque Git proporciona cierto nivel de respaldo, es recomendable:

  • Exportar regularmente tus claves GPG (pública y privada)
  • Mantener copias de seguridad de ~/.password-store en medios externos
  • Considerar el cifrado de tus copias de seguridad
# Exportar clave GPG
gpg --export-secret-keys --armor TU_ID_CLAVE > mi_clave_privada.asc
gpg --export --armor TU_ID_CLAVE > mi_clave_publica.asc

# Hacer copia de seguridad del almacén
tar -czf password-store-backup.tar.gz -C ~/ .password-store/
gpg -e -r TU_ID_CLAVE password-store-backup.tar.gz

Auditoría de contraseñas

Revisa periódicamente tus contraseñas para detectar duplicados o contraseñas débiles:

# Listar todas las contraseñas (¡ten cuidado!)
find ~/.password-store -name "*.gpg" -type f | while read file; do
  name=$(echo "$file" | sed -e "s|$(dirname ~/.password-store/)/||" -e "s|.gpg$||")
  echo "$name: $(pass show "$name" 2>/dev/null | head -n1)"
done > /tmp/password-audit.txt

Integración con herramientas de auditoría

Puedes usar herramientas como pass-audit para verificar si tus contraseñas han sido comprometidas:

# Instalación
pip install pass-audit

# Verificar contraseñas filtradas usando HaveIBeenPwned
pass audit

Solución de problemas comunes

Error de descifrado

Si encuentras errores como "gpg: decryption failed: No secret key":

  1. Verifica que estás usando la clave GPG correcta:

    gpg --list-secret-keys
    
  2. Asegúrate de que la clave no ha expirado:

    gpg --edit-key TU_ID_CLAVE
    

Conflictos de Git

Si tienes conflictos al sincronizar entre dispositivos:

pass git pull
# Si hay conflictos
pass git mergetool
pass git commit
pass git push

Problemas de permisos

Si encuentras errores de permisos:

chmod 700 ~/.password-store
find ~/.password-store -type d -exec chmod 700 {} \;
find ~/.password-store -type f -exec chmod 600 {} \;

Diagrama de Arquitectura y Flujo de Pass

Leyenda y Explicación

Este diagrama muestra la arquitectura y flujo de trabajo de Pass, el gestor de contraseñas estándar de Unix:

Componentes principales

  • Usuario: Interactúa con Pass mediante comandos CLI
  • Pass CLI: La interfaz de línea de comandos que procesa las operaciones
  • GPG: Proporciona el cifrado/descifrado usando claves pública/privada
  • Almacén de Contraseñas: Estructura jerárquica de archivos cifrados
  • Git: Opcional, proporciona control de versiones y sincronización
  • Extensiones y Aplicaciones: Amplían la funcionalidad base

Flujos de trabajo principales

  1. Almacenamiento de contraseñas:
    • El usuario ejecuta un comando para insertar/generar contraseña
    • Pass llama a GPG para cifrar los datos con la clave pública
    • El archivo cifrado se guarda en la estructura del almacén
    • Si Git está habilitado, se crea un commit automáticamente
  2. Recuperación de contraseñas:
    • El usuario solicita una contraseña específica
    • Pass localiza el archivo cifrado correspondiente
    • GPG descifra el contenido usando la clave privada
    • La contraseña se muestra o copia al portapapeles

Ventajas del diseño

  • Seguridad: Las contraseñas nunca se almacenan en texto plano
  • Flexibilidad: Estructura jerárquica personalizable
  • Portabilidad: Fácil sincronización entre dispositivos
  • Extensibilidad: Sistema modular con múltiples extensiones

Notas técnicas adicionales

  • El diagrama PlantUML se puede renderizar en Emacs usando org-babel-execute-src-block
  • Para visualizar el diagrama, necesitas tener configurado PlantUML en tu entorno Emacs
  • Configuración recomendada para org-mode y PlantUML:
;; Configuración para PlantUML en Emacs
(use-package plantuml-mode
  :ensure t
  :config
  (setq plantuml-default-exec-mode 'jar)
  (setq plantuml-jar-path "/ruta/a/plantuml.jar")
  (setq org-plantuml-jar-path "/ruta/a/plantuml.jar"))

(org-babel-do-load-languages
 'org-babel-load-languages
 '((plantuml . t)))

Conclusión

pass es una herramienta poderosa y flexible para la gestión de contraseñas en entornos Unix/Linux. Su enfoque basado en la filosofía Unix lo hace ideal para usuarios que prefieren la línea de comandos y valoran la simplicidad, seguridad y extensibilidad.

Aunque puede tener una curva de aprendizaje inicial para usuarios no familiarizados con GPG o la línea de comandos, los beneficios a largo plazo en términos de seguridad y flexibilidad compensan ampliamente este esfuerzo inicial.

Al adoptar pass, estás eligiendo una solución de código abierto, bien mantenida y respetada en la comunidad de seguridad, que te da control total sobre tus datos más sensibles.

Referencias y recursos adicionales

Categoría: seguridad linux pass password tutoriales contraseñas

Suscribirse al Feed RSS | Mapa del Sitio

© 2025 M.Castillo | Hecho con ❤️ en Emacs y org-static-blog

📊 Estadísticas Visit counter For Websites