31 августа 2020

Pass - консольный менеджер паролей

Pass - это небольшой bash-скрипт хранящий пароли в обычных текстовых файлах зашифрованных с помощью GPG. Файлы можно организовывать в директории, при этом имя файла является названием сайта или ресурса для которого файл хранит пароль. Файлы имеют очень простой формат: первая строка содержит только пароль, все остальные строки содержат любые другие данные. Например, файл github.com.gpg может иметь такое содержимое:

md3rTks3!=
login: Maria
url: https://github.com/login 
email: maria@example.com

Указывать поля вида login: и url: именно в таком формате не обязательно, но подобные метаданные позволяют менеджеру паролей автоматически подставлять ваш логин на веб-сайтах.

Очень простой формат файла и организации хранения паролей дает нам большие возможности: мы можем просматривать и редактировать пароли без установленной программы pass (достаточно иметь установленные GnuPG и любой текстовый редактор), мы можем писать свои скрипты для работы с паролями, мы можем хранить все изменения паролей в системе контроля версий git и синхронизировать пароли на разных компьютерах через неё же. Также pass имеет большую поддержку со стороны сообщества: существуют реализации программы для Android и iOS, плагины для веб-браузеров Chrome и Firefox, графические клиенты для Windows, Mac и Linux, расширения для Alfred, dmenu, rofi и Emacs, скрипты для импорта паролей из других приложений.

В этой статье мы рассмотрим именно консольную версию, доступную на сайте https://www.passwordstore.org/

Установка

Установить программу вы можете с помощью пакетного менеджера своего дистрибутива, например:

  • для Ubuntu \ Debian: sudo apt-get install pass
  • для ArchLinux: pacman -S pass
  • для macOS: brew install pass

Предварительная настройка

Чтобы использовать программу вам нужен gpg-ключ, которым будут шифроваться файлы с паролями. Если у вас ещё нет своего ключа, то прочтите вот эту статью и создайте его.

Далее пишем в терминале pass init gpg-id, где вместо gpg-id вам необходимо вписать id вашего gpg ключа. Проще всего это сделать нажав Tab после того как вы написали pass init и выбрав один из предложенных автодополнением вариантов.

Эта команда создаст директорию ~/.password-store в которой будут храниться ваши пароли и запомнит каким ключом их шифровать (вы также можете использовать разные gpg ключи для разных поддиректорий, для этого есть флаг -s: pass init -s поддиректория second-gpg-id)

Если вы хотите, чтобы директория с паролями хранилась в git-репозитории, то выполните команду pass git init. После этого при каждом создании\изменении паролей pass будет автоматически делать коммит в репозиторий.

Использование

Чтобы добавить пароль выполите команду pass insert email/your@email.ru и введите пароль который хотите сохранить.

Эта команда создаст поддиректорию email в хранилище паролей, добавит в неё зашифрованый текстовый файл your@email.ru.gpg, в котором сохранит введённый вами пароль.

Если вам нужно по-быстрому сгенерировать пароль, то можете написать pass generate youtube.com 15. Эта команда сгенерирует новый пароль длинной 15 символов, запишет его в файл youtube.com.gpg и покажет на экране. Если вы добавите опцию -n, то пароль будет состоять только из букв и цифр (без специальных символов), если добавите опцию -c, то пароль сразу будет скопирован в буфер обмена.

Ранее я писал, что в файле может содержаться не только пароль, но и другая текстовая информация (например логин или просто какие-то заметки). Для того что бы записать несколько строк в файл вы можете использовать опции –multiline или -m: pass insert -m web/github.com. Напоминаю: пароль вводится в первой строке, а все остальные данные уже после него на отдельных строках (см. пример в начале статьи). Что бы закончить ввод и сохранить данные нажмите Ctrl+d.

Изменить файл с паролем можно командой pass edit web/github.com. При этом откроется редактор указанный в переменной окружения EDITOR. Этой командой также можно добавлять в хранилище новые пароли, если вам удобнее делать это через текстовый редактор.

Для удаления файла с паролем используется команда pass rm web/github.com, а для переименования pass mv старое_название новое_название.

Для того чтобы показать пароль на экране просто введите pass web/github.com. При этом, чтобы не вводить длинные названия сайтов, вы можете пользоваться автодополнением bash нажимая клавишу Tab. Используйте флаг -c чтобы сразу скопировать пароль в буфер обмена: pass -с web/github.com.

Посмотреть какие вообще есть записи в хранилище можно просто введя pass (а для просмотра записей в отдельной директории pass имя_директории).

Вы можете искать файлы по части названия pass find строка_поиска и, более того, вы можете искать внутри всех файлов с паролями pass grep строка_поиска (правда это действие довольно медленное).

Версионирование и синхронизация

Выше я писал, что если вы выполните команду pass git init, то программа создаст внутри хранилища паролей git-репозиторий и будет автоматически коммитить все изменения. А это означает, что из коробки у нас появляется синхроницация паролей на разных компьютерах.

Вы можете использовать любые команды git, написав перед ними слово pass. Это нужно, чтобы перед их вызовом вам не приходилось каждый раз переходить в директорию ~/.password-store.

Добавляем адрес репозитория на вашем сервере pass git remote add origin your-remote-server.com:pass-store.

Забираем с него файлы с паролями pass git pull.

Сохраняем локально добавленные или изменённые пароли на удаленный сервер pass git push.

Заключение

Как видите pass очень простая, но мощная утилита, следующая философии unix. Часто её ругают за то, что названия файлов с паролями хранятся в открытом виде (а они обычно представляют собой названия сайтов на которых вы зарегистрированы). Но лично мне нравится настолько простой формат хранения паролей.

© 2011-2020, Борис Тимофеев

Powered by Hugo & Kiss.