Les*_*ood 14 d-bus centos gnome-keyring docker
我正在尝试使用该secret-tool命令在正在运行的无头 CentoS 7.5.1804 Docker 容器中安全地存储秘密,但似乎无法找到使这项工作成功所需的包和/或配置。
具体来说,我希望能够运行此命令:
printf "aPassword" | secret-tool store --label="test" foo bar
Run Code Online (Sandbox Code Playgroud)
并且能够通过运行来查看该密码:
secret-tool lookup foo bar
Run Code Online (Sandbox Code Playgroud)
当我运行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
Run Code Online (Sandbox Code Playgroud)
我关注了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
Run Code Online (Sandbox Code Playgroud)
据我所知,这应该提供所需的一切(gnome-keyring 守护进程、dbus 会话和 secret-tool + libsecret)以允许secret-tool store命令成功,但如果失败。
我错过了什么?
Les*_*ood 10
一年后,我能够重新审视这个问题。经过一整天的研究和尝试各种事情,我终于能够弄清楚这一点。我希望这个答案能让其他人免于我失去生产力的日子!
链中缺少的环节是必须先创建一个密钥环,然后才能将条目保存到其中。在这个 docker 上下文中,没有用户帐户,没有登录等 - 因此没有像 Gnome 这样的桌面管理器会自动创建的密钥环。
因此,您必须:
创建时,该命令需要来自 stdin 的密码来初始化密钥环。在这个 docker 示例中,因为它只是用于测试而不是由真实用户实际使用,所以我使用了一个换行符的虚拟密码,该密码通过\n管道输入到--unlock场景(第一次调用它时会创建一个密钥环)和--start实际启动守护进程的场景。
这是最终的工作命令集。请注意,centos未使用官方基础docker 映像 - systemd 服务必须为 DBus 运行,因此我们必须改用官方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)"
Run Code Online (Sandbox Code Playgroud)
完成此操作后,我们现在可以存储和查找密码:
[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 /]#
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5747 次 |
| 最近记录: |