Linux Keyring
Linux Keyringからシークレットを保存および取得

概要
Keyring (キーリング) はLinuxのセキュリティ機能で、パスワードやシークレットなどの機密情報を保存し、アプリケーションから安全にアクセスできるようにします。
Keeperからは、Linuxキーリングユーティリティというユーティリティがご利用になれます。このユーティリティは、ネイティブLinux APIと対話し、Secret Service APIを使用してキーリングからシークレットを保存および取得します。このユーティリティは、あらゆる統合、プラグイン、コードベースで使用でき、あらゆるLinuxキーリングに認証情報、シークレット、パスワードを簡単に保存および取得できます。
Linuxキーリングユーティリティのコードベースは、以下から入手できます。
上記のユーティリティを使用するために必要なバイナリは、以下から入手できます。
Linuxキーリングユーティリティを使用するには、以下の方法があります。
リリースページからビルド済みのバイナリをデプロイする。
コードベースにインポートする。
Linuxキーリングユーティリティ
Linuxキーリングユーティリティは、D-Busシークレットサービスを使用して、Linuxキーリング内のシークレットを取得および設定します。
Linuxキーリングユーティリティは、GNOME KeyringおよびKDE Wallet Managerでテスト済みで、D -Bus Secrets Serviceのどの実装でも動作するはずです。
インタフェース
dbus_secrets
とsecret_collection
の2 つのパッケージがあります。secret_collection
オブジェクトはdbus_secrets
の関数を使用します。このオブジェクトは、D-Busの接続、セッション、コレクションサービスオブジェクトを統合し、CLIが利用するシンプルな「取得 (get) / 設定 (set) / 削除 (delete)」インターフェースがご利用になれます。
使用方法 - コードベースへのインポート
Go言語APIにはGet()
、Set()
、Delete()
の各メソッドが用意されています。最初の2つのメソッドはstring
データを受け取り、返します。
例 (get)
package main
import (
"os"
sc "github.com/Keeper-Security/linux-keyring-utility/pkg/secret_collection"
)
func doit() {
if collection, err := sc.DefaultCollection(); err == nil {
if err := collection.Unlock(); err == nil {
if secret, err := collection.Get("myapp", "mysecret"); err == nil {
print(string(secret))
os.Exit(0)
}
}
}
os.Exit(1)
}
.DefaultCollection()
は、デフォルトのエイリアスが参照するコレクションを返します。デフォルトのエイリアスが設定されていない場合はエラーが発生します。通常はログインキーリングを指します。ほとんどのLinuxキーリングインターフェイスでは、ユーザーが設定できます。
.NamedCollection(string)
メソッドでは、名前によってコレクションへのアクセスします。
例 (Set)
Setはデータをパラメータとして受け取り、エラーまたは成功した場合nil
のみを返します。シークレットデータの内容や長さに制限はありません。
if err := collection.Set("myapp", "mysecret", "mysecretdata"); err == nil {
// success
}
使用方法 - バイナリインターフェイス (CLI)
Linuxバイナリでは以下の3つのサブコマンドがサポートされています。
get
set
del
get
とdel
は1つのパラメータ (name) を必要とします。これパラメータは、 D-Bus API用語ではシークレットラベルを指します。
del
は1つ以上のシークレットラベルを受け取り、それらをすべて削除します。エラーが発生した場合はその時点で処理を停止します。
set
では第2パラメータとしてデータを単一の文字列で指定する必要があります。たとえば、set foo bar baz
はエラーを引き起こしますが、set foo 'bar baz'
は正常に動作します。文字列として-
を指定した場合、標準入力から文字列を読み込みます。
Base64エンコード
get
とset
には、-b
または --base64
フラグがあり、Base64エンコーディングを自動的に処理します。このフラグを使用すると、set
は入力を保存する前にエンコードし、get
は出力する前にデコードします。
注意点として、Base64エンコードされていないシークレットに対して get -b
を使用するとエラーが発生します。
例
# set has no output
lkru set root_cred '{
"username": "root"
"password": "rand0m."
}'
# get prints (to stdout) whatever was set
lku get root_cred
{
"username": "root"
"password": "rand0m."
}
lkru set -b root_cred2 '{"username": "gollum", "password": "MyPrecious"}'
lkru get root_cred2
eyJ1c2VybmFtZSI6ICJnb2xsdW0iLCAicGFzc3dvcmQiOiAiTXlQcmVjaW91cyJ9
lkru get -b root_cred2
{"username": "gollum", "password": "MyPrecious"}
cat ./good_cred.json | lkru set -b root_cred3 -
lkru get root_cred3
ewogICJ1c2VybmFtZSI6ICJhZGFtIiwKICAicGFzc3dvcmQiOiAicGFzc3dvcmQxMjMuIgp9
エラー
エラー出力はstderr
に送られるので、コマンドの末尾に2>/dev/null
を追加するとエラーが抑制されます。
キーリングがない
ログインコレクションが存在しない理由は、キーリング自体が存在しないためです。KDEでは、GNOMEのようにloginではなくkdewalletが作成される場合があります。
Unable to get secret 'test_cred': Unable to retrieve secret 'test_cred' for application 'lkru' from collection '/org/freedesktop/secrets/collection/login': Object does not exist at path “/org/freedesktop/secrets/collection/login”
一致するシークレットがない
同じラベルのシークレットが存在する場合でも、シークレットが返されない場合があります。シークレットがlkru
で作成されていない場合は、「Agent」、「Application」、「ID」のような属性が一致していない可能性があります。
Unable to get secret 'test_cred': Unable to retrieve secret 'test_cred' for application 'lkru' from collection '/org/freedesktop/secrets/aliases/default': org.freedesktop.Secret.Collection.SearchItems returned nothing
D-Busセッションが存在しない
シークレットサービスをホストする D-Busセッションが存在しない可能性があります。ユーザーがGUIにログインしていない場合に発生します。
Unable to get the default keyring: Unable to open a D-Bus session: The name org.freedesktop.secrets was not provided by any .service files
D-Busが存在しない
システムがD-Busをホストしていない可能性があります。一部の軽量Linuxディストリビューションは、デフォルトでD-Busなしで出荷されます。
Unable to get the default keyring: Unable to connect to the D-Bus Session Bus: exec: "dbus-launch": executable file not found in $PATH
最終更新