Pass: o gerenciador de senhas movido a padrões abertos

O que é o Pass?

O pass é um gerenciador de senhas feito em shell script.

O principal diferencial é a utilização de arquivos criptografados com o padrão aberto OpenPGP em vez de bases de dados próprias. Esse formato simplificado promoveu o surgimento de vários programas compatíveis com o pass (incluindo aplicativos móveis) e a integração com o Git, com a qual é possível utilizar qualquer nuvem de código (como GitHub/Lab) como “localização mestre” e a partir dela sincronizar para os demais dispositivos, não dependendo dos serviços ou software do autor.

A mesma chave OpenPGP usada para criptografar os arquivos pode ser utilizada para assinaturas digitais (por exemplo, commits de Git e pacotes de distribuição).

Iniciando o uso

Instalação

Os pacotes contendo o pass geralmente se chamam simplesmente pass ou carregam o nome do website, password-store. Uma lista bem completa dos pacotes do pass nas várias distribuições está aqui.

Escolhendo a “senha-mestra”

Assim como qualquer gerenciador de senhas local, é necessário uma senha que vai ser utilizada para criptografar a base de dados. Como o pass é simplesmente um “ajudador” para o GPG, é com ele que você vai gerar a chave de criptografia.

Para produzir uma chave usando as configurações recomendadas pelo GPG, rode gpg --gen-key no terminal.

Você vai ser solicitado nome, email e um senha. O nome e o email podem ser simplesmente inventados se você não for utilizar essa chave para nenhum outro propósito além do pass e outras criptografias de arquivos.

O GPG foi projetado – e ainda é utilizado – para autenticar e-mails e arquivos. Muitas distribuições, inclusive, autenticam os pacotes e as comunicações internas com essa ferramenta. Daí o uso de “Nome” e “Email”.

Depois de rodar um gpg --gen-key com sucesso, você terá uma saída parecida com

chaves pública e privada criadas e assinadas.

pub   ed25519 2022-02-17 [SC] [expires: 2024-02-17]
      746E69BF7767E0D07C91D2E33B39A608D9CB6809
uid                      capezotte <capezotte@nao-existe.hue.br>
sub   cv25519 2022-02-17 [E] [expires: 2024-02-17]

Depois de criar a chave GPG, inicialize a base de dados:

pass init capezotte@nao-existe.hue.br
(ou seja, o email que você utilizou).

O banco de senhas está inicializado, e você utilizará a senha criada no passo anterior para desbloqueá-lo.

O pass tem compleções para o bash e zsh, então você pode ir digitando o começo e apertando Tab em vez de copiar e colar os comandos.

Gerenciando as senhas

Depois inicializado o banco de senhas, já é possível preenchê-lo. Um apanhado dos comandos disponíveis é:

  • pass insert NOME_DO_ARQUIVO: criar um arquivo com o nome especificado, abri-lo no editor e criptografá-lo;
  • pass edit NOME_DO_ARQUIVO: editar um arquivo já existe, criptografando-o novamente após a edição;
  • pass generate NOME_DO_ARQUIVO [COMPRIMENTO]: cria uma senha aleatória no arquivo e a criptografa. Depois do nome do arquivo, é possível especificar um comprimento.

Como eu falei, isso é só um apanhado, há mais no manual (como procurar por strings nas senhas, listar, entre outros).

Quanto aos nomes de arquivo, a convenção que eu costumo usar é criar uma pasta com site, e ter o usuário como nome do arquivo, por exemplo:

  • github.com/capezotte
  • plus.diolinux.com.br/Capezotte

Essa organização é utilizada por vários plugins e extensões feitos em cima do Pass, que serão citados na seção Integração com outros programas.

Integração com o Git

pass git init permite transformar a pasta ~/.password-store em um repositório Git, permitindo fazer snapshots do banco de senhas, fazer backups dele em nuvens de código ou passar as senhas de um dispositivo para outro usando SSH.

Depois de converter seu banco em um repositório Git, as operações pass insert, pass generate, pass edit, etc. vão automaticamente criar snapshots do estado do repositório, criando um histórico de senhas.

O pass git na verdade aceita qualquer comando do Git, o que pode ser útil para usuários mais avançados.

Para fazer backup em uma nuvem de código, pode-se:

# entrar na pasta com as senhas
cd ~/.password-store
# definir um repositório remoto como ponto de backup
git remote add origin git@github.com:capezotte/senhas.git
# fazer upload
git push -u origin master

Lembrando, configure para ocultar o repositório com as senhas do público. Ainda que o GPG criptografe as senhas com os padrões mais fortes conhecidos, todo o cuidado é pouco.

Integração com outras ferramentas

GUIs e navegadores

Se a CLI não lhe é conveniente, há interfaces gráficas. Em primeiro lugar, é necessário fazer o GPG pedir senhas com interface gráfica, criando ou editando o arquivo ~/.gnupg/gpg-agent.conf com uma das linhas:

  • pinentry-program /usr/bin/pinentry-qt (para o Qt/KDE)
  • pinentry-program /usr/bin/pinentry-gnome3 (para GTK3/GNOME/Cinnamon/MATE)

Recarregue esse arquivo de configuração com gpg-connect-agent reloadagent /bye.

Gerenciadores de senha GUI compatíveis com o pass

Como “front-ends” gráficos do pass de terminal, temos:

  • qtpass (também no [community] do Arch);
  • Plugins para o Alfred do macOS;
  • passmenu, uma ponte entre o Rofi/Dmenu e o pass;

entre outras. Há uma lista mais completa no site oficial.

Plugins de navegador

Para integrar o Pass com os navegadores sem copiar e colar, há duas opções principais: o Passff (exclusivo de Firefox) e o Browserpass (para Firefox e derivados do Chromium). Ambas exigem um programa instalado no PC em si (native host) para que a extensão consiga acessar e descriptografar os arquivos, mas uma vez com ele, o uso se resume a apertar um atalho, selecionar a senha de um menu, e logar.

image

Por exemplo, nos derivados do Arch, o native host do Browserpass pode pode ser instalado com pacman -S browserpass, e a extensão em si pode ser baixada ou da loja do navegador ou do gerenciador de pacotes (pacman -S browerpass-{chromium,firefox}).

A organização que eu recomendei acima site.com/usuario é a recomendada por essas extensões, uma vez que previne golpes (phishing).

Aplicativo para Android sincronizado com o PC (via Git)

O Password Store For Android é uma versão do Pass para Android, incluindo preenchimento automático e outras conveniências. Disponível tanto na Google Play como no F-Droid.

Assim como o Pass utiliza o GPG no Linux, o Password Store for Android usa o OpenKeychain, que traz o padrão OpenPGP para Android. Logo, os dois devem ser instalados juntos.

Para esse tutorial, seu depósito de senhas deve ter sido convertido a um repositório Git (veja a seção “Integração com o Git” acima).

1. Importando a chave secreta GPG

No PC, gere o arquivo contendo sua chave secreta do OpenPGP com gpg --armor --export-secret-keys capezotte@nao-existe.hue.br > chave-secreta.txt. Envie o arquivo chave-secreta.txt usando Bluetooth, ou SSH/Netcat por Termux, ou como preferir. Utilize-o na tela inicial do OpenKeychain clicando em “Importar chave do arquivo”. Se a transferência tiver sido por Bluetooth, a chave estará em “Arquivos recentes”.

  • Essa tela inicial pode ser acessada no futuro novamente indo nas reticências no canto superior esquerdo e escolhendo “Gerenciar minhas chaves”.
  • Lembre-se de não deixar o arquivo com a chave secreta cair em mãos erradas. Isso é tão ruim quanto perder a sua senha-mestre em outros gerenciadores de senhas.

2. Importando as senhas do PC ou de uma nuvem de código por SSH

Na tela de configuração inicial do Pass para Android, escolha Clonar repositório remoto.

Em URL do repositório, coloque:

  • ssh://<seu_usuario>@<IP local do seu PC>:~/.password-store, se for copiar do PC. Lembre-se garantir que o serviço de SSH esteja rodando no seu PC, por exemplo, systemctl start sshd.service.
  • ssh://<url ssh do repositório> se for copiar de uma nuvem de código. Por exemplo, no Github, é ssh://git@github.com:<seu_usuario>/repositorio.

Em branch, coloque master, e Chave SSH em modo de autenticação.

Inicialmente, o aplicativo irá avisar que não há chaves SSH disponíveis. Gere uma, e aparecerá uma chave pública SSH (uma sequência de caracteres aleatórios).

Compartilhe-a com o PC original. Uma opção aqui é a integração de copiar/cola feitas pelo KDE/GS Connect.

  • Se estiver sincronizando do seu PC, adicione essa sequência como uma linha ao arquivo /home/usuario/.ssh/authorized_keys (crie-o se não existir).
  • Se estiver copiando de uma nuvem de código, adicione essa chave como confiável para sua conta.

Depois de copiar a chave pública para esse arquivo, o celular está autorizado a copiar as senhas, e conseguirá utilizá-las usando a senha que você passou no passo 1.

Nas configurações, acessíveis a partir das reticências da tela inicial, o preenchimento automático pode ser ativado.

  • A sincronização é manual; nas reticências da tela inicial, escolha “Pull do remoto” para baixar senhas novas e “Push do remoto” para fazer upload. Se estiver sincronizando com o PC, ambos devem estar na mesma rede, e o PC deve ter o SSH rodando.
  • No GitHub, você pode usar https://<seu_usuario>@github.com/<seu_usuario>/repositorio em vez de ssh://... no URL do repositório e usar tokens de acesso pessoal como senha, no lugar de chaves SSH, como método de autenticação.

Espero que isso tenha sido uma boa introdução ao Pass, e como ele constrói um gerenciador de senhas respeitável a partir de um padrão aberto e um pouco de cola quente e criatividade.

8 curtidas

Como eu exporto as senhas do pass?
Meu pass não suporta o comando export.

Dá para exibir as senhas com pass show [nome da senha], ou se quiser exportar todas as senhas de uma vez, pode fazer um script como o desse link.


Não conheço nenhuma versão do Pass com esse comando, onde você leu isso?