8 pontos por GN⁺ 2025-09-15 | 2 comentários | Compartilhar no WhatsApp
  • Pass é uma ferramenta simples de gerenciamento de senhas que segue a filosofia Unix, armazenando cada senha em um arquivo criptografado com GPG
  • As senhas podem ser organizadas de forma sistemática em uma estrutura de pastas, e operações como adicionar, editar, gerar, consultar e excluir podem ser feitas facilmente pela linha de comando
  • Com integração com Git, é possível rastrear o histórico de alterações das senhas e sincronizá-las, tornando-o útil em vários computadores e ambientes de equipe
  • Oferece alta liberdade ao usuário, permitindo configurar livremente a estrutura de arquivos e o formato dos dados armazenados de acordo com a necessidade
  • Com extensibilidade e alta compatibilidade, diversos recursos de extensão e clientes/GUI para várias plataformas são desenvolvidos e distribuídos ativamente

Introdução ao Pass

  • O gerenciamento de senhas deve ser simples e seguir a filosofia Unix
  • O Pass armazena cada senha como um arquivo criptografado com GPG, usando como nome do arquivo o site ou recurso ao qual aquela senha pertence
  • Esses arquivos criptografados podem ser organizados na estrutura de pastas que você quiser. Também é fácil copiá-los, movê-los e excluí-los entre computadores usando comandos comuns de gerenciamento de arquivos
  • O Pass fornece comandos especializados para adicionar, editar, gerar e consultar cada arquivo de senha, e as senhas são armazenadas por padrão em ~/.password-store
  • É implementado apenas com um simples script de shell
  • Usa Git para cópia de senha (cópia para a área de transferência) e para registrar o histórico de alterações
  • Também pode ser editado com comandos básicos do shell e oferece autocompletar em vários shells, como Zsh, Fish e Bash
  • Diversos recursos de extensão e clientes/GUI para outras plataformas vêm sendo desenvolvidos ativamente por uma comunidade engajada

Como usar o password store

  • Permite consultar a lista completa de senhas armazenadas
  • Oferece suporte à consulta de uma senha específica e à cópia para a área de transferência (com limpeza automática)
  • O gpg-agent facilita a entrada de senha e o processo de autenticação
  • É possível adicionar novas senhas, salvar arquivos existentes com múltiplas linhas (opção -m) e editar arquivos diretamente com o editor de texto padrão
  • Fornece geração de senhas aleatórias usando /dev/urandom (com opção de incluir ou excluir símbolos e copiar diretamente para a área de transferência)
  • Ao excluir uma senha, o arquivo criptografado também é removido do sistema de arquivos
  • Depois de inicializar como repositório Git, um commit é gerado a cada alteração de senha, e a sincronização pode ser feita com pass git push/pull
  • Para recursos adicionais e uso detalhado, consulte a man page

Configuração básica

  • Ao inicializar o password store, é possível começar facilmente apenas informando a chave GPG (ao especificar várias chaves GPG, ele se torna adequado para ambientes de equipe)
  • Também é possível atribuir chaves GPG separadas para pastas específicas (opção -p)
  • Também pode ser inicializado como repositório Git (com remote definido separadamente, se necessário)
  • Todas as operações de adição, exclusão e edição de senhas são gerenciadas como commits no Git
  • Na man page, é possível ver exemplos mais avançados de inicialização

Como instalar

  • Debian/Ubuntu: apt-get install pass
  • Fedora/RHEL: yum install pass
  • Suporte a várias plataformas, como openSUSE/Gentoo/Arch/Macintosh/FreeBSD
  • É possível usar o tarball ou clonar diretamente o repositório Git (todas as releases oferecem tags assinadas)

Organização dos dados e flexibilidade

  • O Pass permite organizar os dados livremente conforme a preferência do usuário (sem impor esquema ou formato)
  • É possível escolher várias abordagens, como armazenamento em múltiplas linhas, distinção por nome de arquivo e estrutura de pastas
  • Exemplo: no caso de Amazon/bookreader, a primeira linha pode conter a senha, seguida por URL, nome de usuário, pergunta secreta e outras informações adicionais
  • Se necessário, também é possível gerenciar cada informação em arquivos separados (por exemplo, password, secretquestion1 etc.)
  • Como a opção de cópia para a área de transferência copia apenas a primeira linha, é possível combinar de forma eficiente o uso prático com o armazenamento de informações extras

Recursos de extensão

  • Recursos de extensão (extensions) são suportados para atender a diversas necessidades dos usuários
  • Eles são instalados em uma pasta do sistema ou do usuário, e sua ativação pode ser definida por variável de ambiente
  • A comunidade desenvolve e oferece ativamente uma grande variedade de extensões

Clientes compatíveis

  • Clientes/GUI para várias plataformas são desenvolvidos e distribuídos pela comunidade
  • O usuário pode escolher o cliente mais adequado ao seu sistema operacional ou ambiente de uso

Migração a partir de outros gerenciadores de senhas

  • Ao migrar dados de outros gerenciadores de senhas, há suporte a vários scripts e métodos de conversão
  • O usuário pode escolher a organização de dados ideal da forma que melhor se adapta às suas necessidades

Criador e licença

  • Desenvolvido por Jason A. Donenfeld (zx2c4.com)
  • Pode ser usado e modificado livremente sob a licença GPLv2+

2 comentários

 
ndrgrd 2025-09-15

Na verdade, existem muitas ferramentas que simplesmente armazenam, mas o importante é a integração, como preenchimento automático.

 
GN⁺ 2025-09-15
Comentários do Hacker News
  • Há muitas opiniões positivas sobre o pass aqui, mas alguns pontos fracos importantes também aparecem claramente

    • Por ser um formato de dados não estruturado, no geral é incômodo de lidar

    • Por exemplo, quando se quer usar username e password em scripts, é preciso escrever manualmente código de parsing toda vez

    • Quando se cria uma nova senha com pass generate, todos os valores existentes acabam sendo sobrescritos

    • Ou seja, se password e resposta de pergunta secreta estiverem juntos, ao gerar só a senha a resposta desaparece

    • Ver o histórico é muito difícil

    • Como tudo está criptografado, até com git diff não se obtém nada muito útil, e recuperar histórico ou desfazer erros pela linha de comando também é inconveniente

    • O nome é genérico demais, então é difícil pesquisar

    • Ultimamente estou desenvolvendo uma ferramenta parecida chamada passworth (também considerando uso em contêiner/sandbox) https://github.com/andrewbaxter/passworth

    • Sobre a dificuldade de inspecionar histórico, na prática o pass suporta configurar um arquivo .gitattributes para o git converter arquivos gpg em texto e mostrar diff

      • Um exemplo é adicionar *.gpg diff=gpg em ~/.password-store/.gitattributes
      • E definir em .git/config a configuração [diff "gpg"] com textconv = gpg2 -d ...
      • Nesse caso, dá para fazer diff do conteúdo criptografado com facilidade
    • Compartilhando outros problemas que enfrentei usando o pass

      • Procedimentos importantes de uso não são documentados (ex.: ao mover um repositório do pass para outro computador, não fica claro o que precisa ser copiado)
      • Em ambientes sem empacotamento, por exemplo ao instalar em um NAS headless, fica muito difícil por causa de problemas como cross-compilation do gpg
      • O pass é basicamente uma interface bem fina sobre o gpg, então herda todas as desvantagens do gpg (principalmente problemas relacionados ao gpg-agent)
      • Muitas organizações estão tentando migrar do GnuPG para ferramentas de criptografia mais simples, como o age https://github.com/FiloSottile/age
      • A combinação de pass com Android não foi boa, o pacote oficial não é mantido, o fork não está no F-Droid, e a UI também é ruim
      • No geral ainda continuo usando pass, mas não há muitas soluções genéricas melhores
      • Dá para trocar o gpg por age com FiloSottile/passage, mas não há suporte para Android
      • O gopass parece melhor (funciona em todo Unix, é compatível com pass, oferece plugin para age, https://www.gopass.pw), mas também não tem empacotamento para Android
    • Resolvo o problema de estrutura de dados com a estrutura de pastas

      • Para cada site, gerencio separadamente arquivos de username, password e email
      • Às vezes também adiciono um arquivo de notes (anotações não estruturadas), ou em casos especiais um arquivo json (para leitura por máquina)
      • É uma pena que os metadados não fiquem criptografados, mas no geral é uma solução com a qual estou satisfeito
    • Eu, ao contrário, sinto que o fato de os dados serem não estruturados é uma grande vantagem

      • Na prática, se você escrever em um formato como Username: xxx, plugins de navegador como o browserpass reconhecem e preenchem automaticamente
    • Compartilhando opiniões por funcionalidade sobre as questões de estrutura de dados e histórico

      • Vejo como vantagem o fato de cada pessoa poder usar sua própria convenção
      • Mesmo que pass generate sobrescreva tudo, dá para gerenciar em arquivos separados, como site/pass e site/secret-question
      • O próprio uso da árvore de diretórios é bem interessante
      • Rastrear senhas geradas com git diff deve ser difícil, mas o que importa de verdade é quando mudou pela última vez (dá para ver com git log), e se necessário é possível restaurar com git checkout -d
      • Se você digitar $ pass no terminal, os pacotes relacionados aparecem, então o problema de busca não é tão grave assim
  • Gerenciador de senhas do navegador + passkey é muito mais conveniente, mas um cofre do pass ainda serve para guardar códigos de recuperação e chaves de API

    • O ponto mais ambíguo no uso do pass era que o modelo de ameaça ficava nebuloso

    • Se o agente GPG estiver em cache, qualquer script (como um npm postinstall) pode vasculhar todas as credenciais com pass ls

    • Nesse caso, acaba sendo quase o mesmo que guardar tudo num único arquivo em ~/passwords.txt

    • Mas se não usar cache, vem o sofrimento de digitar uma senha longa do GPG toda vez

    • Também tentei usar YubiKey para desbloqueio sob demanda, mas a integração é ruim e fica bem incômodo quando é preciso inserir senhas com frequência

    • Por isso migrei para o Bitwarden

    • No meu caso eu simplesmente deixo a yubi conectada o tempo todo

      • De qualquer forma é necessário toque físico, então se meu ambiente for seguro isso funciona na prática como um segundo fator
      • Diferente do fido2, no OpenPGP basta digitar o PIN uma vez e ela continua desbloqueada enquanto estiver conectada
      • Em compensação, ainda é preciso tocar a cada senha para descriptografá-la, então para mim fica perfeito e conveniente
      • No celular, a combinação de openkeychain com password store também funciona bem
      • Apesar de ninguém mais manter isso, acho suficiente confiar apenas na criptografia em hardware da yubi
    • Todo gerenciador de senhas, no fundo, pode expor todas as senhas se o armazenamento estiver desbloqueado, porque a senha mestra acaba ficando na RAM ou em cache

      • Quando não estiver em uso, é preciso bloquear para ficar seguro
      • No caso de integrações com navegador como o Bitwarden, a superfície de ataque também é maior (servidores remotos, extensões etc.)
      • Recentemente surgiram vulnerabilidades em quase todos os gerenciadores de senha baseados em navegador que permitem a um atacante remoto enviar senhas para o navegador da vítima
      • Eu uso Bitwarden, mas trato credenciais realmente importantes separadamente
    • Se houver porta USB sobrando, também dá para deixar uma Nano key conectada direto

      • Mesmo que um malware consiga extrair o PIN da yubi, para roubar todas as senhas ainda teria de me convencer a apertar o dispositivo mil vezes
    • Eu armazeno minhas senhas em um banco sqlite numa partição de arquivo criptografada

      • Assim que um script lê a senha, a partição é fechada imediatamente
      • Ou então também dá para armazenar cada senha em um arquivo criptografado individualmente
      • Quando necessário, eu descriptografo o arquivo da senha e depois limpo o gpg agent
    • É possível configurar a yubikey para exigir PIN ou toque para aprovar o uso da chave GPG

      • O maior problema do pass é a compatibilidade fraca com yubikey no iOS
  • Eu gosto muito disso e uso todos os dias

    • A combinação de chave OpenPGP com yubi é especialmente impressionante
    • Como é preciso desbloquear cada senha individualmente, mesmo que um invasor comprometa totalmente meu computador, só o que eu tocar fisicamente fica exposto
    • Diferente de keepass e bitwarden, onde ao desbloquear uma vez tudo fica aberto, o risco de expor o banco inteiro é menor
  • Para quem gosta de CLI, o pass é interessante, mas para um usuário comum (“normie”), parece mais adequado usar KeepassXC no desktop, KeepassDX no Android e acesso remoto via Wireguard

    • Um recurso útil do keepass sobre o qual se fala pouco é poder abrir e pesquisar vários vaults ao mesmo tempo

      • A maioria dos gerenciadores de senha é projetada assumindo um único vault, o que no fim pressupõe que todas as senhas precisam do mesmo nível de proteção
      • No meu caso, cerca de 70% são sites sem importância, e é irritante ter de digitar uma senha mestra longa toda vez que vou fazer login
      • No keepass, posso colocar esses 70% menos importantes em um vault separado com uma senha curta, então não preciso me preocupar tanto
    • Acho que o critério de “normie” é relativo

      • Eu simplesmente uso 1Password e confio no resultado
    • Também não dá para esquecer do keepassxc.cli

      • É realmente útil para inserir ou extrair segredos programaticamente
      • No passado, ao montar um bundle de secrets criptografado, primeiro tentei GNU pass, mas acabei desistindo por causa da complexidade de administrar o gnupg e do fato de salvar valores no diretório home
      • O pass tem a vantagem da ubiquidade, mas não se encaixava no fluxo de trabalho de copiar um único arquivo, então voltei para o keepassxc
    • Um caso de uso meu que o keepass não resolve é criar senhas em dois computadores separados e depois mesclá-las

    • Também gostaria de usar KeepassXC, mas compartilhar credenciais com o cônjuge não é nada fácil

      • Mesmo usando um vault dedicado, ao compartilhar informações existentes no fim ainda é preciso copiar e colar manualmente
      • Por isso acabei ficando com Vaultwarden, e está sendo surpreendentemente estável
  • O pass é uma solução interessante para uso individual, mas ao compartilhar com várias pessoas é preciso cuidado

    • Se for usado para gerenciar senhas da empresa, não há como saber quem acessou qual segredo e quando, então sempre que houver mudança de funcionários seria preciso trocar todas as senhas

    • Se alguém novo precisar de acesso, não existe um método padrão para recriptografar seletivamente os arquivos; seria preciso implementar isso manualmente

    • Ele salva usando git, mas como as mensagens de commit são geradas automaticamente, na prática o ganho não é muito maior do que usar Dropbox

    • Se você fizer push por engano com conteúdo errado e quiser voltar atrás, terá de reescrever o histórico do git, o que pode quebrar nas máquinas de outros usuários

    • A simplicidade e o fato de ser algo ajustável manualmente também são vantagens, mas essa própria simplicidade é uma armadilha

    • É como a abordagem hash(site_name+main_password): elegante, mas na prática surgem vários problemas

    • Em ambiente corporativo também são necessários recursos como criptografia end-to-end e verificação de fingerprint entre usuários; o Bitwarden parece o mais adequado, mas aceito sugestões de alternativas melhores

    • No pass, também dá para aplicar chaves diferentes (ou várias chaves) por diretório e assim granular o acesso por grupo ou por pessoa

      • Ex.: a pasta admins usa a chave admin, enquanto a pasta techs permite acesso tanto para admin quanto para tech
      • Também é possível definir chave privada por funcionário e controlar quem pode acessar sites específicos
      • Dá para usar git submodule para controlar o escopo de acesso por funcionário
      • E com o histórico do git, também é possível rastrear quando e para quem determinada senha foi revelada
    • Na minha empresa usamos 1Password

      • Ele oferece vários recursos, como vaults compartilhados por grupo, contas de serviço, comando op run com arquivos .env e integração com CI
    • Só avaliei, não tenho experiência real, mas o passbolt também pareceu uma boa opção para compartilhamento de senhas em equipe https://www.passbolt.com

      • É baseado em chave pública: as senhas em texto puro só ficam visíveis localmente para cada usuário, e as senhas compartilhadas são recriptografadas com a chave pública de cada usuário
    • Na nossa empresa usamos bem uma ferramenta pouco conhecida chamada "pa" https://git.j3s.sh/pa

      • É baseada em age e pode criptografar com várias chaves
    • Também parece possível criar uma boa solução baseada em FOKS https://foks.pub

  • Recentemente troquei o pass por Bitwarden e Vaultwarden

    • Em ambientes onde apps GUI são instalados via flatpak, a integração entre a extensão do Firefox e o pass não funcionava, o que era inconveniente

    • Como workaround, usava pass -c <path> na janela de execução para copiar a senha e depois colar no navegador, mas não era uma experiência ideal

    • O fato de o app oficial para Android ter sido arquivado também pesou, e embora exista um fork, não sei por quanto tempo será mantido https://github.com/android-password-store/Android-Password-Store/discussions/3260

    • Atualmente hospedo o vaultwarden por conta própria e uso com vários clientes do bitwarden

    • Compartilhando a experiência de migração do pass para o KeePassXC

      • De forma parecida, eu vinha guardando centenas de secrets no pass
      • Acabei mudando porque sincronizar entre vários dispositivos é fácil, e manter só as senhas mais importantes no celular/notebook tinha suas limitações
      • O KeePassXC facilita a sincronização por ser um único arquivo, e ainda há dois bons apps Android com suporte
      • Levei umas 3 horas para mover os dados manualmente, mas aproveitei a oportunidade para organizá-los
      • Gerenciamento de senhas é um tipo de app de registro pouco usado; para sincronizar entre três máquinas, mover um único arquivo pela rede já basta
    • Também existe uma ferramenta chamada passmenu

      • Você a chama com um atalho de teclado, escolhe a senha desejada no menu com autocompletar, e ela é copiada para a área de transferência
      • É conveniente porque não é preciso digitar o pass nem o caminho no prompt de comando
    • Eu não sabia que o app Android do pass tinha sido descontinuado

      • Ao verificar o fork, fiquei aliviado de ver que o desenvolvimento segue ativo
      • Fiquei curioso para saber por que o projeto oficial e o fork não fizeram uma transição de manutenção (talvez por práticas de segurança?)
      • Pessoalmente, prefiro copiar manualmente com pass -c no prompt em vez de usar plugins
      • Plugins trazem questões de confiança, como desbloquear a chave gpg na inicialização do navegador ou até o risco de o autor do plugin vazar minhas senhas de propósito
    • Tenho curiosidade sobre a experiência de uso offline no vaultwarden

      • Às vezes é indispensável consultar ou atualizar credenciais offline em ambientes com conectividade instável
      • Ainda não usei o suficiente para saber até que ponto o vaultwarden atende bem isso
  • Também existe a extensão pass-otp https://github.com/tadfisher/pass-otp

    • O app Android para pass também é bem decente https://play.google.com/store/apps/details?id=dev.msfjarvis.aps

    • Também funciona no termux

    • O app Android Password Store foi arquivado no ano passado, e o agrahn fez um fork com muitas melhorias

    • Minha alternativa pessoal é colocar um pequeno script em ~/bin e usar pass com oathtool para gerar OTP

      • Pego a chave com pass e gero o código TOTP com oathtool
    • Alguns apps Android antigos para pass não podem mais ser instalados no meu dispositivo

      • A integração com GPG é trabalhosa e na prática não funcionava bem
  • Para quem usa age no lugar do GPG, existe a ferramenta passage https://github.com/FiloSottile/passage

  • Hoje em dia uso outra abordagem há quase 10 anos

    • Todos os metadados das senhas ficam em JSON em texto puro, e cada item registra user, versão e regras da senha (tamanho, tipos de caractere etc.)

    • A senha em si não é armazenada; ela é gerada de forma determinística a partir de uma passphrase e do hash dos metadados

    • Só mudar o número da versão já gera uma senha completamente nova, e olhando apenas a "versão" também fica fácil consultar o histórico

    • A desvantagem é que quase não dá para compartilhar (outra pessoa precisaria saber a passphrase que eu uso)

    • Para casos em que compartilhamento fosse necessário, pensei em um modo que gerasse ciphertext com o gerador de senha e o salvasse separadamente como metadado, mas na prática nunca precisei muito disso

    • A abordagem de gerador de senha é boa porque reduz a preocupação de perder o vault

      • Se houver uma função de hash pública, dá para gerar a senha em qualquer ambiente
      • O problema é que os metadados (lista de sites, regras etc.) ficam expostos e isso ainda traz preocupações de segurança
      • No fundo, sinto que não é tão diferente da abordagem com vault
    • Recentemente conheci essa abordagem através do SECUSO password generator https://secuso.aifb.kit.edu/english/105.php

      • Estou usando geração determinística de senhas
      • O conjunto de apps open source do SECUSO também é bom
    • Compartilhar a passphrase aumenta muito a superfície de exposição; se ela vazar uma vez, várias credenciais ficam em risco de uma só vez

  • Uso pass há mais de 8 anos e armazeno 1300 senhas

    • Sincronizo entre dispositivos com git e estou muito satisfeito

    • "Como você consegue ter 1300 senhas?"

      • Na verdade nunca contei direito, então também não sei exatamente quantas tenho