Pass - gerenciador de senhas Unix
(passwordstore.org)- 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-agentfacilita 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
Na verdade, existem muitas ferramentas que simplesmente armazenam, mas o importante é a integração, como preenchimento automático.
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 sobrescritosOu 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 diffnão se obtém nada muito útil, e recuperar histórico ou desfazer erros pela linha de comando também é inconvenienteO 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
*.gpg diff=gpgem~/.password-store/.gitattributes[diff "gpg"]comtextconv = gpg2 -d ...Compartilhando outros problemas que enfrentei usando o pass
Resolvo o problema de estrutura de dados com a estrutura de pastas
Eu, ao contrário, sinto que o fato de os dados serem não estruturados é uma grande vantagem
Compartilhando opiniões por funcionalidade sobre as questões de estrutura de dados e histórico
pass generatesobrescreva tudo, dá para gerenciar em arquivos separados, comosite/passesite/secret-question$ passno terminal, os pacotes relacionados aparecem, então o problema de busca não é tão grave assimGerenciador 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 lsNesse 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
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
Se houver porta USB sobrando, também dá para deixar uma Nano key conectada direto
Eu armazeno minhas senhas em um banco sqlite numa partição de arquivo criptografada
É possível configurar a yubikey para exigir PIN ou toque para aprovar o uso da chave GPG
Eu gosto muito disso e uso todos os dias
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
Acho que o critério de “normie” é relativo
Também não dá para esquecer do keepassxc.cli
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
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
Na minha empresa usamos 1Password
op runcom arquivos .env e integração com CISó 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
Na nossa empresa usamos bem uma ferramenta pouco conhecida chamada "pa" https://git.j3s.sh/pa
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 idealO 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
Também existe uma ferramenta chamada passmenu
Eu não sabia que o app Android do pass tinha sido descontinuado
pass -cno prompt em vez de usar pluginsTenho curiosidade sobre a experiência de uso offline no vaultwarden
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
Alguns apps Android antigos para pass não podem mais ser instalados no meu dispositivo
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
Recentemente conheci essa abordagem através do SECUSO password generator https://secuso.aifb.kit.edu/english/105.php
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?"