Último gpg em um script com --passphrase-fd pedindo passphrase no contêiner do Docker

0

Eu uso gpg na construção automática do Docker Debian:latest e o gpg no terminal funciona, mas quando eu uso em um script, não importa o que eu faça, ele pede a frase secreta , eu gosto disso:

passphrase=$(cat /build/secure/passphrase.txt)
echo $passphrase | gpg --passphrase-fd 0 --import /build/secure/gpg/secret-signing-key.pgp

mas se eu fizer no terminal, funciona!

Por quê? Como vem?

    
por Patrik Laszlo 17.09.2017 / 10:52

1 resposta

2

GnuPG 2, gpg-agent e Pinback de Loopback

O GnuPG 2.0 e mais recente só consideram --passphrase-... -options quando --batch também é aplicado. De man gpg :

Note that this passphrase is only used if the option --batch has also been given. This is different from GnuPG version 1.x.

Portanto, um comando de trabalho para o GnuPG 2.0 seria:

gpg --batch --passphrase-fd 0 --import <path>

Além disso, desde o GnuPG 2.1, gpg-agent manipula todas as operações de chave secreta e também pede a senha. A idéia por trás disso é ter um pequeno aplicativo central manipulando os bits mais críticos da criptografia, e ter o GnuPG (comparativamente) grande com potencialmente mais bugs e aplicativos de segurança fazendo todas as outras coisas. Por padrão, gpg-agent não consultará gpg para a frase secreta, mas tente perguntar ao usuário diretamente (o que obviamente falhará em uma compilação autônoma). Mas há uma última chance: você pode usar --pinentry-mode loopback para fazer gpg-agent query gpg para a frase secreta, mas como isso afeta a segurança como discutido anteriormente, você também deve configurar gpg-agent para permitir a pinagem de loopback. p>

Adicione a seguinte linha a ~/.gnupg/gpg-agent.conf :

allow-loopback-pinentry

Agora, você deve poder usar o seguinte comando no GnuPG 2.1 e mais recente:

gpg --batch --pinentry-mode loopback --passphrase-fd 0 --import <path>

Passando no gpg-agent soquete

Uma opção melhor do que importar chaves privadas para contêineres do Docker é geralmente armazenar (e desbloquear) a chave privada no host e, em seguida, passar um soquete gpg-agent para o contêiner do Docker. Dessa forma, os segredos críticos nunca entrarão no contêiner do Docker, e você pode ter certeza de que ele não será armazenado nas camadas da imagem e publicado por acidente.

    
por 17.09.2017 / 11:39