如何在無頭 CentOS Docker 容器中啟用 secret-tool 命令(由 gnome-keyring、libsecret 和 dbus 支持)?
我正在嘗試使用該
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 這樣的桌面管理器自動創建的密鑰環。
因此,您必須:
- 首先手動創建密鑰環,然後
- 手動啟動密鑰環守護程序
創建時,該命令需要來自標準輸入的密碼來初始化密鑰環。在這個 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 /]#