Estou tentando usar o secret-tool
comando para armazenar um segredo com segurança em um contêiner do Docker headless do CentoS 7.5.1804, mas não consigo encontrar quais pacotes e/ou configuração são necessários para que isso funcione com êxito.
Especificamente, quero poder executar este comando:
printf "aPassword" | secret-tool store --label="test" foo bar
E ser capaz de ver essa senha executando:
secret-tool lookup foo bar
Quando executo o secret-tool store
comando, recebo isso:
printf 'aPassword' | secret-tool store --label="test" foo bar
** Message: Remote error from secret service: org.freedesktop.DBus.Error.UnknownMethod: No such interface 'org.freedesktop.Secret.Collection' on object at path /org/freedesktop/secrets/collection/login
secret-tool: No such interface 'org.freedesktop.Secret.Collection' on object at path /org/freedesktop/secrets/collection/login
Eu segui a página wiki do ArchLinux Gnome/Keyring e tentei fazer o mesmo em um contêiner CentOS Docker através das seguintes etapas:
docker run --privileged -it centos:centos7.5.1804 /bin/bash
# remainder of commands are in the container bash shell:
printf 'search localhost.localdomain\nnameserver 8.8.8.8\nameserver 8.8.4.4' > /etc/resolv.conf
yum -y update
yum -y install sudo gnome-keyring libsecret dbus-x11
yum clean all && rm -rf /var/cache/yum
export DISPLAY=“:0.0”
eval "$(dbus-launch --sh-syntax)"
mkdir -p ~/.cache
mkdir -p ~/.local/share/keyrings
eval $(gnome-keyring-daemon --start)
export SSH_AUTH_SOCK
Pelo que posso dizer, isso deve fornecer tudo o que é necessário (gnome-keyring daemon, dbus session e secret-tool + libsecret) para permitir que o secret-tool store
comando seja bem-sucedido, mas se falhar.
o que estou perdendo?
Um ano depois, e pude revisitar isso. Depois de um dia inteiro pesquisando e tentando várias coisas, finalmente consegui descobrir isso. Espero que esta resposta salve outros os dias de produtividade que perdi!
O elo que faltava na cadeia era que um chaveiro precisa ser criado primeiro antes que as entradas possam ser salvas nele. Nesse contexto do docker, não há conta de usuário, login, etc - portanto, nenhum chaveiro que teria sido criado automaticamente por um gerenciador de desktop como o Gnome.
Como resultado, você deve:
Ao criar, o comando requer uma senha de stdin para inicializar o chaveiro. Neste exemplo do docker, porque é apenas para teste e não é realmente usado por um usuário real, estou usando uma senha fictícia de uma nova linha
\n
que é canalizada para o--unlock
cenário (que cria um chaveiro na primeira vez que é chamado) e o--start
cenário que realmente inicia o daemon.Aqui está o conjunto de comandos de trabalho final. Observe que a imagem do docker base oficial
centos
não é usada - os serviços do systemd devem estar em execução para o DBus, portanto, devemos usar acentos/systemd
imagem oficial:Feito isso, agora podemos armazenar e pesquisar senhas:
Aqui estão meus comandos em uma VM sem cabeça do Ubuntu:
Parece que o chaveiro precisará ser desbloqueado em qualquer script para recuperar os segredos.
O truque estava realmente usando o comando eval que eu achava que era apenas para o Docker. Este é o erro sem isso, que não tem solução na rede, incluindo alguns projetos do GitHub.
"secret-tool: Não é possível criar um item em uma coleção bloqueada"
EDIT, isso só funcionou uma vez. Mesmo depois de usar
-r
para reiniciar o daemon, matando os processos e reiniciando. Não consigo obter novos segredos, mesmo com nomes diferentes, nem recuperar o armazenado.Erro "secret-tool: não é possível criar um item em uma coleção bloqueada"