Credential store & Docker

debian develop linux docker credential manger

Imgur

Usando Docker login para subir o descargar nuestras imagenes

Cuando instalamos Docker y ejecutamos:

$ docker login

nos muestra por default un mensaje avisandonos que nuestro login se encuentra en texto plano:

WARNING! Your password will be stored unencrypted in /home/max/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Y no queremos nuestro login almacenado por ahi en texto plano.

Credential Stores

Docker ofrece algunas alternativas para almacenar esta información de manera segura:

Instalando y configurando Pass

En este caso veremos como usar pass el confiable administrador de contraseñas para sistemas *nix

Lo primero es descargarlo, dependiendo de nuestra distro lo instalaremos, en su pagina podemos encontrar las instrucciones para cada caso (https://www.passwordstore.org/) y en este caso lo haré en un servidor Debian, ademas instalamos gpg y rng-tools:

$ sudo apt-get install pass gpg rng-tools rng-tools5

Una vez instalado esto, crearemos una llave con GPG, y copiaremos el ID de nuestra llave creada:

$ gpg2 --gen-key

Y seguimos las instrucciones en pantalla

Nota: si por alguna razón parece "colgarse" nuestro proceso al crear la llave, realizamos el proceso de nuevo, pero antecediendo con estos pasos:

$ gpg-agent --daemon --use-standard-socket --pinentry-program /usr/bin/pinentry-curses

$ sudo rngd -r /dev/urandom

$ gpg2 --gen-key

Y copiamos el ID de nuestro par de llaves generadas, y que usaremos en el siguiente paso.

Nos mostrará algo como lo siguiente:

gpg: /home/tuusuario/.gnupg/trustdb.gpg: trustdb created
gpg: key 12B45CC4FB34TB71 marked as ultimately trusted
gpg: directory '/home/tuusuario/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/tuusuario/.gnupg/openpgp-revocs.d/32B00A2CF01A1124F9B01EFF12B45CC4FB34TB71.rev'
public and secret key created and signed.

pub   rsa3072 2020-10-09 [SC] [expires: 2022-10-09]
      32B00A2CF01A1124F9B01EFF12B45CC4FB34TB71
uid                      Tu Usuario <usuario@mail.mx>
sub   rsa3072 2020-10-09 [E] [expires: 2022-10-09]

El renglón debajo de pub es el ID de tu llave que hay que guardar para el siguiente paso

Instalando el credential manager

Nos dirigimos al sitio de descargas del repositorio GitHub y buscamos el release mas reciente https://github.com/docker/docker-credential-helpers/releases:

En este caso:

https://github.com/docker/docker-credential-helpers/releases/download/v0.6.2/docker-credential-pass-v0.6.2-amd64.tar.gz

Y lo descomprimimos:

$ tar -xf docker-credential-pass-v0.6.2-amd64.tar.gz 

$ chmod +x docker-credential-pass 

$ sudo mv docker-credential-pass /usr/local/bin/

Inicializar pass

Una vez instalado iniciaremos nuestro store de passwords (pass)

$ pass init "llave gpg"

Donde "llave gpg" es la llave previamente copiada del paso de generacion de llave gpg

Despues insertamos lo siguiente en pass:

$ pass insert docker-credential-helpers/docker-pass-initialized-check

Y damos el siguiente password: 'pass is initialized' sin las ' comillas simples.

Revisamos que todo este bien ejecutando lo siguiente:

$ pass show docker-credential-helpers/docker-pass-initialized-check

Y nos debe mostrar "pass is initialized"

Con esto cuando hagamos un login con docker, se encargará de almacenarlo con pass de una forma segura.

Configurando docker con pass

Ahora tenemos que indicarle a docker que use pass como credential manager, esto lo haremos editando el archivo "config.json" en nuestro directorio Home ( lo podemos encontrar en ~/.docker/config.json ) y debe quedar como el siguiente ejemplo siendo la parte importante
"credsStore": "pass" :

{
        "auths": {
                "https://index.docker.io/v1/": {}
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.09.6 (linux)"
        },
        "credsStore": "pass"
}

Una vez hagamos login con docker este ya se almacenará en pass.

Fuentes:
https://github.com/docker/docker-credential-helpers/issues/102
https://medium.com/@yta/manjaro-docker-credential-store-configuration-dd545a905744
https://www.antoniojgutierrez.com/2018/08/11/dockerloginpasswordstore.html