jeffhsta.github.io/blog

Como compartilhar segredos com uma equipe usando pass

Esse post foi originalmente publicado em espanhol pelo meu amigo Jonathan Reyes, veja o post original.

Quando trabalhamos em uma equipe de desenvolvimento de software e queremos compartilhar credenciais, chaves, tokens ou outro tipo de segredo, é importante fazê-lo de uma forma segura. Há vários artigos que explicam como conseguir compartilhar esses segredos com ferramentas como BlackBox, git-crypt ou 1Password.

Outra opção muito útil é o gerenciador de senhas pass que utiliza o gpg para encriptar os segredos armazenados, e graças a sua integração com o git, permite-se ter controle de versão e compartilhar os segredos entre os membros da equipe. Aqui detalharemos os passos para criar um repositório de segredos compartilhados.

Configuração inicial

Começaremos instalado o pass como mostra na seção de download de sua página oficial. Em versões recentes do Debian e Ubuntu por exemplo, é possivel instalar utilizando os reposotórios oficiais:

$ sudo apt-get install pass

Para RHEL e Fedora:

$ sudo dnf install pass

Em Mac OS X, a instalação é simples utilizando o Homebrew:

$ brew install pass

Não existe uma versão oficial para Windows, mas pode-se utilizar o cliente Pass4Win em conjunto com Pgp4Win. No entando, esse guia não cobre o procedimento para esse sistema operacional.

Uma vez que concluída a instalação, criaremos um novo diretório e entraremos nele:

$ mkdir segredos
$ cd segredos

Agora, precisamos criar um wrapper executável para o pass que nos permite armazenar os segredos no diretório atual e não no seu diretório padrão (~/.passwrod-store). Dessa maneira, evitamos de misturar os segredos de nessa equipe com os pessoais. Esse executável também removerá a extenção .gpg do nome dos arquivos quando fizer o autocomplete ao usar a tecla tab.

Para isso, criaremos um arquivo chamado passw com o seguinte, conteúdo:

#!/bin/bash
PASSWORD_STORE_DIR=. pass "${@//.gpg/}"

Após, daremos permissão de execução no arquivo:

$ chmod +x passw

Estamos prontos para iniciar nosso repositório de segredos, executando o comando ./passw init seguido dos emails dos membros da equipe separados por espaço, como no exemplo:

$ ./passw init alice@example.com bob@example.com eve@example.com

É importante que todos os emails tenham um chave PGP válida associada, senão os próximos passos falharão. Se for necessário uma introdução sobre o assunto, a EFF e a FSF possuem exelentes recursos publicados em português.

Após, iniciaremos nosso repositório git executando o comando:

$ ./passw git init

Esse repositório é o que compartilharemos com nossa equipe.

A partir desse ponto, podemos continuar usando os comandos comuns do pass, lembrando sempre de utilzar o wrapper ./passw que criamos no início. Por exemplo, para adicionar a senha do ambiente de QA em nosso repositório de senhas, executaremos:

$ ./passw insert logins/qa

E para copiar para a área de transferência:

$ ./passw -c logins/qa

A ferramenta pass é bem verssátil e possui muitos outros comandos e opções, nos quais estão documentatos em sua página oficial e com mais detalhes em seu manual.

Só nos resta compartilhar com a equipe

O repositório que tinhamos inicializados nos passos anteriores pode ser enviado para um servidor git, para que os outros membros da equipe possam clonar e copiar do repositório de segredos.

Todas as credenciais estão encriptadas, mas os emails dos membros do time estarão visiveis no arquivo .gpg-id e possivelmente no histórico de commits. Se essa informação não for considerada sensivel, pode-se enviar o repositório git para um repositório público em um servidor, como por exemplo o GitHub.

O que acontece se alguém entra ou sai da equipe?

Se quisermos adicionar ou remover alguém da equipe, basta executar novamente o comando ./passw init com a lista atualizada de emails. No entanto os membros que deixam a equipe ainda assim possuem acesso as versões antigas do repositório, por isso é recomendável que sejam alterados os segredos.