GNOME/Keyring
GNOME Keyring は「シークレット・パスワード・鍵・証明書を保存し、それらをアプリケーションから利用できるようにする GNOME のコンポーネントのコレクション」です。
インストール
gnome-keyring は gnome グループの一部なので、GNOME を使用しているのであればすでにインストールされています。また、このパッケージは単独でインストールすることもできます。他のアプリケーションにキーリングへのアクセス権を与えるために libsecret もインストールする必要があります。libgnome-keyring は非推奨になりました (後継は libsecret です) が、それでも特定のアプリケーションで必要になる場合があります。
gnome-keyring-daemon は、ログイン時に systemd ユーザーサービスを介して自動的に開始されます。また、ソケットを介して要求に応じて開始させることもできます。
GNOME Keyring に関する追加のユーティリティは次の通りです:
- secret-tool — コマンドラインから GNOME Keyring (や DBus Secret Service API を実装する他のサービス) にアクセスします。
- lssecret — libsecret を使用してすべてのシークレットアイテム (例えば、GNOME Keyring) を一覧表示します。
GUI で管理する
GNOME Keyring は Seahorse を使って管理することができます。seahorse パッケージをインストールしてください。
キーリング (例えば、デフォルトキーリングである "Login") のパスワードは変更することが可能であり、さらには削除することも可能です。詳細は GNOME Help の Create a new keyring と Update the keyring password を参照してください。
キーリングを使用する
PAM モジュール pam_gnome_keyring.so は、GNOME キーリングを部分的に初期化し、その過程でデフォルトの login キーリングのロックを解除します。gnome-keyring-daemon は systemd ユーザサービスによって自動的に開始されます。
PAM の手順
ディスプレイマネージャを使用している場合、ほとんどのケースで特に設定せずともキーリングは機能します。GDM、LightDM、LXDM、そして 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
SSH 鍵
GNOME Keyring は、ssh-agent のラッパとして振る舞うことができます。このモードでは、SSH 鍵をアンロックする必要が生じた度に GUI パスワード入力ダイアログを表示します。このダイアログには、入力したパスワードを記憶するかどうか尋ねるチェックボックスが含まれています。このチェックボックスを選択すると、ログインキーリングがアンロックされている限り、今後そのキーを使用する際にパスワードを入力する必要が無くなります。
GNOME 41 (2021年9月リリース) からこの (英語版の) 記事が書かれた時点 (2023年4月) まで、gnome-keyring-daemon の SSH 機能は (gcr の一部である) /usr/lib/gcr-ssh-agent
に複製されています。最終的には gnome-keyring-daemon からその (SSH の) 実装を削除する計画になっていますが、その動きは失速しています。それが行われるまでは、どの実装を使用しているかに注意をはらうべきです。なぜなら、実装ごとに異なる方法でセットアップされ使用されるからです:
gcr-ssh-agent
gcr-ssh-agent 実装は、これら2つの実装の中で最もプラグ・アンド・プレイです。また、最終的にはこの実装が唯一の実装になるので、特別な理由がない限りはこれを使用すべきです。
この実装を使用するために必要なことは:
gcr-ssh-agent.socket
systemd ユーザユニットを有効化する。例えば、systemctl --user enable gcr-ssh-agent.socket
を実行する。SSH_AUTH_SOCK
環境変数を$XDG_RUNTIME_DIR/gcr/ssh
に設定して SSH コマンドを実行する。環境変数を設定する方法はたくさんあります。使用するべき方法は、あなたのセットアップと好みに依ります。
gnome-keyring-daemon "ssh" コンポーネント
古い gnome-keyring-daemon 実装を使うことに決めたならば、gnome-keyring-daemon
が --components
引数に ssh を含めて実行されている必要があります。XDG Autostart を使用するデスクトップ環境の場合、/etc/xdg/autostart/gnome-keyring-ssh.desktop
を介して自動的に実行されます。他のデスクトップ環境の場合、gnome-keyring-daemon.service
ユーザユニットの ExecStart
を編集する必要があります (デフォルトで SSH コンポーネントを起動しないからです)。方法は Systemd#ユニットファイルの編集 を参照してください。
コンポーネントが実行されることを確認したら、上記の方法と同じように SSH_AUTH_SOCK
環境変数を $XDG_RUNTIME_DIR/keyring/ssh
に設定してください。注意点として、gcr-ssh-agent と gnome-keyring-daemon は、ほとんど同じ実装を含んでいるにも関わらず、異なるソケットパスをリッスンします。
使用する
あなたが選んだ実装に依らず、以下を実行することで、実行中のエージェントにロードされている 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-add -D
無効化する
別の SSH エージェントを実行したい場合 (例: ssh-agent や gpg-agent)、GNOME Keyring の ssh-agent ラッパを無効化するのは良い考えです。各エージェントは異なるソケットをリッスンし、SSH_AUTH_SOCK
を使ってエージェントを選ぶことができるので、厳密には必須ではありませんが、デバッグの問題を簡単にできます。
gcr-ssh-agent の実装を無効化するには、gcr-ssh-agent.socket
と gcr-ssh-agent.service
を両方とも systemd で無効化・停止してください。
アカウントローカルな方法で gnome-keyring-daemon 実装を無効化するには、/etc/xdg/autostart/gnome-keyring-ssh.desktop
を ~/.config/autostart/
にコピーし、コピー先のファイルに Hidden=true
という行を末尾に追加してください。また、上記の手順で gnome-keyring-daemon.service
に対して行った編集もすべて元に戻してください。
ヒントとテクニック
アプリケーションとの統合
パスフレーズの消去
$ 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 という拡張子が付けられて保存されています。
キーリングのパスワードをユーザのパスワードへ自動的に変更する
/etc/pam.d/passwd
の末尾に password optional pam_gnome_keyring.so
を追加してください:
/etc/pam.d/passwd
#%PAM-1.0 #password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 #password required pam_unix.so sha512 shadow use_authtok password required pam_unix.so sha512 shadow nullok password optional pam_gnome_keyring.so
デスクトップ環境 (KDE、GNOME、XFCE など) の外で gnome-keyring-daemon を起動する
起動
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 キーリング XDG ポータル
GNOME Keyring は XDG Portal バックエンドを公開します (例えば、flatpak を通してサンドボックス化されたアプリケーションで使用するため)。GNOME の外部で動作させるには、/usr/share/xdg-desktop-portal/portals/gnome-keyring.portal
設定ファイルの UseIn
キーを変更してデスクトップ環境を追加する必要があります。例えば、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 デスクトップポータルバックエンドの詳細については、XDG デスクトップ ポータル#バックエンド を参照してください。
トラブルシューティング
パスワードが保存されない
ログインするたびにパスワードプロンプトが表示され、パスワードが保存されない場合は、デフォルトのキーリングを作成/設定する必要がある場合があります。Seahorse (別名、パスワードと鍵) を使ってこれを行う方法については、GNOME Help の Create a new keyring と Change 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
関連する他の問題が発生していないのであれば、このメッセージは「安全に無視することができます」[2]。
No such secret collection at path: /
カスタムの ~/.xinitrc
を使用していて、Seahorse で新しいキーリングを作成使用したときにこのエラーが発生する場合は、以下の行を追加することで解決できる可能性があります[3]:
~/.xinitrc
source /etc/X11/xinit/xinitrc.d/50-systemd-user.sh
ターミナルに "discover_other_daemon: 1" というメッセージが表示される
これは gnome-keyring-daemon が複数回起動されたことが原因です。Systemd サービスが gnome keyring のデーモンと一緒に提供されるため、別の方法で起動する必要はありません。そのため、.zshenv
、.bash_profile
、.xinitrc
、config.fish
、その他の似たような場所から gnome-keyring-daemon を起動するコマンドを削除してください。あるいは、gnome-keyring-daemon.service
と gnome-keyring-daemon.socket
ユーザーユニットを無効化することもできます。