Password Store в Emacs: полное руководство по хранению паролей с GPG и Git
Важно: перед началом убедитесь, что у вас есть рабочая установка 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-менеджерам.



Пример файла пароля (последовательность строк важна — 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 gnupgFedora:
sudo dnf install pass gnupg2Arch Linux:
sudo pacman -S pass gnupgПримечание: в некоторых дистрибутивах GnuPG поставляется как gnupg, в других — как gnupg2.
Создание хранилища паролей — общий план
Чтобы начать, нужно выполнить две вещи:
- Иметь или создать GPG-ключ. Он будет использоваться для шифрования файлов.
- Инициализировать сам Password Store (локально или с Git).
Ниже — пошагово, как создать GPG-ключ и настроить pass.
Создание GPG-ключа
GPG отвечает за шифрование и дешифрование содержимого. Создать ключ можно встроенным мастером.
Команда для запуска мастера генерации:
gpg --full-generate-keyДальше мастер задаст вопросы: тип ключа, длина, срок действия, имя и email. По умолчанию RSA подходит для большинства задач.

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

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

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

Наконец, укажите надёжную парольную фразу для ключа. Это основной уровень защиты, поэтому пароля должно хватать как по сложности, так и по запоминаемости.
Инициализация хранилища паролей
Есть два распространённых варианта:
- Локальное хранилище, зашифрованное только с помощью GPG.
- Хранилище под управлением Git (рекомендуется, если хотите журнал изменений и синхронизацию).
Локальная инициализация
Пример команды (заметьте синтаксис в исходном руководстве; для удобства часто используют spaции вокруг cd):
cd /home/$USER/ && pass init "your-gpg-email"Эта команда создаст директорию ~/.password-store с зашифрованными файлами.

Инициализация с Git
Чтобы управлять историей и синхронизировать хранилище, можно включить Git:
pass git init
После этого все обычные 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, и установите пакет:
- Alt+X → package-install → password-store
- Проверить версию: Alt+X → password-store-version


Быстрые сочетания и команды
- 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
- Alt+X → password-store-insert.
- Введите имя записи (например, site/example).
- Введите пароль (ввод будет скрыт).


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


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

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

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

Обратите внимание на настройки времени очистки буфера обмена в вашей системе. Рекомендуется ограничивать время, в течение которого пароль остаётся в буфере обмена.
Генерация паролей и OTP
Password Store может генерировать пароли автоматически:
- Alt+X → password-store-generate — открыть диалог генерации.
Для поддержки одноразовых паролей (OTP) существует расширение pass-otp.
Debian / Ubuntu:
sudo apt install pass-extension-otpFedora:
sudo dnf install pass-otpArch 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 — системные секреты для окружения рабочего стола.
Выбор зависит от угрозной модели и производственного процесса.
Практики безопасности и жёсткая конфигурация
Рекомендации по повышению безопасности:
- Используйте GPG с длиной ключа ≥ 2048 (рекомендуется 4096).
- Установите срок действия ключа и периодически его обновляйте.
- Храните приватный ключ на устройстве с аппаратной защитой (например, YubiKey) при возможности.
- Ограничьте доступ к каталогу ~/.password-store правами файловой системы.
- Если используете Git-репозиторий, не публикуйте приватный репозиторий в открытом доступе.
- Настройте автоматическое очищение буфера обмена (например, xclip/xsel с таймером).
- Делайте регулярные резервные копии приватных ключей и шифруйте их.
- Используйте двухфакторную аутентификацию в сервисах, даже если у вас сильные пароли.
Пример усиления прав доступа на Unix:
chmod -R go-rwx ~/.password-storeЕсли синхронизируете через удалённый Git, рассмотрите шифрование дополнительного уровня или использование приватного репозитория с ограниченным доступом.
Миграция и методология: пошаговый план
Мини-методология миграции в pass для существующих пользователей других менеджеров:
- Оцените объём записей и форматы (CSV/JSON/KeepassXC/XML).
- Экспортируйте данные из старого менеджера в текстовый формат.
- Приведите данные к шаблону для pass (первая строка — пароль, далее — метаданные).
- Импортируйте построчно с помощью скриптов или вручную через pass insert.
- Проверьте корректность дешифровки и целостность данных.
- Закройте и удалите временные файлы и экспортные копии.
- Включите Git и сделайте первый коммит в приватном репозитории.
- Настройте бэкапы для приватных ключей и хранилища.
Пример простого скрипта для импорта из 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
Похожие материалы
Как сбросить Samsung планшет до заводских настроек
Удаление дубликатов Burst на iPhone
iHome SmartMonitor: руководство и настройка
Pin Window на Samsung: настройка и безопасность
Как исправить VCRUNTIME140.dll is missing в Windows 10