secretservice

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 17, 2026 License: GPL-3.0 Imports: 13 Imported by: 0

Documentation

Overview

Package secretservice хранит секреты в связке ключей Linux — по протоколу Secret Service на шине D-Bus сеанса. Его реализуют gnome-keyring, KeePassXC, KWallet; значения там лежат зашифрованными ключом, который открывается входом в систему, как DPAPI на Windows.

Связка — только та, что уже работает в сеансе: сервис не запускается через D-Bus activation. В сеансе без графики (SSH, сервер) запущенный так gnome-keyring просил бы пароль в окне, которого нет, и qwdtt-cli там пишет секреты в файл (config, схема file).

Под sudo шина пользователя root'а не пускает (dbus-daemon сверяет uid), поэтому с ней говорит тот же qwdtt-cli, запущенный от имени вызвавшего (helper.go).

Index

Constants

View Source
const HelperCommand = "__secret-service"

HelperCommand — скрытая команда qwdtt-cli: одна операция со связкой ключей от имени того, кто вызвал sudo. Запрос — JSON в stdin, ответ — JSON в stdout: значения секретов не попадают в аргументы, которые видит ps. Вызывать её руками незачем, но и вреда нет: процесс получит только связку своего же пользователя.

Variables

View Source
var (
	// ErrUnavailable — связки ключей в этом сеансе нет: шины сеанса нет,
	// сервис не запущен или у него нет коллекции по умолчанию. Тогда секреты
	// идут в файл.
	ErrUnavailable = errors.New("связки ключей (Secret Service) в этом сеансе нет")
	// ErrNotFound — записи с таким идентификатором в связке нет.
	ErrNotFound = errors.New("записи нет в связке ключей")
	// ErrLocked — связка осталась заблокированной: окно разблокировки закрыли
	// или оно не дождалось ответа. Записи целы — их прочитает следующий
	// запуск, когда связку разблокируют.
	ErrLocked = errors.New("связка ключей не разблокирована")
)

Functions

func RunHelper

func RunHelper(stdin io.Reader, stdout, stderr io.Writer) int

RunHelper выполняет HelperCommand: читает запрос, делает операцию со связкой своего сеанса и пишет ответ. Код возврата ненулевой, только если ответа нет вовсе; ошибка самой операции едет в ответе.

Types

type Keyring

type Keyring interface {
	// Put записывает значение, заменяя прежнее с тем же идентификатором.
	Put(id, label, value string) error
	// Get возвращает значение; записи нет — ErrNotFound.
	Get(id string) (string, error)
	// Delete удаляет запись; записи нет — ErrNotFound.
	Delete(id string) error
	Close() error
}

Keyring — связка ключей: значения по идентификатору записи.

func Open

func Open(notify io.Writer) (Keyring, error)

Open подключается к связке ключей. Под sudo — через HelperCommand от имени вызвавшего, иначе — напрямую. notify — куда сказать про окно разблокировки.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL