Гид по технологиям

Password Store в Emacs: полное руководство по хранению паролей с GPG и Git

9 min read Emacs Обновлено 27 Nov 2025
Password Store в Emacs — полный гайд
Password Store в Emacs — полный гайд

Важно: перед началом убедитесь, что у вас есть рабочая установка GPG и вы понимаете основы управления ключами GPG.

Оглавление

  • Как работает Password Store
  • Установка Password Store
  • Создание хранилища паролей
  • Создание и настройка GPG-ключа
  • Инициализация хранилища (локальное и с Git)
  • Интеграция Emacs с Password Store
  • Основные операции в Emacs: добавление, редактирование, удаление, копирование
  • Генерация паролей и поддержка OTP
  • Альтернативы и когда pass не подходит
  • Практики безопасности и жёсткая конфигурация
  • Миграция, чеклисты и методология
  • Часто задаваемые вопросы
  • Глоссарий и краткое резюме

Как работает Password Store

Определение: Password Store (pass) — утилита для UNIX-подобных систем, которая хранит каждый пароль в отдельном текстовом файле и шифрует эти файлы с помощью GPG.

Password Store делает ставку на простоту. Каждый пароль хранится в виде обычного текстового файла. Первая строка файла — сам пароль. Всё остальное — произвольные метаданные: логины, подсказки, OTP-ссылки и т. д. Затем содержимое файла шифруется GPG и помещается в директорию .password-store.

Преимущества модели:

  • Прозрачная структура: один файл — один аккаунт. Лёгкая интеграция с Git.
  • Минимум зависимостей. Удобно для скриптов и автоматизации.
  • Можно хранить дополнительные заметки прямо в файле.

Ограничения:

  • Если GPG-ключи не защищены, файлы несанкционированно дешифруются.
  • Файловая модель менее удобна для пользователей, привыкших к GUI-менеджерам.

Обложка: Emacs и символы пароля

Схема работы pass: GPG ↔ файлы ↔ Git

Дерево паролей в .password-store

Пример файла пароля (последовательность строк важна — pass использует только первую строку как пароль):

thisismysupersecretpassword
===============INFORMATION==============
Username: MySuperCoolName
Security Question 1: Yogi
Security Question 2: 1992 Toyota Corolla
Security Question 3: Smith

OTP Key: aabbccddff11223344
========================================

Pass игнорирует всё после первой строки при чтении пароля, но хранит и шифрует полный файл, поэтому вы свободны добавлять метаданные.

Установка Password Store

Pass очень прост в установке и доступен в популярных репозиториях.

Debian / Ubuntu:

sudo apt install pass gnupg

Fedora:

sudo dnf install pass gnupg2

Arch Linux:

sudo pacman -S pass gnupg

Примечание: в некоторых дистрибутивах GnuPG поставляется как gnupg, в других — как gnupg2.

Создание хранилища паролей — общий план

Чтобы начать, нужно выполнить две вещи:

  1. Иметь или создать GPG-ключ. Он будет использоваться для шифрования файлов.
  2. Инициализировать сам Password Store (локально или с Git).

Ниже — пошагово, как создать GPG-ключ и настроить pass.

Создание GPG-ключа

GPG отвечает за шифрование и дешифрование содержимого. Создать ключ можно встроенным мастером.

Команда для запуска мастера генерации:

gpg --full-generate-key

Дальше мастер задаст вопросы: тип ключа, длина, срок действия, имя и email. По умолчанию RSA подходит для большинства задач.

Мастер генерации GPG-ключа

Длина ключа и срок действия

При выборе длины ключа правило простое: длиннее = сложнее подобрать. Хорошая практика — 2048 или 4096 бит. В примерах автор использует 4096.

Выбор длины ключа

Срок действия ключа стоит задать. Короткий срок позволяет легче ротировать и отзывать ключи при компрометации. В примере указан срок 6 месяцев (6m).

Выбор срока действия ключа

В конце мастер попросит имя и email — эти данные используются при указании владельца ключа в GPG.

Ввод личных данных для GPG

Наконец, укажите надёжную парольную фразу для ключа. Это основной уровень защиты, поэтому пароля должно хватать как по сложности, так и по запоминаемости.

Инициализация хранилища паролей

Есть два распространённых варианта:

  • Локальное хранилище, зашифрованное только с помощью GPG.
  • Хранилище под управлением Git (рекомендуется, если хотите журнал изменений и синхронизацию).

Локальная инициализация

Пример команды (заметьте синтаксис в исходном руководстве; для удобства часто используют spaции вокруг cd):

cd /home/$USER/ && pass init "your-gpg-email"

Эта команда создаст директорию ~/.password-store с зашифрованными файлами.

Инициализация pass в домашней директории

Инициализация с Git

Чтобы управлять историей и синхронизировать хранилище, можно включить Git:

pass git init

Инициализация Git-репозитория для pass

После этого все обычные git-команды доступны через префикс pass, например:

pass git remote get-url --all

Такой подход удобен для резервного копирования и синхронизации (через удалённые репозитории), но требует внимательного отношения к безопасной настройке удалённых репозиториев.

Интеграция Emacs с Password Store

Если вы используете Emacs, пакет password-store добавляет интерфейс к утилите pass прямо в редакторе.

Пакет доступен в MELPA. По умолчанию MELPA может быть не подключён, поэтому добавьте репозиторий в init.el:

(add-to-list 'package-archives
    '("melpa" . "https://melpa.org/packages/"))
(package-initialize)

После этого перезапустите Emacs, и установите пакет:

  1. Alt+X → package-install → password-store
  2. Проверить версию: Alt+X → password-store-version

Установка пакета password-store в Emacs

Установка пакета через пакетный менеджер Emacs

Быстрые сочетания и команды

  • Alt+X password-store-insert — добавить запись
  • Alt+X password-store-edit — редактировать запись
  • Alt+X password-store-remove — удалить запись
  • Alt+X password-store-copy — скопировать пароль в буфер обмена
  • Alt+X password-store-generate — сгенерировать новый пароль

Вы также можете вызывать эти функции программно в вашей конфигурации Emacs.

Добавление нового пароля из Emacs

  1. Alt+X → password-store-insert.
  2. Введите имя записи (например, site/example).
  3. Введите пароль (ввод будет скрыт).

Диалог добавления пароля

Ввод пароля (скрытый)

После сохранения запись зашифруется и появится в ~/.password-store как file.gpg.

Редактирование записи

  1. Alt+X → password-store-edit.
  2. Выберите запись для редактирования.
  3. Введите пароль GPG при запросе для дешифровки.
  4. Отредактируйте содержимое в буфере Emacs и сохраните (Ctrl+X Ctrl+S).
  5. Закройте буфер (Ctrl+X K), чтобы pass зафиксировал изменения.

Редактирование записи в отдельном буфере

Дополнительная информация внутри файла пароля

Удаление записи

  1. Alt+X → password-store-remove.
  2. Выберите запись и подтвердите удаление.

Подтверждение удаления записи

После удаления pass обновляет дерево файлов и, при включённом Git, фиксирует изменения.

Сообщение об удалении

Копирование пароля в буфер обмена

  1. Alt+X → password-store-copy.
  2. Выберите запись. Пароль будет скопирован в буфер обмена.

Копирование пароля из Emacs

Обратите внимание на настройки времени очистки буфера обмена в вашей системе. Рекомендуется ограничивать время, в течение которого пароль остаётся в буфере обмена.

Генерация паролей и OTP

Password Store может генерировать пароли автоматически:

  • Alt+X → password-store-generate — открыть диалог генерации.

Для поддержки одноразовых паролей (OTP) существует расширение pass-otp.

Debian / Ubuntu:

sudo apt install pass-extension-otp

Fedora:

sudo dnf install pass-otp

Arch Linux:

sudo pacman -S pass-otp

После установки можно вставлять OTP-ссылки в запись:

pass otp insert "account-name"

И генерировать коды:

pass otp "account-name"

OTP поддерживает форматы типа otpauth:// и совместим с большинством приложений, которые используют TOTP.

Альтернативы и когда pass не подходит

Когда pass — хороший выбор:

  • Вы предпочитаете инструмент командной строки.
  • Нужна прозрачная файловая структура и интеграция с Git.
  • Предпочитаете минимализм и лёгкий деплой.

Когда pass не подходит:

  • Нужен графический интерфейс с автозаполнением в браузере.
  • Требуется централизованное управление корпоративными секретами с ролевыми правами доступа.
  • Не готовы управлять GPG-ключами и их ротацией.

Популярные альтернативы:

  • KeePassXC — локальный GUI, поддержка автозаполнения, сильная кросс-платформенность.
  • Bitwarden — облачный менеджер с десктопом и расширениями для браузера.
  • GNOME Keyring / KDE Wallet — системные секреты для окружения рабочего стола.

Выбор зависит от угрозной модели и производственного процесса.

Практики безопасности и жёсткая конфигурация

Рекомендации по повышению безопасности:

  1. Используйте GPG с длиной ключа ≥ 2048 (рекомендуется 4096).
  2. Установите срок действия ключа и периодически его обновляйте.
  3. Храните приватный ключ на устройстве с аппаратной защитой (например, YubiKey) при возможности.
  4. Ограничьте доступ к каталогу ~/.password-store правами файловой системы.
  5. Если используете Git-репозиторий, не публикуйте приватный репозиторий в открытом доступе.
  6. Настройте автоматическое очищение буфера обмена (например, xclip/xsel с таймером).
  7. Делайте регулярные резервные копии приватных ключей и шифруйте их.
  8. Используйте двухфакторную аутентификацию в сервисах, даже если у вас сильные пароли.

Пример усиления прав доступа на Unix:

chmod -R go-rwx ~/.password-store

Если синхронизируете через удалённый Git, рассмотрите шифрование дополнительного уровня или использование приватного репозитория с ограниченным доступом.

Миграция и методология: пошаговый план

Мини-методология миграции в pass для существующих пользователей других менеджеров:

  1. Оцените объём записей и форматы (CSV/JSON/KeepassXC/XML).
  2. Экспортируйте данные из старого менеджера в текстовый формат.
  3. Приведите данные к шаблону для pass (первая строка — пароль, далее — метаданные).
  4. Импортируйте построчно с помощью скриптов или вручную через pass insert.
  5. Проверьте корректность дешифровки и целостность данных.
  6. Закройте и удалите временные файлы и экспортные копии.
  7. Включите Git и сделайте первый коммит в приватном репозитории.
  8. Настройте бэкапы для приватных ключей и хранилища.

Пример простого скрипта для импорта из CSV (примерная схема):

# csv: name,username,password,notes
while IFS=, read -r name user pass notes; do
  printf "%s\nUsername: %s\n%s\n" "$pass" "$user" "$notes" | pass insert -m "$name"
done < export.csv

Всегда проверяйте результат на тестовой записи перед массовым импортом.

Роли и чеклисты (быстрая проверка перед использованием)

Роль — Обычный пользователь:

  • Создал GPG-ключ.
  • Инициализировал pass.
  • Установил password-store в Emacs.
  • Создал 3 тестовых записи.
  • Настроил очистку буфера обмена.

Роль — Системный администратор / DevOps:

  • Использует аппаратный токен для ключей.
  • Настроил приватный Git-репозиторий для резервного копирования.
  • Автоматизировал бэкап шифрованных файлов.
  • Настроил мониторинг и журнал доступа.

Роль — Разработчик:

  • Интегрировал pass в CI/CD через зашифрованные секреты.
  • Ограничил доступ ключей на CI-агентах.
  • Документировал процесс ротации ключей.

Решающее дерево для выбора подхода

Mermaid-диаграмма — быстрое решение, когда выбрать pass или альтернативы:

flowchart TD
  A[Нужен менеджер паролей?] --> B{Требуется GUI автозаполнение}
  B -- Да --> C[KeePassXC или Bitwarden]
  B -- Нет --> D{Предпочитаете CLI и текстовую структуру}
  D -- Да --> E[pass + GPG]
  D -- Нет --> C
  E --> F{Нужна синхронизация}
  F -- Да --> G[pass + Git 'приватный репозиторий']
  F -- Нет --> H[Локальное хранилище]

Часто задаваемые вопросы

1. Может ли pass генерировать пароли как KeePassXC?

Да. pass умеет генерировать случайные пароли. В Emacs: Alt+X → password-store-generate. Сгенерированный пароль можно сразу копировать в буфер обмена через password-store-copy.

2. Поддерживает ли pass OTP?

Да. Для этого установите расширение pass-otp и используйте команды pass otp insert “account-name” и pass otp “account-name”.

3. Можно ли отображать пароли в виде дерева в Emacs?

Прямой визуализации дерева, аналогичной GUI, пакет password-store не предоставляет. Но вы получите автодополнение и навигацию через minibuffer, если используете helm или ivy/counsel, которые поддерживают удобный выбор записей.

Глоссарий — одно предложение на термин

  • GPG: система асимметричного шифрования и подписи на основе OpenPGP.
  • pass: утилита Password Store, файловый менеджер паролей поверх GPG.
  • OTP: одноразовый пароль (TOTP/HOTP), используемый для двухфакторной аутентификации.
  • MELPA: репозиторий пакетов для Emacs.

Критерии приёмки

  • Пароль можно добавить, отредактировать, удалить и скопировать из Emacs.
  • Все файлы в ~/.password-store зашифрованы и читаются только при наличии приватного GPG-ключа.
  • В Git отражены коммиты при изменении записей (если включён pass git).
  • Буфер обмена очищается через предустановленное время.

Примеры отказа и крайние случаи

  • Если приватный ключ утерян и нет резервной копии, доступ к зашифрованным файлам будет невозможен.
  • Если приватный ключ выведен на устройство с вредоносным ПО, атака может скомпрометировать все пароли.
  • Некорректный импорт из CSV может записать пароли в незашифрованный файл, если забыли вызвать pass insert.

В таких случаях рекомендуется восстановить приватный ключ из резервной копии или восстановить пароли вручную.

Небольшая чек-листовая таблица для внедрения

  • Создать GPG-ключ и сохранить резервную копию приватного ключа в защищённом месте.
  • Инициализировать pass.
  • Установить password-store в Emacs.
  • Настроить автоматическое очищение буфера обмена.
  • Если нужно — включить Git и настроить приватный репозиторий.

Заключение

Password Store — отличный инструмент для тех, кто ценит простоту, контроль и интеграцию с системой. В сочетании с Emacs вы получаете мощный рабочий процесс: генерация, хранение и быстрый доступ к паролям из привычной среды. При этом важно серьёзно относиться к защите приватных GPG-ключей и к настройке резервного копирования.

И напоследок — маленькая рекомендация: начните с нескольких тестовых записей и проверьте весь цикл: добавление, редактирование, копирование, удаление и восстановление из бэкапа.

Image credit: Unsplash

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство