GNOME/Keyring

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

GNOME Keyring は「シークレット・パスワード・鍵・証明書を保存し、それらをアプリケーションから利用できるようにする GNOME のコンポーネントのコレクション」です。

GNOME Keyring は org.freedesktop.secrets API を提供しています。これは、クライアントアプリケーションがユーザーのログインセッション内で実行中のサービスを利用してシークレットをセキュアに保管できるようにする API です。

セキュリティ

悪意のあるアプリケーションからの保護

GNOME/Keyring API の動作に関連するセキュリティの問題 (CVE-2018-19358) が過去に報告されています。いかなるアプリケーションも、キーリングのロックが解除されていれば、任意のシークレットを簡単に読むことができてしまいます。さらに、ユーザーがログインしていれば、ログイン/デフォルトのコレクションのロックは解除されています。D-Bus の保護機構 (busconfig とポリシー XML エレメントを含む) はデフォルトで使用されておらず、いずれにせよ、これも簡単にバイパスできてしまいます。

GNOME/Keyring のセキュリティモデルによれば、信頼されないアプリケーションはユーザーのセッションバスソケットへのアクセスを許可されないであろうことから、GNOME プロジェクトはこの脆弱性レポートに同意していません

Flatpak によってサンドボックス化されているアプリケーションは、セッションバスへのアクセスがフィルタリングされています。

セッションがロックされてもキーリングはロックされません

セッションがロックされても、キーリングは自動的にロックされません。[1] これはつまり、パスワードがメモリ内に残り続け、DMA 攻撃に対して脆弱になることを意味します。

インストール

gnome-keyringgnome グループの一部なので、GNOME を使用しているのであればすでにインストールされています。また、このパッケージは単独でインストールすることもできます。他のアプリケーションにキーリングへのアクセス権を与えるために libsecret もインストールする必要があります。libgnome-keyring は非推奨になりました (後継は libsecret です) が、それでも特定のアプリケーションで必要になる場合があります。

gnome-keyring-daemon は、ログイン時に systemd ユーザーサービスを介して自動的に開始されます。また、ソケットを介して要求に応じて開始させることもできます。

GNOME Keyring に関する追加のユーティリティは次の通りです:

  • secret-tool — コマンドラインから GNOME Keyring (や DBus Secret Service API を実装する他のサービス) にアクセスします。
https://wiki.gnome.org/Projects/Libsecret || libsecret
  • lssecretlibsecret を使用してすべてのシークレットアイテム (例えば、GNOME Keyring) を一覧表示します。
https://gitlab.com/GrantMoyer/lssecret || lssecret-gitAUR

GUI で管理する

GNOME Keyring は Seahorse を使って管理することができます。seahorse パッケージをインストールしてください。

キーリング (例えば、デフォルトキーリングである "Login") のパスワードは変更することが可能であり、さらには削除することも可能です。詳細は GNOME Help の Create a new keyringUpdate the keyring password を参照してください。

キーリングを使用する

PAM モジュール pam_gnome_keyring.so は、GNOME キーリングを部分的に初期化し、その過程で login キーリングのロックを解除します。gnome-keyring-daemon は systemd ユーザサービスによって自動的に開始されます。

PAM の手順

ノート: 自動ログインを使用しない場合にキーリングのロックを自動的にアンロックしたい場合、ユーザアカウントのパスワードと login キーリングのパスワードを同じにする必要があります。#キーリングのパスワードをユーザのパスワードへ自動的に変更する を参照してください。
ヒント:
  • 自動ログインを使用している場合にキーリングを自動的にアンロックするには、login キーリングのパスワードを空白に設定すればよいです。この場合、キーリングの内容は暗号化されずに保存されることに注意してください。
  • あるいは、GDM と LUKS を使用している場合、キーリングのパスワードが LUKS のパスワードと一致すれば、GDM はキーリングをアンロックすることができます。そうするには、mkinitcpio.conf で systemd init を使用し、かつ適切なカーネルパラメータを使用する必要があります。詳細は [2] を参照してください。
  • 以下の PAM の手順をスキップしたい場合は、login キーリングを手動で、あるいは他の方法によってアンロックしなければなりません。#デスクトップ環境 (KDE、GNOME、XFCE など) の外で gnome-keyring-daemon を使うGnomeKeyring wiki を参照してください。

ディスプレイマネージャを使用している場合、ほとんどのケースで特に設定せずともキーリングは機能します。GDMLightDMLXDM、そして SDDM にはすでに必須の PAM 設定が含まれています。キーリングのロックを自動的に解除しないディスプレイマネージャの場合は、以下で言及している /etc/pam.d/login 以外の適切なファイルを適切に編集してください。

コンソールベースのログインを行う場合は、/etc/pam.d/login を編集してください:

auth セクションの最後に auth optional pam_gnome_keyring.so を追加し、session セクションの最後に session optional pam_gnome_keyring.so auto_start を追加してください。

/etc/pam.d/login
#%PAM-1.0

auth       required     pam_securetty.so
auth       requisite    pam_nologin.so
auth       include      system-local-login
auth       optional     pam_gnome_keyring.so
account    include      system-local-login
session    include      system-local-login
session    optional     pam_gnome_keyring.so auto_start
ノート: greetd ログインマネージャを使用している場合、変更する必要のあるファイルは /etc/pam.d/login ではなく /etc/pam.d/greetd です。

SSH 鍵

GNOME Keyring は、ssh-agent のラッパとして振る舞うことができます。このモードでは、SSH 鍵をアンロックする必要が生じた度に GUI パスワード入力ダイアログを表示します。このダイアログには、入力したパスワードを記憶するかどうか尋ねるチェックボックスが含まれています。このチェックボックスを選択すると、ログインキーリングがアンロックされている限り、今後そのキーを使用する際にパスワードを入力する必要が無くなります。

バージョン 1:46 から、gnome-keyring-daemon ビルドでは SSH の機能がデフォルトで無効化されています。この機能は /usr/lib/gcr-ssh-agent (gcr-4 パッケージに含まれています) へと移動されています

gcr をセットアップする

やるべきことは:

  1. gcr-ssh-agent.socket systemd ユーザーユニット有効化する。
  2. gcr-ssh-agent.socket systemd ユーザーユニットを一度開始する。これにより、ソケットファイル $XDG_RUNTIME_DIR/gcr/ssh が作成されます。ファイルが作成されれば、最初のステップでソケットユニットが自動的に開始されるようになります。
  3. gcr-ssh-agent.socket ユニットがアクティブである場合、SSH_AUTH_SOCK 環境変数を手動で設定する必要はないはずです。一旦ログアウトし、ログインし直せば、SSH_AUTH_SOCK 環境変数は $XDG_RUNTIME_DIR/gcr/ssh に設定されているはずです。これは、Gnome の Console アプリケーションで fish をデフォルトシェルとして使用した場合に動作することが確認されています。

環境変数を設定する方法はたくさんあります。使用するべき方法は、あなたのセットアップと好みに依ります。

使用する

以下を実行することで、実行中のエージェントにロードされている SSH 鍵をリストアップできます:

$ ssh-add -L

これにより、適切なサービスが起動されていて、SSH_AUTH_SOCK が適切に設定されていることを確認することができます。

パスフレーズをキーリングに永続的に保存するには、seahorse パッケージの ssh-askpass を使用してください:

$ /usr/lib/seahorse/ssh-askpass my_key

他のディレクトリから SSH 鍵を手動で追加するには:

$ ssh-add ~/.private/id_rsa
Enter passphrase for ~/.private/id_rsa:
ノート: 秘密鍵と同じディレクトリ (上記の例では ~/.ssh/id_rsa.pub) に対応する .pub ファイルが必要です。また、公開鍵のファイル名が秘密鍵に .pub を付けた名前になっていることを確認してください (例: my_key.pub)。

手動で追加した鍵をすべて無効化するには:

$ ssh-add -D

無効化する

別の SSH エージェントを実行したい場合 (例: ssh-agentgpg-agent)、GNOME Keyring の ssh-agent ラッパを無効化するのは良い考えです。各エージェントは異なるソケットをリッスンし、SSH_AUTH_SOCK を使ってエージェントを選ぶことができるので、厳密には必須ではありませんが、デバッグの問題を簡単にできます。ただし、GNOME の実装は BatchMode を含む多くのスクリプト機能を実装していないことに注意してください[3]

gcr-ssh-agent を無効化するには、gcr-ssh-agent.socketgcr-ssh-agent.service を両方とも systemd で無効化・停止してください。

ヒントとテクニック

アプリケーションとの統合

キーリングをロックする

$ dbus-send --session --dest=org.freedesktop.secrets \
   --type=method_call  \
   /org/freedesktop/secrets \
   org.freedesktop.Secret.Service.Lock \
   array:objpath:/org/freedesktop/secrets/collection/login

このコマンドは D-Bus メソッドを呼び出して login キーリングをロックします。これとは別に GUI を使いたい場合は、Seahorse でキーリングをロックすることもできます。

パスフレーズの消去

$ gnome-keyring-daemon -r -d

このコマンドは、gnome-keyring-daemon を開始し、以前の実行中のインスタンスを終了します。

Git 統合

GNOME Keyring は、HTTPS 経由でプッシュするときに Git と一緒に使うと便利です。この機能を使用するには、libsecret パッケージがインストールされている必要があります

libsecret ヘルパーを使うように Git を設定してください:

$ git config --global credential.helper /usr/lib/git-core/git-credential-libsecret

これで、次回 git push を実行したときに、キーリングがまだ解除されていない場合に解除するよう要求されます。

GnuPG 統合

GnuPG を使用するいくつかのアプリケーションは、pinentry-program が設定されていることを要求します。GNOME 3 pinentry for GNOME Keyring を使用してパスフレーズのプロンプトを管理するようにするには、以下を設定してください:

~/.gnupg/gpg-agent.conf
pinentry-program /usr/bin/pinentry-gnome3

もう一つのオプションは、GPG のループバックを強制することで、アプリケーションでパスフレーズを入力できるようにすることです。

キーリングの名前変更

キーリングの表示名 (つまり、Seahorse や file で表示される名前) は、暗号化されていないキーリングファイル内で display-name の値を変更することで、変更することができます。キーリングは通常、~/.local/share/keyrings/ 内に .keyring という拡張子が付けられて保存されています。

キーリングのパスワードをユーザのパスワードへ自動的に変更する

ノート: これは、login キーリングにしか影響しません。

/etc/pam.d/passwd の末尾に password optional pam_gnome_keyring.so追加してください:

/etc/pam.d/passwd
...
password	optional	pam_gnome_keyring.so

デスクトップ環境 (KDE、GNOME、XFCE など) の外で gnome-keyring-daemon を使う

起動する

この記事またはセクションの正確性には問題があります。
理由: 少なくとも xinitSDDM/etc/X11/xinit/xinitrc.d/ 内のスクリプトを全て実行するし、sway/etc/sway/config.d/50-systemd-user.conf を提供しているので、問題は "デスクトップ環境の外" ではありません。gnome-keyring が XDG Autostart を必要とするならば、インストール/設定のセクションでもそう書かれてあるべきです。英語版の議論ページ: en:Talk:GNOME/Keyring#Launching_gnome-keyring-daemon_outside_desktop_environments_(KDE,_GNOME,_XFCE,_...)。 (議論: トーク:GNOME/Keyring#)

sway や i3、または以下のファイルを実行しないウィンドウマネージャを使用している場合:

  • /etc/xdg/autostart/gnome-keyring-*.desktop
  • /etc/X11/xinit/xinitrc.d/50-systemd-user.sh

ウィンドウマネージャの起動時に以下のコマンドがウィンドウマネージャによって実行される必要があります。以下のコマンドを何らかの特定の順序で実行する必要はありません。

dbus-update-activation-environment DISPLAY XAUTHORITY WAYLAND_DISPLAY

または

dbus-update-activation-environment --all

このコマンドは、環境変数をウィンドウマネージャから dbus セッションに渡します。これがないと、DBus 経由で GUI プロンプトをトリガーできません。例えば、これは seahorse のパスワードプロンプトで必要です。

これが必要になるのは、グラフィカル環境が開始される前に dbus セッションが開始されるからです。したがって、dbus セッションは、あなたがいるグラフィカルな環境について知らないのです。誰か、または何かが、グラフィカル環境を記述する環境変数を dbus に渡すことで、グラフィカルな環境について dbus セッションに教えなければなりません。

gnome-keyring-daemon --start --components=secrets

ログイン時に PAM は gnome-keyring-daemon --login を実行します。これにより、gnome-keyring がログインパスワードによってアンロックされた状態になります。もし gnome-keyring-daemon --login が数分以内に dbus セッションに接続されなければ、gnome-keyring-daemon --login は終了します。gnome-keyring-daemon --start ... がウィンドウ・マネージャ内で dbus セッションに対して起動されると、gnome-keyring-daemon --login は dbus セッションに接続されます。ログインセッションが gnome-keyring-daemon --start ... を開始する前に gnome-keyring-daemon --login が終了すると、gnome-keyring や secret service API を使用するプログラムも使えなくなってしまいます。

GNOME Keyring XDG Portal

この記事またはセクションの正確性には問題があります。
理由: /usr/share に存在するファイルを変更しても、パッケージのアップグレード時に元に戻ってしまいます。 (議論: トーク:GNOME/Keyring#)

GNOME Keyring は、flatpak などによってサンドボックス化されたアプリケーションのために XDG Portal のバックエンドを公開しています。GNOME の外でこれを機能させるには、設定ファイル /usr/share/xdg-desktop-portal/portals/gnome-keyring.portalUseIn キーにデスクトップ環境の名前を追加する必要があります。例えば、sway を追加するには:

/usr/share/xdg-desktop-portal/portals/gnome-keyring.portal
[portal]
DBusName=org.freedesktop.secrets
Interfaces=org.freedesktop.impl.portal.Secret
UseIn=gnome;sway

XDG Desktop Portal のバックエンドに関する詳細は XDG デスクトップ ポータル#バックエンド を参照してください。

トラブルシューティング

パスワードが保存されない

ログインするたびにパスワードプロンプトが表示され、パスワードが保存されない場合は、デフォルトのキーリングを作成/設定する必要がある場合があります。Seahorse (別名、パスワードと鍵) を使ってこれを行う方法については、GNOME Help の Create a new keyringChange the default keyring を参照してください。

キーリングのリセット

"The password you use to login to your computer no longer matches that of your login keyring" といったエラーメッセージが表示される場合は、ログインキーリングのパスワードを変更する必要があります。

または、~/.local/share/keyrings/ から login.keyring ファイルと user.keystore ファイルを削除することもできます。これらのファイルを削除すると、保存されている全鍵が永久に削除されるので注意してください。これらの削除したら、一旦ログアウトし、ログインし直してください。

Unable to locate daemon control file

ログイン後に以下のエラーが journal に表示される場合:

gkr-pam: unable to locate daemon control file

関連する他の問題が発生していないのであれば、このメッセージは「安全に無視することができます」[4]

No such secret collection at path: /

Seahorse で新しいキーリングを追加しようとすると、以下の理由によりこのエラーが発生することがあります:

  • ~/.local/share/keyrings/ ディレクトリが存在しない。この場合、このディレクトリを作成してください。
  • カスタムの ~/.xinitrc が使用されている。これは以下の行を追加することで解決します[5]:
~/.xinitrc
source /etc/X11/xinit/xinitrc.d/50-systemd-user.sh

ターミナルに "discover_other_daemon: 1" というメッセージが表示される

これは gnome-keyring-daemon が複数回起動されたことが原因です。Systemd サービスが gnome keyring のデーモンと一緒に提供されるため、別の方法で起動する必要はありません。そのため、.zshenv.bash_profile.xinitrcconfig.fish、その他の似たような場所から gnome-keyring-daemon を起動するコマンドを削除してください。あるいは、gnome-keyring-daemon.servicegnome-keyring-daemon.socket ユーザーユニット無効化することもできます。

キーリングの不適切な初期化

これによる症状としては:

  • SSH や Git といったプログラムが、キーリングからパスワードが提供されるのを待機する間、ハングアップする。最終的には "agent refused operation" といったエラーでタイムアウトします。
  • Seahorse でキーリングが何も表示されない。"login" という名前のキーリングを手動で作成しても何も起こらないに見える。
  • 次のようなエラーメッセージが Seahorse の出力に現れる:
    couldn't load all secret collections: No such secret collection at path: /org/freedesktop/secrets/collection/login

これを解決するには、以下を行ってください:

  • gnome-keyring-daemon.service systemd ユーザーユニット再起動する。これにより、login キーリングが適切に初期化されるはずです。
  • gcr-ssh-agent.service systemd ユーザーユニットを、使用しているのであれば、再起動する。他のエージェントも再起動する必要があるかもしれません。

これで治らない場合は、キーリングを再設定することを検討してください。

参照

翻訳ステータス: このページは en:GNOME/Keyring の翻訳バージョンです。最後の翻訳日は 2024-11-30 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。