Давайте поговорим о паролях. В основном, это то, что вы должны использовать для каждой учетной записи в Интернете. Либо вы этого не делаете, сделайте это частично (например, сочетание между версией имени и фамилии службы, используемой в тексте, с заглавной буквой и символом, который не является ни буквой, ни номером в каком-либо месте, например mySup3r13bs! t3MyUsualPassword), или у вас есть менеджер паролей.

Мне было довольно сложно найти менеджер паролей, который соответствует моим потребностям. В течение последних нескольких лет я пробовал немало из них и в конечном итоге перестал использовать их один за другим. LastPass из-за его плохого UX по важным для меня моментам, и я не мог чувствовать себя уверенно в том, чтобы доверять такой централизованной и закрытой службе. Keepass, потому что было больно синхронизировать мою базу данных между всеми устройствами. Passbolt, потому что он фокусируется на случае использования команды, и я хочу что-то, предназначенное для людей. Вы называете это.

Через некоторое время я начал пытаться получить описание того, что я хотел. Для меня идеальным менеджером паролей должно быть:

  • бесплатно программное обеспечение
  • проверка безопасности
  • синхронизируемый через устройства
  • самостоятельно hostable
  • легко настраивается
  • простой/быстрый в использовании

Я понял, что это довольно идеалистическое описание, и подумал, что я закончил работу с менеджерами паролей. Справедливости ради, и по сей день я все еще не нашел того, который соответствует всем моим критериям, хотя тот, о котором я расскажу в этом посте, будет довольно близким.

Кроме того, позвольте мне сначала разобраться: последние два пункта в приведенном выше списке используют относительное определение «легко», то есть то, что легко настроить/использовать для меня, как у кого-то, у кого есть некоторые технические знания и опыт. В частности, решение, о котором я буду писать в этом сообщении, будет обозначаться как очень больно для использования кем-то, кто не используется для bash, git et al.

Все дело в простоте

Эта растущая осведомленность способствовала популярности менеджеров паролей, инструментов, предназначенных для безопасного создания, хранения и извлечения паролей, зашифрованных с помощью главного пароля или парольной фразы. В некоторых случаях они локально хранятся, например, KeePass, а в других они хранятся в веб-службе, например LastPass. Оба являются хорошими инструментами и хорошо работают с GNU/Linux. У меня лично есть некоторые оговорки в отношении LastPass, поскольку я не хочу, чтобы мои пароли хранились в сторонней службе, и я не доверяю шифрованию JavaScript.

Pass - это минимальный и очень простой менеджер паролей, который состоит из скрипта bash длиной 699 строк (включая комментарии). Он хранит ваш пароль в виде файлов в заданном каталоге («хранилище») и шифрует их с помощью GnuPG. Таким образом, вы можете упорядочить свои пароли по своему желанию, как и многие подкаталоги по своему усмотрению, и они будут сохранены, возможно, вместе с некоторыми метаданными, в несколько безопасном режиме.

Интересно, что, поскольку теперь у нас есть аккуратная настройка GnuPG для обработки самого шифрования, другой вариант - это инструмент pass (1), выписывающий себя как «стандартный менеджер паролей UNIX». Это немного больше, чем сценарий оболочки и некоторые дополнения bash (1), завернутые вокруг существующих инструментов, таких как git (1), gpg2 (1), pwgen (1), tree (1) и xclip (1) и ваш выбор $EDITOR. Если вы еще не инвестировали в существующий метод управления паролями, вы можете найти это хорошее первое приложение новой настройки криптографии и минимальный подход к безопасному хранению паролей, доступный из командной строки (и, следовательно, SSH).

В Debian-производных системах он доступен как часть пакета pass:

sudo apt-get install pass

Это включает в себя руководство:

$ man pass

Инструкции по установке на другие операционные системы также доступны на сайте. Релизы также доступны для загрузки и ссылка на репозиторий разработки. Если вы используете это, убедитесь, что у вас также установлены необходимые инструменты, указанные выше, хотя xclip (1) необходим только при запуске системы X Windows.

Настроить

Вам также нужно будет сгенерировать ключ GPG, который является пропускным эквивалентом главного ключа хранилища/кодовой фразы, если у вас его нет, что я также не буду здесь освещать, так как в Интернете есть большие ресурсы для Интернета ,

После того как пропуск установлен, давайте инициализируем магазин с

pass init GPG-ID

Здесь GPG-ID - это идентификатор ключа, который вы будете использовать для шифрования ваших паролей.

Затем он инициализирует хранилище в каталоге, путь которого ~ /.password-store и создается, если он не существует. Этот каталог является тем, в котором пропуск будет работать при каждом вызове, который вы сделаете в будущем. Это значение можно переопределить, установив переменную окружения PASSWORD_STORE_DIR.

Действительно, мы отмечаем, что каталог ~ /.password-store создан, хотя он в настоящее время пуст, за исключением файла .gpg-id, записывающего наш идентификатор ключа:

$ find .password-store
.password-store
.password-store/.gpg-id

Добавление существующего пароля

Поскольку у вас есть учетные записи в Интернете перед началом использования pass, вы можете захотеть сохранить свои пароли в своем новом хранилище паролей.

Чтобы вставить пароль в свой password store, просто запустите

pass insert PASSWORD-NAME

Если PASSWORD-NAME - это имя, которое вы дадите этой записи. Если вы хотите управлять своими записями в подкаталогах, имя записи также может быть относительным путем к password store (например, вставка pass insert google.com/gmail/example@gmail.com создаст запись в подкаталоге «google.com/gmail»). Если подкаталог не существует, pass создаст его для вас.

Затем он предложит вам пароль, который вы можете просто вставить и проверить, а зашифрованная его копия будет храниться в хранилище паролей. Например, если имя записи является google.com/gmail/example@gmail.com, оно будет хранить зашифрованную копию моего пароля в ~ /.password-store/google.com/gmail/example@gmail.com.gpg.

Вы также можете добавить метаданные к своему паролю, такие как логин учетной записи или URL-адрес службы, которые могут использовать некоторые клиенты-клиенты. Вы можете сделать это, добавив флаг -m в ваш запрос на ввод вставки (до PASSWORD-NAME), который позволяет вам писать свою запись, используя только одну строчку и сохранять ее с помощью Ctrl + D.

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

В конце концов, ваша многострочная запись будет выглядеть так:

mySup3r13bs!t3P4ssw0rd
login: example@gmail.com
url: google.com

Возможно, стоит отметить, что если вы перешли из другого менеджера паролей, может быть сценарий миграции, который должен выполнить миграцию всех ваших записей, вместо того чтобы делать это вручную, по одному за раз. Сценарии миграции для большинства менеджеров паролей можно найти здесь.

Создание паролей

Конечно, одна из хороших вещей с наличием менеджера паролей - это генерировать разные надежные пароли для каждой службы, на которой у вас есть учетная запись. Создание пароля с помощью pass так же просто, как и вызов:

$ pass generate google.com/gmail/example@gmail.com 16
The generated password to google.com/gmail/example@gmail.com is:
!Q%i$$&w1+JJi-|X

Если у вас есть служба, которая не взаимодействует с символами в паролях, вы можете добавить к этому вызову параметр -n:

$ pass generate -n google.com/gmail/example@gmail.com 16
The generated password to google.com/gmail/example@gmail.com is:
pJeF18CrZEwzI59D

pass (1) использует pwgen (1) для генерации пароля. В каждом случае пароль автоматически вставляется в хранилище паролей для вас.

Если нам нужно изменить существующий пароль, мы можем либо перезаписать его с помощью вставки, либо использовать операцию редактирования, чтобы вызвать наш выбор $EDITOR:

$ pass edit google.com/gmail/example@gmail.com

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

Обратите внимание, что добавление или переписывание паролей не требует вашей кодовой фразы; только поиск и редактирование, в соответствии с тем, как работает GnuPG.

Для этого мы можем сначала вызвать pass insert -m PASSWORD-NAME, в котором будет запрашиваться пароль и его метаданные, оставьте первую строку пустой и заполните метаданные, прежде чем нажать Ctrl + D. Затем мы можем вызвать pass generate -ci PASSWORD-NAME. Обратите внимание на флаг -i (который обозначает «на месте»), что означает, что запись, которую мы хотим сгенерировать пароль, уже существует, и в этом случае pass заменит первую строку записи новым сгенерированным паролем и оставит остальные файла как было.

Теперь у вас есть вновь созданный сильный пароль, скопированный в буфер обмена, и нужные метаданные в его файле.

Получение паролей

Было бы совершенно бесполезно хранить все ваши пароли в вашем passwords store, не имея возможности получить их и использовать. Как и все с пропуском, это довольно просто:

$ pass google.com/gmail/example@gmail.com
(...gpg-agent pinentry prompt...)
Tr0ub4dor&3

Если вы используете X-окна и имеете xclip (1), вы можете временно ввести пароль в буфер обмена для вставки в веб-формы:

$ pass -c google.com/gmail/example@gmail.com
Copied google.com/gmail/example@gmail.com to clipboard. Will clear in 45 seconds.

Вы также можете предпочесть не запускать терминал и вводить командную строку, чтобы получить пароль, который вы затем скопируете на веб-сайт. В этом случае вам может быть интересно использовать одно из немногих расширений браузера, например passwe для Firefox и Chrome, PassFF для Firefox или Browserpass для Chrome, которые вы можете использовать для автоматического заполнения форм входа, используя пароли из вашего магазина и их метаданных. Для чего это стоит, я довольно давно использую PassFF, и он работает очень хорошо.

Удаление

Если нам больше не нужен пароль, мы можем удалить его с помощью pass rm:

$ pass rm google.com/gmail/example@gmail.com
Are you sure you would like to delete google.com/gmail/example@gmail.com? [y/N] y
removed ‘/home/byzoni/.password-store/google.com/gmail/example@gmail.com.gpg’

Мы можем удалить целые каталоги паролей с помощью pass rm -r:

$ pass rm -r google.com
Are you sure you would like to delete google.com? [y/N] y
removed ‘/home/byzoni/.password-store/google.com/gmail/example@gmail.com.gpg’
removed directory: ‘/home/byzoni/.password-store/google.com/gmail’
removed directory: ‘/home/byzoni/.password-store/google.com’

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

Поскольку у меня всегда есть несколько устройств, одна вещь, которую я действительно ищу в менеджере паролей, - это возможность легко синхронизировать с другими устройствами. Именно по этой причине я прекратил использовать Keepass, потому что при необходимости вручную копировать свою базу данных по всем вашим устройствам каждый раз, когда вы добавляете/удаляете/изменяете запись, это действительно больно.

Там, где я становлюсь очень разборчивым, я не хочу зацикливаться на хостинге проприетарных сервисов, таких как LastPass или Dashlane’s. Я хочу контролировать, куда я отправляю свои пароли, кто может получить к ним доступ, и т. Д.

Еще раз попробуйте простоту, просто реализуя отличную совместимость с git, позволяя делать все версии и сети, что, очевидно, необязательно.

Если вы хотите синхронизировать свой собственный password store с репозиторием git, создайте пустое место где-нибудь (я лично сделал это на одном из моих собственных серверов, но, конечно же, хранилище GitHub/GitLab/Gitea/etc.) ), захватить его URL и запустить

$ pass git init
$ pass git remote add origin REMOTE-URL

Где REMOTE-URL - это URL-адрес репо.

Это инициализирует локальный репозиторий git в корневом каталоге вашего хранилища паролей, а также создаст коммит, содержащий все содержимое вашего магазина. Обратите внимание, что синтаксис команд pass git соответствует стандартным командам git. Это потому, что pass git фактически запускает каждую команду git, которую вы даете ей в магазине, независимо от вашего текущего рабочего каталога. Это означает, что вы можете в основном использовать каждую команду git, которую вы хотите, до тех пор, пока вы префикс их пропускаете, команды будут влиять на ваш магазин паролей и больше ничего.

Теперь, когда git-репозиторий инициализируется в хранилище паролей, каждый раз, когда вы создадите, удалите или измените пароль, pass автоматически создаст для этого фиксацию, поэтому вам нужно только запустить pass git push, а затем синхронизировать локальные хранилище паролей с удаленной копией.

В моем случае мне нравится иметь копию моего хранилища паролей на моем телефоне и управлять им с помощью приложения Android Password Store для Android (доступного на F-Droid и Google Play), которому я просто должен предоставить URL-адрес и учетные данные необходимо клонировать репозиторий и ключ GPG для использования при попытке расшифровки паролей, и я могу мгновенно использовать свои пароли на своем смартфоне.

Далее нам нужно добавить ключ, которым мы будем шифровать и расшифровывать пароли. Добавляется ключ через приложение OpenKeyChain.

Устанавливаем на телефон оба этих приложения. Желательно это делать через FDroid.

Конечно, поскольку pass управляет вашими паролями файлов и каталогов, вы можете иметь несколько подкаталогов в вашем хранилище паролей, каждый из которых имеет другой пульт git. Например, большинство моих паролей переносятся в удаленный репозиторий на принадлежащем мне сервере.

Резервные копии

Поскольку файлы паролей шифруются только вашим ключом GnuPG, вы можете относительно безопасно создавать резервные копии хранилища на удаленных и сторонних сайтах, просто скопировав каталог ~ /.password-store. Если сами имена файлов содержат конфиденциальную информацию, такую как личные имена пользователей или сайты, вам может потребоваться создать резервную копию зашифрованного архива.