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.
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-storeen 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":
Verifica que estás usando la clave GPG correcta:
gpg --list-secret-keys
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
- 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
- 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.