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 ¶
const HelperCommand = "__secret-service"
HelperCommand — скрытая команда qwdtt-cli: одна операция со связкой ключей от имени того, кто вызвал sudo. Запрос — JSON в stdin, ответ — JSON в stdout: значения секретов не попадают в аргументы, которые видит ps. Вызывать её руками незачем, но и вреда нет: процесс получит только связку своего же пользователя.
Variables ¶
var ( // сервис не запущен или у него нет коллекции по умолчанию. Тогда секреты // идут в файл. ErrUnavailable = errors.New("связки ключей (Secret Service) в этом сеансе нет") // ErrNotFound — записи с таким идентификатором в связке нет. ErrNotFound = errors.New("записи нет в связке ключей") // ErrLocked — связка осталась заблокированной: окно разблокировки закрыли // или оно не дождалось ответа. Записи целы — их прочитает следующий // запуск, когда связку разблокируют. ErrLocked = errors.New("связка ключей не разблокирована") )
Functions ¶
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 — связка ключей: значения по идентификатору записи.