「GNOME/Keyring」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎SSH 鍵: 同期)
54行目: 54行目:
 
== SSH 鍵 ==
 
== SSH 鍵 ==
   
  +
GNOME Keyring は、[[SSH 鍵#ssh-agent|ssh-agent]] のラッパとして振る舞うことができます。このモードでは、SSH 鍵をアンロックする必要が生じた度に GUI パスワード入力ダイアログを表示します。このダイアログには、入力したパスワードを記憶するかどうか尋ねるチェックボックスが含まれています。このチェックボックスを選択すると、ログインキーリングがアンロックされている限り、今後そのキーを使用する際にパスワードを入力する必要が無くなります。
'''ssh''' コンポーネントを含む '''gnome-keyring-daemon''' は、SSH エージェントを起動し、{{ic|~/.ssh/}} にある対応する ''.pub'' ファイルを持つすべての鍵を自動的にロードします。これらの鍵をエージェントから削除する方法はありません。
 
   
  +
GNOME 41 (2021年9月リリース) からこの (英語版の) 記事が書かれた時点 (2023年4月) まで、gnome-keyring-daemon の SSH 機能は ({{Pkg|gcr}} の一部である) {{ic|/usr/lib/gcr-ssh-agent}} に[https://gitlab.gnome.org/GNOME/gcr/-/merge_requests/67 複製されました]。最終的には gnome-keyring-daemon からその (SSH の) 実装を削除する[https://fedoraproject.org/wiki/Changes/ModularGnomeKeyring 計画]になっていますが、その動きは失速しています。それが行われるまでは、どの実装を使用しているかに注意をはらうべきです。なぜなら、実装ごとに異なる方法でセットアップされ使用されるからです:
すべてのロードされている鍵を確認するには:
 
   
$ ssh-add -L
+
=== gcr-ssh-agent ===
   
  +
gcr-ssh-agent 実装は、これら2つの実装の中で最もプラグ・アンド・プレイです。また、最終的にはこの実装が唯一の実装になるので、特別な理由がない限りはこれを使用すべきです。
サーバーに接続するときに、鍵が使われてパスフレーズの入力を求めるダイアログがポップアップするようになります。ログイン時に自動的にロックを解除するオプションもあります。このオプションにチェックを入れている場合、もうパスフレーズを入力する必要はなくなります。
 
   
  +
この実装を使用するために必要なことは:
もしくは、キーリングにパスフレーズを永続的に保存したい場合、{{pkg|seahorse}} パッケージの seahorse-ssh-askpass を使います:
 
  +
# {{ic|gcr-ssh-agent.socket}} systemd ユーザユニットを有効化する。例えば、{{ic|systemctl --user enable gcr-ssh-agent.socket}} を実行する。
  +
# {{ic|SSH_AUTH_SOCK}} 環境変数を {{ic|$XDG_RUNTIME_DIR/gcr/ssh}} に設定して SSH コマンドを実行する。環境変数を設定する方法は[[環境変数#変数の定義|たくさんあります]]。使用するべき方法は、あなたのセットアップと好みに依ります。
   
  +
=== gnome-keyring-daemon "ssh" コンポーネント ===
/usr/lib/seahorse/seahorse-ssh-askpass my_key
 
   
  +
古い gnome-keyring-daemon 実装を使うことに決めたならば、{{ic|gnome-keyring-daemon}} が {{ic|--components}} 引数に '''ssh''' を含めて実行されている必要があります。[[XDG Autostart]] を使用するデスクトップ環境の場合、{{ic|/etc/xdg/autostart/gnome-keyring-ssh.desktop}} を介して自動的に実行されます。他のデスクトップ環境の場合、{{ic|gnome-keyring-daemon.service}} ユーザユニットの {{ic|ExecStart}} を編集する必要があります (デフォルトで SSH コンポーネントを起動しないからです)。方法は [[Systemd#ユニットファイルの編集]] を参照してください。
SSH 鍵を追加するには:
 
   
  +
コンポーネントが実行されることを確認したら、上記の方法と同じように {{ic|SSH_AUTH_SOCK}} 環境変数を {{ic|$XDG_RUNTIME_DIR/keyring/ssh}} に設定してください。注意点として、gcr-ssh-agent と gnome-keyring-daemon は、ほとんど同じ実装を含んでいるにも関わらず、異なるソケットパスをリッスンします。
$ ssh-add ~/.ssh/id_dsa
 
Enter passphrase for /home/mith/.ssh/id_dsa:
 
   
  +
=== 使用する ===
{{Note|秘密鍵と同じディレクトリ (上記の例では {{ic|~/.ssh/id_dsa.pub}}) に対応する {{ic|.pub}} ファイルが必要です。また、公開鍵のファイル名が秘密鍵に {{ic|.pub}} を付けた名前になっていることを確認してください (例: {{ic|my_key.pub}})。}}
 
   
  +
あなたが選んだ実装に依らず、以下を実行することで、実行中のエージェントにロードされている SSH 鍵をリストアップできます:
To disable all manually added keys:
 
   
$ ssh-add -D
+
$ ssh-add -L
   
  +
これにより、適切なサービスが起動されていて、{{ic|SSH_AUTH_SOCK}} が適切に設定されていることを確認することができます。
=== キーリング ssh コンポーネントを有効にする ===
 
   
  +
パスフレーズをキーリングに永続的に保存するには、{{pkg|seahorse}} パッケージの ssh-askpass を使用してください:
キーリングに同梱されているデフォルトの systemd ユーザー サービスには、'''ssh''' コンポーネントが含まれていません。ユニットファイル の {{ic|ExecStart}} 行で {{ic|gnome-keyring-daemon}} コマンドの {{ic|--components}} オプションに '''ssh''' を追加する必要があります。
 
  +
  +
$ /usr/lib/seahorse/ssh-askpass my_key
  +
  +
他のディレクトリから SSH 鍵を手動で追加するには:
  +
  +
$ ssh-add ~/.private/id_rsa
  +
Enter passphrase for ~/.private/id_rsa:
  +
  +
{{Note|秘密鍵と同じディレクトリ (上記の例では {{ic|~/.ssh/id_rsa.pub}}) に対応する ''.pub'' ファイルが必要です。また、公開鍵のファイル名が秘密鍵に ''.pub'' を付けた名前になっていることを確認してください (例: {{ic|my_key.pub}})。}}
  +
  +
手動で追加した鍵をすべて無効化するには:
  +
  +
$ ssh-add -D
   
  +
=== 無効化する ===
キーリングの systemd ユニットファイルを編集する方法については [[Systemd#ユニットファイルの編集]] を参照してください。
 
   
  +
別の SSH エージェントを実行したい場合 (例: [[SSH 鍵#ssh-agent|ssh-agent]] や [[gpg-agent]])、GNOME Keyring の ssh-agent ラッパを無効化するのは良い考えです。各エージェントは異なるソケットをリッスンし、{{ic|SSH_AUTH_SOCK}} を使ってエージェントを選ぶことができるので、厳密には必須ではありませんが、デバッグの問題を簡単にできます。
また、{{ic|gcr-ssh-agent.service}} [[ユーザーユニット]]を[[有効]]にする必要があります。
 
   
  +
gcr-ssh-agent の実装を無効化するには、{{ic|gcr-ssh-agent.socket}} と {{ic|gcr-ssh-agent.service}} を両方とも systemd で無効化・停止してください。
=== キーリングデーモンの無効化 ===
 
   
  +
アカウントローカルな方法で gnome-keyring-daemon 実装を無効化するには、{{ic|/etc/xdg/autostart/gnome-keyring-ssh.desktop}} を {{ic|~/.config/autostart/}} にコピーし、コピー先のファイルに {{ic|1=Hidden=true}} という行を末尾に追加してください。また、上記の手順で {{ic|gnome-keyring-daemon.service}} に対して行った編集もすべて元に戻してください。
別の SSH エージェントを使いたい場合 (例: [[SSH 鍵#ssh-agent|ssh-agent]])、GNOME Keyring デーモンの SSH コンポーネントを無効化する必要があります:
 
# ln -sf /dev/null /etc/xdg/autostart/gnome-keyring-ssh.desktop
 
ログアウトすることで変更が適用されます。
 
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==

2023年4月18日 (火) 11:33時点における版

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

インストール

GNOME を使用している場合、gnome-keyringgnome グループの一つとして自動的にインストールされます。GNOME を使っていない場合は、公式リポジトリから gnome-keyring をインストールしてください。libsecret もインストールして、他のアプリケーションにキーリングへのアクセスを許可する必要があります。libgnome-keyring は非推奨になりました(そして、libsecret にとって代わられました)が、それでも特定のアプリケーションで必要になる場合があります。

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

GNOME キーリングに関連する追加のユーティリティは次の通りです:

  • 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 パッケージをインストールしてください。

GNOME Keyring のパスワードを空にしたり変更することが可能です。Seahorse を開いて、ドロップダウンメニューの "View" から "By Keyring" を選択してください。Passwords タブを開いて、"Passwords: login" を右クリックして "Change password" を選択してください。旧パスワードを入力してから新しいパスワードを入力します。暗号化されていないストレージを使用しているという警告が表示されるので "Use Unsafe Storage" を押して下さい。

キーリングを使用する

PAM モジュール pam_gnome_keyring.so は、GNOME キーリングを部分的に初期化し、そのプロセスでデフォルトの login キーリングのロックを解除します。その後、初期化を完了して、環境変数を設定する --start オプションを指定して gnome-keyring-daemon を呼び出す必要があります。

PAM ステップ

ノート: 自動ログインせずに、自動でロックを解除したい場合、ユーザーアカウントとキーリングに同一のパスワードを設定する必要があります。#Automatically change keyring password with user password を参照してください。
ヒント:
  • 自動ログインで自動ロック解除を使用するには、デフォルトのキーホルダーに空白のパスワードを設定します。この場合、キーリングの内容は暗号化されずに保存されることに注意してください。
  • あるいは、GDM と LUKS を使っている場合、GDM は LUKS のパスワードと一致すればキーリングをロック解除することができます。これを動かすには、適切なカーネルパラメータと同様に、mkinitcpio.conf で systemd init を使う必要があります。詳しくは [1] を参照してください。
  • PAM ステップは省略しても動きます。これは、デーモンがまだ実行されていないときに次のステップでデーモンが初期化されるためです。ただし、この場合、デフォルトのキーリングはロック解除されません。詳細については、次のURLをご覧ください [2]

ディスプレイマネージャを使用する場合、ほとんどのケースでキーリングはそのまま機能します。GDMLightDMLXDMSDDM はすでに必要な PAM の設定があります。キーリングのロックを自動的に解除しないディスプレイマネージャの場合は、以下のような /etc/pam.d/login の代わりに適切なファイルを編集してください。

/etc/pam.d/login から gnome-keyring-daemon を起動:

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

GNOME、Unity、Cinnamon、MATE を使用している場合は、これで完了です。初期化が完了し、環境変数が自動的に設定されます。

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つの実装の中で最もプラグ・アンド・プレイです。また、最終的にはこの実装が唯一の実装になるので、特別な理由がない限りはこれを使用すべきです。

この実装を使用するために必要なことは:

  1. gcr-ssh-agent.socket systemd ユーザユニットを有効化する。例えば、systemctl --user enable gcr-ssh-agent.socket を実行する。
  2. 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/id_rsa.pub) に対応する .pub ファイルが必要です。また、公開鍵のファイル名が秘密鍵に .pub を付けた名前になっていることを確認してください (例: my_key.pub)。

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

$ ssh-add -D

無効化する

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

gcr-ssh-agent の実装を無効化するには、gcr-ssh-agent.socketgcr-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 キーリングは、HTTPS でプッシュするときに Git と一緒に使うと便利です。この機能を利用するには、libsecret パッケージを インストールする必要があります。

libsecret ヘルパーを使うように Git を設定:

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

これで 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 に表示される名前) は gnome-keyring-for-seahorse-the-passwords-and-keyrings-application/ 暗号化されていないキーリングファイルの display-name の値を変更する キーリングは通常、.keyring ファイル拡張子を付けて ~/.local/share/keyrings/ に保存されます。

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

ノート: これはデフォルトのキーリングにのみ影響します。

password optional pam_gnome_keyring.so/etc/pam.d/passwd の末尾に追加します。

/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 を起動する

この記事またはセクションの正確性には問題があります。
理由: At least xinit and SDDM execute all scripts from /etc/X11/xinit/xinitrc.d/ and sway provides /etc/sway/config.d/50-systemd-user.conf so the problem is not being "outside desktop environments". If gnome-keyring requires XDG Autostart, the installation/configuration section should say so. (議論: トーク:GNOME/Keyring#Launching gnome-keyring-daemon outside desktop environments (KDE,_GNOME,_XFCE,_...))

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

ログイン時に 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-daemon --login が終了するまで待つ必要が有ります。

トラブルシューティング

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

ログイン時に毎回パスワードプロンプトが表示され、パスワードが保存されない場合は、デフォルトのキーリングを作成・設定する必要があります。

Seahorse を使用してこれを行うには、GNOME ヘルプの 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.keyringuser.keystore ファイルを削除することもできます。この操作を行うと、保存されているすべての鍵が永久に削除されますのでご注意ください。ファイルを削除した後、ログアウトして再度ログインしてください。

デーモンコントロールファイルが見つからない

ログイン後の journal に以下のようなエラーが表示されることがあります。

gkr-pam: unable to locate daemon control file

このメッセージは、他に関連する問題がなければ、「無視しても大丈夫」です[3]

No such secret collection at path: /

カスタム ~/.xinitrc を使用していて、Seahorse で新しいキーリングを作成しようとしたときにこのエラーが発生した場合は、次の行を追加することで解決できる可能性があります

~/.xinitrc
source /etc/X11/xinit/xinitrc.d/50-systemd-user.sh

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

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

参照