Linux Keyring

Linux Keyringにシークレットを保存して取得

![](../../.gitbook/assets/keeper and Linux Keyring.jpg)

概要

Keyringは、パスワードやシークレットなどの機密情報を保存し、アプリケーションから安全にアクセスできるようにするLinuxのセキュリティ機能です。

KeeperのLinux Keyring Utilityは、ネイティブLinux APIと連携し、Secret Service APIを使用してKeyringからシークレットを保存および取得します。任意の連携、プラグイン、コードベースから利用でき、Linux Keyringに認証情報、シークレット、パスワードをシンプルかつネイティブに保存および取得できます。

Linux Keyring Utilityのソースコードは以下で公開されています。

利用に必要なバイナリは以下で入手できます。

Linux Keyring Utilityの利用方法は以下の2通りです。

  • リリースページからビルド済みバイナリをデプロイする

  • コードベースにインポートする

以下では、両方の方法を取り扱います。

Linux Keyring Utility

Linux Keyring Utilityは、D-Bus Secret Serviceを使用して、Linux Keyring内のシークレットを取得および設定できます。

GNOME KeyringおよびKDE Wallet Managerでテスト済みです。D-Bus Secret Serviceを実装する環境であれば動作する想定です。

インターフェース

dbus_secretssecret_collection の2つのパッケージがあります。secret_collection オブジェクトは dbus_secrets の関数を使用します。D-BusのConnection、Session、Collection Serviceオブジェクトを統合し、CLI向けのシンプルなget/set/deleteインターフェースを構成します。

使用方法 - コードベースへのインポート

Go言語APIには Get()Set()Delete() メソッドがあります。最初の2つは string データを受け取り、返します。

例 (get)

.DefaultCollection() は、defaultエイリアスが参照するコレクションを返します。defaultエイリアスが設定されていない場合はエラーになります。通常はlogin Keyringを指します。多くのLinux Keyring UIでは、ユーザーが設定できます。

.NamedCollection(string) メソッドでは、名前でコレクションにアクセスできます。

例 (set)

Set はデータをパラメータとして受け取り、成功時は nil、失敗時はエラーのみを返します。シークレットデータの内容や長さに制限はありません。

使用方法 - バイナリインターフェース (CLI)

Linuxバイナリでは、以下の3つのサブコマンドが利用できます。

  1. get

  2. set

  3. del

getdel には1つのパラメータ name が必要です。これはD-Bus API用語ではシークレットのLabelです。

del は1つ以上のシークレットラベルを受け取り、それらをすべて削除します。エラーが発生した時点で処理を停止します。

set では、第2パラメータとしてデータを単一の文字列で指定する必要があります。たとえば、set foo bar baz はエラーになりますが、set foo 'bar baz' は動作します。文字列として - を指定した場合、標準入力から読み込みます。

Base64エンコード

getset には -b または --base64 フラグがあり、Base64を自動的に処理します。このフラグを使用すると、set は保存前に入力をエンコードし、get は出力前にデコードします。

Base64エンコードされていないシークレットに対して get -b を実行すると、エラーになります。

エラー

エラー出力は stderr に送られるため、コマンド末尾に 2>/dev/null を付けると抑制できます。

キーリングがない

loginコレクションが存在しないのは、Keyring自体が存在しないためです。KDEでは、GNOMEと同様にloginではなくkdewalletが作成される場合があります。

一致するシークレットがない

同じラベルのシークレットが存在しても、値が返されない場合があります。lkru で作成していないシークレットでは、属性 (Agent、Application、Id) が一致しない可能性があります。

D-Busセッションがない

Secret ServiceをホストするD-Busセッションが存在しない場合があります。GUIにログインしていないときに発生します。

D-Busがない

システムがD-Busをホストしていない場合があります。一部の軽量Linuxディストリビューションは、デフォルトでD-Busを含みません。

最終更新