Centos

如何在無頭 CentOS Docker 容器中啟用 secret-tool 命令(由 gnome-keyring、libsecret 和 dbus 支持)?

  • February 11, 2022

我正在嘗試使用該secret-tool命令將機密安全地儲存在正在執行的無頭 CentoS 7.5.1804 Docker 容器中,但似乎無法找到使這項工作成功所需的軟體包和/或配置。

具體來說,我希望能夠執行這個命令:

printf "aPassword" | secret-tool store --label="test" foo bar

並且能夠通過執行查看該密碼:

secret-tool lookup foo bar

當我執行secret-tool store命令時,我得到這個:

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

我已經關注了ArchLinux Gnome/Keyring wiki 頁面,並嘗試通過以下步驟在 CentOS Docker 容器上執行相同操作:

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

據我所知,這應該提供所需的一切(gnome-keyring 守護程序、dbus 會話和 secret-tool + libsecret)以允許secret-tool store命令成功,但如果失敗。

我錯過了什麼?

一年後,我能夠重新審視這一點。經過一整天的研究和嘗試各種事情,我終於能夠弄清楚這一點。我希望這個答案可以幫助其他人節省我失去的生產力!

鏈中缺少的環節是必須先創建密鑰環,然後才能將條目保存到其中。在這個 docker 上下文中,沒有使用者帳戶,沒有登錄等 - 所以沒有像 Gnome 這樣的桌面管理器自動創建的密鑰環。

因此,您必須:

  1. 首先手動創建密鑰環,然後
  2. 手動啟動密鑰環守護程序

創建時,該命令需要來自標準輸入的密碼來初始化密鑰環。在這個 docker 範例中,因為它只是用於測試而不是由真實使用者實際使用,所以我使用了一個新行的虛擬密碼,該密碼通過\n管道傳輸到--unlock場景(它在第一次呼叫它時創建了一個密鑰環)和--start實際啟動守護程序的場景。

這是最終的工作命令集。請注意,centos沒有使用官方的基礎 docker 鏡像 - 必須為 DBus 執行 systemd 服務,因此我們必須使用官方centos/systemd鏡像:

docker run --privileged -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name centos-systemd centos/systemd
docker exec -it centos-systemd /bin/bash

# remainder of commands are in the container bash shell:
yum -y install gnome-keyring libsecret dbus-x11

eval "$(dbus-launch --sh-syntax)"

mkdir -p ~/.cache
mkdir -p ~/.local/share/keyrings # where the automatic keyring is created

# 1. Create the keyring manually with a dummy password in stdin
eval "$(printf '\n' | gnome-keyring-daemon --unlock)"

# 2. Start the daemon, using the password to unlock the just-created keyring:
eval "$(printf '\n' | /usr/bin/gnome-keyring-daemon --start)"

完成此操作後,我們現在可以儲存和查找密碼:

[root@603a122f7555 /]# secret-tool lookup foo bar
[root@603a122f7555 /]# printf "aPassword" | secret-tool store --label="test" foo bar
[root@603a122f7555 /]# secret-tool lookup foo bar
aPassword
[root@603a122f7555 /]#

引用自:https://unix.stackexchange.com/questions/473528