ヘッドレスCentOS DockerコンテナでSecret-toolコマンド(gnome-keyring、libsecret、dbusでサポート)を有効にする方法は?

ヘッドレスCentOS DockerコンテナでSecret-toolコマンド(gnome-keyring、libsecret、dbusでサポート)を有効にする方法は?

実行中のヘッドレスCentoS 7.5.1804 Dockerコンテナに秘密を安全に保存するためにコマンドを使用しようとしていますが、これをsecret-tool正常に実行するために必要なパッケージや構成が見つからないようです。

具体的には、次のコマンドを実行できるようにしたいです。

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セッション、および秘密ツール+ libsecret)を提供しますが、失敗した場合。

私は何を見逃していますか?

答え1

1年後、私はこれを再び訪問することができました。長い一日の間に研究し、様々なことを試みた最後についにこれを見つけました。この回答が他の人が私が失った生産性を救うのに役立つことを願っています!

チェーンから欠落しているリンクは、アイテムを保存する前にキーリングを生成する必要があることです。このドッカーコンテキストには、ユーザーアカウント、ログインなどはありません。したがって、Gnomeなどのデスクトップ管理者が自動的に作成したキーリングはありません。

したがって、次のことを行う必要があります。

  1. まず、キーリングを手動で作成してから
  2. キーリングデーモンを手動で起動

コマンドが作成されると、キーリングを初期化するために標準入力のパスワードが必要です。このドッカーの例では、テスト用であり、実際のユーザーが実際には使用しないため、シーン(最初の呼び出しでキーリングを生成)と実際の起動デーモンシナリオにパイプされる改行ダミー\nパスワードを使用します。--unlock--start

これが究極の作業命令セットです。公式の基本centosドッカー画像は使用されません。 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 /]#

答え2

Ubuntuヘッドレス仮想マシンのコマンドは次のとおりです。

apt install dbus-x11 gnome-keyring libsecret # ~79MB
export $(dbus-launch)
eval "$(echo '\n' | gnome-keyring-daemon --unlock)"
echo [email protected] | secret-tool store --label="main" email address
echo $(secret-tool lookup email address)

kill -9  $(pgrep -f gnome-keyring-daemon)
# echo $(secret-tool lookup email address)  # no longer gives password

秘密を検索するには、すべてのスクリプトでキーリングのロックを解除する必要があるようです。

実際には、秘密はDockerでのみ動作するevalコマンドを使用することです。このエラーがない場合は、複数のGitHubプロジェクトを含むオンラインでこのエラーに対する解決策はありません。

「秘密ツール:ロックされたコレクションにアイテムを作成できません」

編集してください。これは一度だけ機能します。これは-r、再起動デーモンを使用してプロセスを終了して再起動した後も同様です。名前が異なっても新しい秘密を取得できず、保存された秘密を検索することもできません。
「秘密ツール:ロックされたコレクションにアイテムを作成できませんでした。」エラー

関連情報