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

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
Автор
Редакция

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

Как сбросить Samsung планшет до заводских настроек
Руководство

Как сбросить Samsung планшет до заводских настроек

Удаление дубликатов Burst на iPhone
iPhone фото

Удаление дубликатов Burst на iPhone

iHome SmartMonitor: руководство и настройка
Умный дом

iHome SmartMonitor: руководство и настройка

Pin Window на Samsung: настройка и безопасность
Мобильные устройства

Pin Window на Samsung: настройка и безопасность

Как исправить VCRUNTIME140.dll is missing в Windows 10
Windows

Как исправить VCRUNTIME140.dll is missing в Windows 10

Исправить ошибки CTF Loader в Windows 10
Windows

Исправить ошибки CTF Loader в Windows 10