web-dev-qa-db-ja.com

ヘッドレスのCentOS Dockerコンテナーで(gnome-keyring、libsecret、dbusに裏打ちされた)secret-toolコマンドをどのように有効にしますか?

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

私が言うことができることから、これsecret-tool storeコマンドを成功させるために必要なすべて(gnome-keyringデーモン、dbusセッション、secret-tool + libsecret)を提供する必要がありますしかし失敗した場合。

何が欠けていますか?

8
Les Hazlewood

一年後、私はこれを再訪することができました。いろいろなことを研究して試して丸一日過ごした後、ようやくこれを理解することができました。この答えが、私が失った生産性の日々を他の人に救ってくれることを願っています!

チェーンの欠落したリンクは、エントリーを保存する前に、まずキーリングを作成する必要があることでした。このdockerコンテキストでは、ユーザーアカウントやログインなどはありません。Gnomeなどのデスクトップマネージャーによって自動的に作成されるキーリングはありません。

その結果、次のことを行う必要があります。

  1. 最初に手動でキーリングを作成し、次に
  2. 手動でキーリングデーモンを開始する

作成するとき、コマンドはキーリングを初期化するために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)"

これが完了すると、パスワードを保存および検索できるようになります。

[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 /]#
5
Les Hazlewood