Бесплатный менеджер паролей KeePass 2: инструкция по эффективному использованию. Часть 1

Как настроить KeePass для входа на сайты. Автоматическое определение адреса. Эквивалентные домены. Нестандартная авторизация, автонабор отдельных полей. Облачная синхронизация между устройствами. Резервное копирование базы

Речь пойдет об использовании KeePass, в основном, на Windows. При этом сама программа кросплатформенная, а также имеет ряд форков, из которых уделим внимание KeePass2Android. Чтобы база была общей на разных устройствах, обеспечим облачную синхронизацию.

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

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

Обычному пользователю™ достаточно прочитать пункт Основы, не раскрывая в нем спойлеры.

Достоинства и недостатки предлагаемой конфигурации

Предложенный вариант использования KeePass'а — лишь один из многих. Его качества:

  • портативность;
  • защищенный ввод мастер-пароля;
  • усложнение автонабора для защиты от килоггеров;
  • резервное копирование без плагинов;
  • облачная синхронизация без плагинов;
  • нестандартный автонабор, в т.ч.:
    • двухстраничная авторизация,
    • набор произвольного поля,
    • набор с задержкой и/или без усложнения (плагин TCATO_Placeholder);
  • интеграция в браузеры, не требующая их настройки (плагин WebAutoType);
  • глобальный автонабор в нестандартных случаях, например, для ввода одного пароля (плагин AutoTypeShow);
  • поддержка эквивалентных доменов (опционально — с использованием регулярных выражений);
  • меню выбора браузера (в т.ч. портативного или браузера в песочнице);
  • запуск из KeePass'а приложений с одновременным автонабором (монтирование томов VeraCrypt, соединение по AmmyyAdmin и др.);
  • способность KeePass'а работать с правами администратора (понижаются права открываемых им браузеров и других приложений);
  • работа с несколькими базами:
    • совместно используемые пароли,
    • автооткрытие нескольких баз,
    • автооткрытие базы без ввода пароля (через шифрование дополнительной базы учетными данными Windows);
  • блокировка интерфейса PIN-кодом (несерьезно).

Недостатки:

  • медленный вызов глобального автонабора (при использовании плагина WebAutoType и/или поддержки эквивалентных доменов);
  • посимвольный автонабор вместо мгновенной вставки учетных данных;
  • нет подхвата данных, введенных в браузере;
  • необходимость создавать записи по шаблонам;
  • необходимость выполнять XML-замену при импорте данных из другой базы.

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

Основы

Подготовка программы

Распакуем в какую-нибудь пустую папку архив с portable-вариантом KeePass версии 2.x. В подпапку Plugins поместим плагины KeePassFaviconDownloader.plgx и TCATO_Placeholder.plgx. В папку программы распакуем архив с русским переводом и туда же — весь архив KeePass_Settings.zip (пароль KeePass). В отдельное от программы место распакуем архив just_a_photo.zip.

KeePass 2.x требует .NET Framework 2.0. Если используются жесткие средства защиты, наподобие Comodo Internet Security, понадобится добавить файлы BackUp.js, GlobalAutoTypeHelper.js, RunActivate.js и OpenWith.hta в доверенные.

Содержимое каталога KeePass'а

Проверка подлиности

Чтобы убедиться, что программа не поддельная, проверим подписи, как рекомендует ее автор. У каждого exe- и dll-файла откроем окно свойств и перейдем на вкладку «Цифровые подписи». Удостоверимся, что имя подписавшего — Open Source Developer, Dominik Reichl. Затем нажмем Сведения и удостоверимся, что подпись действительна. Не иметь подписи могут только файлы плагинов в папке PluginCache.

Настройка ориентирована на максимально портативную и автономную работу. Хотя для KeePass'а и существует множество плагинов, постараемся использовать их минимально, обходясь по возможности штатными средствами.

В то же время будут рассмотрены плагины и/или браузерные расширения, помогающие реализовать глобальный автонабор.

Как это настроено

KeePass сам по себе обеспечивает портативность, в частности, запоминает именно относительный путь к базе паролей. Поэтому базу удобно держать в папке программы и переносить вместе с ней. Однако по умолчанию KeePass помещает скомпилированные плагины в папку %LOCALAPPDATA%\KeePass, что несколько отступает от портативности. Чтобы они помещались в папку программы, отредактирован файл KeePass.config.xml: параметру Application/PluginCachePath задано значение {APPDIR}{ENV_DIRSEP}PluginCache, т.е. после строки <Application> вставлена строка <PluginCachePath>{APPDIR}{ENV_DIRSEP}PluginCache</PluginCachePath>.

Чтобы опробовать настройку смогли даже те пользователи, у которых уже запущен свой KeePass, в разделе Сервис → Настройка → Дополнительно отключена опция Ограничивать одним экземпляром.

Открытие базы и изменение мастер-пароля

Запустив KeePass, введем мастер-пароль myCoolMasterPassword и укажем ключевой файл just a photo.jpg.

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

Изменим мастер-пароль (меню Файл → Изменить основной пароль): зададим свой сложный пароль и, при желании, ключевой файл. Ключевым может быть любой личный файл, который доступен на всех синхронизируемых устройствах и ни в коем случае не может быть утерян или изменен. Данные учетной записи Windows не будем использовать для авторизации.

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

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

Смена мастер-пароля

Как это настроено

Чтобы обычные килоггеры не могли перехватить ввод мастер-пароля, в разделе Сервис → Настройка → Безопасность включена опция Вводить основной пароль в защищенном режиме. На вкладке Дополнительно включена опция Запоминать и автоматически открывать последнюю базу паролей при запуске, как и по умолчанию; но в то же время отключены опции Запоминать источники ключа и Запоминать рабочие папки, поскольку расположение ключевого файла — это все-таки секретная информация.

Поиск нужной записи и авторизация

Опробуем разные способы ввода учетных данных. Воспользуемся «учебной» учебной учетной записью, которая имеет название Учебный аккаунт, логин myLogin, пароль myPassword, адрес http://keepass.info/help/kb/testform.html, тег демо и комментарий Тренировка

Заодно проверим, перехватываются ли данные тестами, следящими за нажатием клавиш и буфером обмена.

Начнем с чисто клавиатурного способа. Откроем KeePass сочетанием клавиш Ctrl+Alt+Shift+K и сразу же наберем фрагмент названия записи, или логина, или адреса, или тега, или даже комментария, нажмем Enter. Стрелками выберем нужную запись из найденных и нажмем Ctrl+U — ссылка откроется. Поставим курсор в поле ввода логина и нажмем Ctrl+Alt+Shift+F9 (или Fn+Ctrl+Alt+Shift+F9, в зависимости от конфигурации клавиатуры). Нажмем кнопку Submit — и страница покажет сообщение с введенными данными.

Аналогичное можно проделать одной мышью: в поле поиска раскроем недавние запросы, выберем нужный. В найденной записи сделаем двойной клик по полю Ссылка. Когда ссылка откроется, кликнем по полю ввода (не обязательно очищать поле — KeePass сделает это сам). Вернемся к KeePass'у и нажмем на панели инструментов кнопку Выполнить автонабор.

Кликать по полю ввода желательно всегда, даже если там уже мигает курсор. В частности, этого требует автонабор для Google или ProtonMail.

Автонабор на тестовой странице KeePass

Если вам понадобится набрать отдельное значение, например, пароль — нажмите кнопку [F] на панели инструментов и выберите поле из списка.

Вместо автонабора можно перетащить логин и пароль в поля ввода прямо из списка записей KeePass. Еще один вариант — временно скопировать эти данные в буфер обмена, это делается двойным кликом; через 20 секунд буфер обмена автоматически очищается (но только если там будут учетные данные; «чужое» содержимое KeePass не удалит).

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

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

Как это настроено

В разделе Сервис → Настройка → Политика включены опции Автонабор, Автонабор без контекста, Перетаскивание и Копирование, как и по умолчанию.

На вкладке Интеграция заданы глобальные горячие клавиши Ctrl+Alt+Shift+F9 для автонабора выбранной записи, а также добавлена клавиша Shift в комбинации, имеющиеся по умолчанию. Можно сделать комбинации и более простыми, но возрастет риск случайного нажатия и конфликта с другими программами.

Чтобы упростить поиск, на вкладке Внешний вид в разделе Быстрый поиск включены все три опции вида Помещать фокус на...

На вкладке Безопасность включена автоочистка буфера обмена через 20 секунд. Также включена опция Использовать формат буфера обмена 'Clipboard Viewer Ignore', чтобы некоторые легальные программы, следящие за буфером обмена, не запоминали учетные данные (замечание, что эта опция «не рекомендована» устарело: оно относится к старой версии, конфликтовавшей с Microsoft Office).

В самой базе изменена верхняя группа: на вкладке Автонабор задано использование последовательности {CLEARFIELD}{UserName}{TAB}{DELAY 100}{Password}, как самой универсальной. В учебной записи включена опция Двойное усложнение автонабора.

Кнопка [F] реализована с помощью триггеров (Сервис → Триггеры). Сначала создан триггер Добавить кнопки на панель инструментов:

  • событие: Приложение запущено и готово;
  • условия: отсутствуют;
  • действие: Добавить свою кнопку на панель инструментов:
    • идентификатор: btn_TypeField,
    • имя: [F],
    • описание: Набрать поле....

Затем добавлен триггер Набрать произвольное поле при нажатии на кнопку [F]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_TypeField,
  • действие: Выполнить автонабор для выбранной записи с последовательностью {PICKFIELD}.

Создание записи

Откроем в браузере какой-нибудь форум и попробуем на нем зарегистрироваться. Запустим KeePass, и войдем в группу Общие. Кликнем по стрелке справа от кнопки добавления записи и выберем шаблон _Обычная_запись_. Дадим записи желаемое название, в поле Ссылка скопируем адресную строку браузера.

Перейдем на страницу регистрации и заполним требуемые поля, кроме пароля. Скопируем в соответствующее поле KeePass'а выбранный логин, а в поле Комментарии укажем прочие данные, которые использовали для регистрации: имейл, имя и т.п. Нажмем кнопку Генерация пароля (напротив поля Пароль) и выберем профиль Автогенерируемые пароли для новых записей. Теперь нажмем Ok в окне создания записи — и KeePass ее запомнит. Чтобы запись обрела значок сайта, выберем в ее контекстном меню пункт Download Favicons.

Перетащим пароль из KeePass'а в положенное место на странице регистрации (как вариант, можем поставить курсор в это место, нажать кнопку [F] и выбрать поле Пароль). Завершаем регистрацию.

Теперь опробуем регистрацию на Яндексе. Чтобы не ошибиться в адресе, откроем сайт двойным кликом по полю Ссылка в шаблоне Yandex из группы templates. Войдем в группу Почта и добавим запись по шаблону Yandex.

Перейдем на страницу регистрации, укажем имя, определимся с логином. Занесем в KeePass логин, укажем в коммментарии имя и фамилию. Сгенерируем пароль (Автогенерируемые пароли для новых записей) и нажмем Ok. Перетащим пароль на страницу регистрации.

Однако Яндекс требует также придумать ответ на секретный вопрос. Этот ответ должен быть таким же секретом, как и пароль, поэтому мы и сгенерируем его подобно паролю.

Войдем в группу <service> и вызовем контекстное меню на записи <Генератор паролей>. Выберем Копировать строковое поле → Создать обычный пароль. Вставим свежесозданный «ответ на вопрос» на страницу регистрации, это нужно сделать за 20 секунд. Теперь сохраним наш «ответ» в KeePass: сделаем двойной клик по полю Пароль записи <Генератор паролей>, чтобы еще раз скопировать тот же «ответ», потом откроем свою запись Yandex, перейдем на вкладку Дополнительно и вставим «ответ» в поле Secret — на все про все снова 20 секунд. Готово.

Создание записи KeePass

Если вы уже пользуетесь каким-нибудь менеджером паролей, то можете перенести свою базу в KeePass, выполнив импорт и небольшую обработку данных.

Как это настроено

В базе создана группа шаблонов templates. Шаблоны — это обычные записи, в которых заранее проставлены названия, ссылки, добавлены дополнительные поля, установлены значки, включено усложнение автонабора, заданы его последовательности и т.д. В поле комментария дана инструкция по использованию шаблона, ее можно удалить. Пароли в шаблонах сделаны пустыми. В настройке базы (Файл → Настройка базы паролей → Дополнительно) указано, какая именно группа состоит из шаблонов. Для самой группы templates отключен автонабор и поиск записей (Изменить группу → Поведение). В ней создана подгруппа unused для хранения временно неиспользуемых шаблонов.

В окне Сервис → Генератор паролей заданы профили паролей. Основной профиль задан так: установлена длина 20, выбраны алфавитно-цифровые и некоторые другие символы, нажата кнопка Сохранить текущую настройку как новый профиль (дискета справа вверху) и указан вариант Автогенерируемые пароли для новых записей. Другие профили заданы подобным образом: простой пароль состоит из 16 алфавитно-цифровых символов, сложный — из 30 символов широкого набора; они сохранены под именами Simple и Strong.

Запись <Генератор паролей> — это обычная запись, в которой на вкладку Дополнительно добавлено строковое поле Создать обычный пароль со значением {NEWPASSWORD} и обязательной опцией Включить защиту в памяти. Каждый раз, когда это строкое поле раскрывается (копируется в буфер обмена или вводится автонабором), значение в поле Пароль заменяется новым. Новый пароль генерируется согласно профилю Автогенерируемые пароли для новых записей. Можно указать другой профиль кодом {NEWPASSWORD:/имя_профиля/}.

Общая база на всех устройствах

Пришло время наладить синхронизацию. Откроем запись KeePassCloudStorage в группе <service> и зарегистрируемся на облачном хранилище mydrive.ch: придумаем логин, сгенерируем пароль — все как обычно. Учетные данные сохраним в этой записи, только название и ссылку оставим нетронутыми. Зайдем в хранилище и отправим туда файл нашей базы, что лежит в папке Base (Upload → using Standard → Save → Обзор... → Upload). Вот и все.

Облачная синхронизация базы KeePass

Теперь при каждом закрытии база будет синхронизироваться с облаком. Кнопкой ↑↓ можно синхронизировать базу, не закрывая KeePass.

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

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

Как это настроено

В самой базе создана запись под названием KeePassCloudStorage с пустыми полями логина/пароля и ссылкой https://webdav.mydrive.ch/{T-CONV:/{DB_NAME}/Uri/} (KeePass впоследствии трансформирует эту ссылку в WebDAV-адрес файла, который расположен в корне облачного хранилища и имеет имя текущей базы паролей). Затем подготовлено несколько триггеров.

В уже имеющийся триггер Добавить кнопки на панель инструментов добавлено действие: Добавить кнопку... с идентификатором btn_Sync, именем ↑↓ и описанием Выполнить синхронизацию.

Создан триггер Синхронизировать при нажатии на кнопку ↑↓:

  • событие: Нажата пользовательская кнопка с идентификатором btn_Sync;
  • условия:
    • Строка:
      • строка: {DB_DIR},
      • операция: Равно,
      • значение: {APPDIR}{ENV_DIRSEP}Base;
    • Строка:
      • строка: {REF:T@T:KeePassCloudStorage},
      • операция: Равно,
      • значение: KeePassCloudStorage;
    • Строка:
      • опция Отрицание включена,
      • строка: {REF:U@T:KeePassCloudStorage},
      • операция: Равно,
      • поле Значение пусто;
    • Удаленный сервер доступен, сервер: google.com;
  • действия:
    • Изменить состояние триггера:
      • поле Имя триггера пусто,
      • новое состояние: Выключить,
    • Синхронизировать текущую базу паролей:
      • файл/ссылка: {REF:A@T:KeePassCloudStorage},
      • логин: {REF:U@T:KeePassCloudStorage},
      • пароль: {REF:P@T:KeePassCloudStorage};
    • Изменить состояние триггера:
      • поле Имя триггера пусто,
      • новое состояние: Включить.,

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

Аналогично создан триггер Синхронизировать при закрытии, отличающийся лишь событием: Закрытие файла базы паролей (после сохранения), фильтр оставлен пустым.

В результате синхронизация будет запускаться только для баз, расположенных непосредственно в папке Base, в которых есть запись KeePassCloudStorage с непустым логином, и только при наличии интернет-соединения. Учетные данные WebDAV возьмутся из самой этой записи.

Чтобы избежать сбоев при синхронизации, отключена опция Сервис → Настройка → Дополнительно → Использовать файловые транзакции. Когда эта опция включена, KeePass использует при сохранении базы промежуточный временный файл: такой метод сохранения призван предотвратить потерю данных, но иногда из-за него некорректно работает синхронизация. Вместо файловых транзакций, для защиты от потери данных предусмотрено автоматическое резервное копирование.

Обновление программы

Когда KeePass оповестит нас о выходе новой версии, закроем программу, скачаем заново архив с portable-вариантом версии 2.x, архив с переводом и просто заменим все соответствующие файлы в папке программы новыми. Наша настройка при этом сохранится.

Автор программы намеренно не сделал обновление автоматическим, чтобы исключить всевозможные риски подмены. Перед запуском рекомендуется проверить подлинность exe- и dll-файлов программы.

Используем KeePass2Android

Установим KeePass2Android стандартным образом. Затем перейдем в настройку системы и разрешим использование клавиатуры KeePass2Android. Настроим эту клавиатуру: в пункте Языки ввода отметим Английский и Русский, далее на ваш выбор.

Остальную конфигурацию KeePass2Android менять не обязательно. Нажмем Открыть файл, выберем HTTPS (WebDAV) и укажем те же данные, что в записи KeePassCloudStorage (ссылку следует указать в явном виде, скопировав ее из KeePass'а клавишами Ctrl+Shift+U). Логин и пароль облачного хранилища можно сохранить, это не самая чувствительная информация. Откроем базу, указав мастер-пароль и ключевой файл, если используется.

Теперь оценим удобство этой программы. Откроем в браузере сайт, который есть в базе. Нажмем Поделиться, выберем KeePass2Android — и нужная запись активизируется. Поставим курсор в поле ввода и сменим клавиатуру на KeePass2Android... которая принимает вид, говорящий сам за себя. Таким образом, этой клавиатурой мы будем легко вводить логины, пароли и дополнительные строковые поля, не прибегая к их копированию в буфер обмена (что было бы довольно опасно).

Клавиатура KeePass2Android

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

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

Дополнительные возможности

Вернемся в Windows и продолжим разбираться с KeePass'ом.

Автонабор: обычный и нестандартный

Позаботимся, чтобы для наших записей корректно работал автонабор. Для верхней группы задана самая общая последовательность автонабора, которая работает в большинстве случаев: {CLEARFIELD}{UserName}{TAB}{DELAY 100}{Password}, т.е. очистка поля, набор логина, нажатие Tab, короткая задержка и набор пароля (многие добавляют в конце нажатие Enter, но я считаю это лишним: окончательный шаг лучше выполнить самостоятельно). Эта последовательность наследуется подгруппами и самими записями, поэтому в большинстве случаев все будет Ok. А если авторизация совсем нестандартная?

Во-первых, можно отредактировать саму запись: открыть вкладку Автонабор и указать нужную последовательность. Например, для Google это будет что-то вроде {UserName}{ENTER}{DELAY 1500}{Password}: набрать логин, нажать Enter, выждать полторы секунды и набрать пароль.

Более того, можно указать различные последовательности автонабора для различных окон (кнопка Добавить). Например, при подключении к клиенту TeamViewer'ом сначала вводится идентификатор клиента, а потом, если удалось соединиться, в отдельном окне вводится пароль. В этом случае подойдет такая конфигурация автонабора: для окна TeamViewer набирать идентификатор {UserName}, а для окна Идентификация TeamViewer — пароль {PASSWORD}.

Также на вкладке Автонабор можно включить или отключить его двойное усложнение. Усложнение автонабора частично защищает от килоггеров, однако его невозможно использовать в некоторых окнах, например, в консольных. Можно настроить усложнение автонабора более тонко, например, включить его в целом для записи, но определенным окнам назначить последовательность без усложнения, наподобие {TCATO:false}{Password}{ENTER}. Код {TCATO:false} в последовательности принудительно отключает усложнение автонабора, а код {TCATO:true} включает; это обеспечивается плагином TCATO_Placeholder.

Во-вторых, можно раскладывать записи по группам в соответствии с автонабором. Так, учетные данные Google или Microsoft можно помещать в группу 2-страничные. В параметрах этой группы (Изменить группу → Автонабор) задана последовательность {UserName}{ENTER}{DELAY 1500}{Password}, и записи ее наследуют. Недостаток этого варианта — на уровне группы нельзя задать автонабор для разных окон.

В-третьих, можно создавать записи по шаблонам: в них уже прописаны последовательности автонабора, в т.ч. и для определенных окон. Это рекомендуемый вариант.

Новые шаблоны будем создавать в группе templates, беря за основу шаблон _Обычная_запись_. Чтобы редко используемые шаблоны не занимали место в выпадающем списке, можно переместить их в подгруппу unused: когда они понадобятся, просто вернем их в группу templates.

Некоторые окна, делаясь активными, теряют фокус ввода. Например, эту проблему имеет окно Skype. В таких случаях помогает задержка перед автонабором. Чтобы выполнить автонабор с задержкой, нажмем кнопку [A] на панели инструментов, а затем поставим курсор в поле ввода.

Авторизация в Skype с помощью KeePass

Кнопки [L], [P] и [S] запускают по отдельности автонабор логина, пароля и поля Secret соответственно, причем с задержкой перед началом набора, замедленно и без усложнения.

На другие нестандартные случаи остаются запасные варианты:

  • поставить курсор в поле ввода, вызвать на записи контекстное меню и выбрать подходящую последовательность в разделе Начать автонабор;
  • или кнопкой [F] набрать любое отдельное поле;
  • или перетащить логин и пароль из KeePass'а в требуемые поля;
  • или временно скопировать любое поле в буфер обмена.

Если понадобится изменить, например, задержку между вводом логина и пароля на Google, не придется редактировать все гугловские записи — достаточно внести изменения в запись <delays> (группа settings). Задержка для двухстраничной авторизации задается в миллисекундах паролем этой записи, задержка перед началом автонабора — логином, замедление автонабора — ссылкой. Все эти параметры можно регулировать.

Как это настроено

В базе создана запись <delays> логином 4000, паролем 1500 и ссылкой 100. В различных последовательностях автонабора паузы и замедления заданы ссылками на эту запись. Так, в шаблоне Google и в группе 2-страничные указана последовательность автонабора {CLEARFIELD}{UserName}{ENTER}{DELAY {REF:P@T:<delays>}}{Password}, а в шаблоне _Консоль/игры_ последовательностью {DELAY={REF:A@T:<delays>}}{Password} задан замедленный автонабор.

По-особому сделан автонабор в шаблоне Mail.ru. Для авторизации на странице https://e.mail.ru/login необходимо указать логин вместе с определенным почтовым доменом: mail.ru, bk.ru и др. Если в поле логина вводить полный почтовый адрес, наподобие example@mail.ru, то из-за усложнения автонабора окажется непредсказуемым, как перейти к вводу пароля: один или два раза нажать Tab. Найдено решение: использовать усложнение автонабора не для всего адреса сразу, а по отдельности для имени пользователя и для домена. Эти части выделяются из логина с помощью регулярных выражений, а в случае, если домен не указан в логине, берется домен mail.ru. Чтобы разделить усложнение автонабора, между частями вставлена фиктивная пауза. Вся последовательность:

{CLEARFIELD}{T-REPLACE-RX:/{USERNAME}/([^@]*).*/$1/}{DELAY 0}@{DELAY 0}{T-REPLACE-RX:/{USERNAME}@mail.ru/[^@]*@([^@]*).*/$1/}{TAB}{DELAY 100}{Password}

На случай, если в каком-нибудь другом почтовом сервисе будет такая же особенность авторизации, подобным образом сделан и автонабор в шаблоне _Почта_:

{CLEARFIELD}{T-REPLACE-RX:/{USERNAME}/([^@]*).*/$1/}{DELAY 0}{T-REPLACE-RX:/{USERNAME}/[^@]*(@?).*/$1/}{DELAY 0}{T-REPLACE-RX:/{USERNAME}/[^@]*@?(.*)/$1/}{TAB}{DELAY 100}{Password}.

Кроме шаблонов, созданы соответствующие группы с такими же последовательностями автонабора.

Чтобы активировать подменю Начать автонабор, в разделе Сервис → Настройка → Внешний вид включена опция Показывать дополнительные команды меню автонабора.

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

  • Добавить кнопку... с идентификатором btn_TypeLogin, именем [L] и описанием Набрать логин с задержкой без усложнения;
  • Добавить кнопку... с идентификатором btn_TypePassword, именем [P] и описанием Набрать пароль с задержкой без усложнения;
  • Добавить кнопку... с идентификатором btn_TypeSecret, именем [S] и описанием Набрать Secret с задержкой без усложнения.
  • Добавить кнопку... с идентификатором btn_DelayedAutoType, именем [A] и описанием Выполнить обычный автонабор с задержкой без усложнения.

Создан триггер Выполнить обычный автонабор с задержкой при нажатии на кнопку [A]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_DelayedAutoType,
  • действия:
    • Выполнить команду/ссылку:
      • файл/ссылка: %windir%\System32\ping.exe,
      • аргументы: -n 1 -w {T-REPLACE-RX:/{REF:U@T:<delays>}/^(.*\D.*|)$/4000/} 192.0.2.222,
      • опция Ждать выхода включена,
      • стиль окна: Скрытое;
    • Выполнить автонабор для выбранной записи, поле Последовательность пусто.

Таким образом, пауза реализована отправкой эхо-запроса на несуществующий адрес: в качестве времени ожидания ответа подставляется логин записи <delays>.

Создан триггер Набрать логин с задержкой при нажатии на кнопку [L]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_TypeLogin,
  • действия:
    • Выполнить команду/ссылку:
      • файл/ссылка: %windir%\System32\ping.exe,
      • аргументы: -n 1 -w {T-REPLACE-RX:/{REF:U@T:<delays>}/^(.*\D.*|)$/4000/} 192.0.2.222,
      • опция Ждать выхода включена,
      • стиль окна: Скрытое;
    • Выполнить автонабор для выбранной записи с последовательностью {TCATO:false}{DELAY={REF:A@T:<delays>}}{UserName}.

Создан триггер Набрать пароль с задержкой при нажатии на кнопку [P]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_TypePassword,
  • действия:
    • Выполнить команду/ссылку:
      • файл/ссылка: %windir%\System32\ping.exe,
      • аргументы: -n 1 -w {T-REPLACE-RX:/{REF:U@T:<delays>}/^(.*\D.*|)$/4000/} 192.0.2.222,
      • опция Ждать выхода включена,
      • стиль окна: Скрытое;
    • Выполнить автонабор для выбранной записи с последовательностью {TCATO:false}{DELAY={REF:A@T:<delays>}}{PASSWORD}.

Создан триггер Набрать Secret с задержкой при нажатии на кнопку [S]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_TypeSecret,
  • действия:
    • Выполнить команду/ссылку:
      • файл/ссылка: %windir%\System32\ping.exe,
      • аргументы: -n 1 -w {T-REPLACE-RX:/{REF:U@T:<delays>}/^(.*\D.*|)$/4000/} 192.0.2.222,
      • опция Ждать выхода включена,
      • стиль окна: Скрытое;
    • Выполнить автонабор для выбранной записи с последовательностью {TCATO:false}{DELAY={REF:A@T:<delays>}}{S:Secret}.

Глобальный автонабор. Список эквивалентных доменов

До сих пор мы своими руками отыскивали подходящую запись для авторизации на сайте. Однако KeePass способен найти ее сам, сообразно открытому сайту, и запустить автонабор.

Чтобы KeePass видел, какой сайт открыт в браузере, установим плагин WebAutoType, который определяет адрес страницы/фрейма. Понадобится лишь поместить файл WebAutoType.plgx в папку Plugins, в браузеры же ничего устанавливать не нужно.

Предупрежу, что плагин WebAutoType может замедлить автонабор на пару секунд. Он не работает с браузерами, запущенными в песочнице (Sandboxie, Comodo), а также не поддерживает некоторые браузеры, например, Pale Moon. Для плагина требуется .NET Framework 4. Если у вас установлен только .NET Framework 3.5, используйте плагин версии 3.x.

Вариант глобального автонабора с помощью браузерных расширений

Чтобы сообщать KeePass'у адрес открытого сайта, не обязательно устанавливать в него плагины. Вместо этого можно установить в браузер какое-либо из расширений, добавляющих к оконному заголовку адрес открытой страницы. Тогда KeePass будет подбирать записи на основании этого заголовка.

Браузер, в который установлено расширение, понадобится отметить в базе: в группе settings открыть запись WindowAssociation и вписать название браузера в поле Логин. Название должно быть тем самым, которое браузер добавляет в конец своего заголовка. Можно перечислить несколько браузеров, разделяя их знаком |:

Yandex|Pale Moon|K-Meleon

Если какой-либо браузер запускается в песочнице Sandboxie, понадобится дополнительно указать его название с символами [#] на конце, например:

Yandex|Pale Moon|K-Meleon|K-Meleon [#]|Google Chrome [#]

Можно совмещать оба способа: для основных популярных браузеров использовать плагин WebAutoType, а в браузерах, которые не поддерживаются плагином либо запускаются в Sandboxie, установить расширение.

Теперь для авторизации на сайте достаточно поставить курсор в поле ввода, нажать клавиши Ctrl+Alt+Shift+A или кнопку [G] на панели инструментов KeePass'а и в появившемся окне подтвердить выбор учетной записи.

Авторизация в Google глобальным автонабором KeePass

Запуск глобального автонабора KeePass мышью

В предложенной настройке KeePass есть ограничение: глобальный автонабор работает только для записей, созданных по шаблонам. Это сделано с целью защиты от фишинга. Чтобы глобальный автонабор заработал для записей, созданных иным путем, выполним для них такую же XML-замену, как при импорте.

Бывает, что на одном и том же сайте нужны разные последовательности автонабора. Например, Google повторно запрашивает пароль при некоторых операциях. В таких случаях поможет плагин AutoTypeShow: распакуем его в папку Plugins. Теперь, когда понадобится нестандартный автонабор, нажмем клавиши Ctrl+Alt+Shift+S и выберем запись из предложенных. В результате автонабора не произойдет: просто откроется KeePass с выбранной в нем записью, и мы сможем набрать нужное поле кнопкой [F].

Если один интернет-ресурс имеет несколько страниц авторизации с разными доменными именами, занесем эти домены в список экивалентных. Для этого в группе domains создадим новую запись или изменим существующую, перечислив в ее названии эквивалентные домены, разделенные знаком | без пробелов, без протокола и без префикса www. Также название должно начинаться и оканчиваться знаком |. Например: |yandex.ru|yandex.by|passport.yandex.ru|. Теперь глобальный автонабор будет работать, даже если в поле Ссылка указана страница passport.yandex.ru, а открыта www.yandex.by.

Списки эквивалентных доменов в KeePass

Как задать множество эквивалентных доменов регулярным выражением

Записи об эквивалентных доменах могут содержать не только однозначные имена, но и регулярные выражения. Регулярное выражение, задающее дополнительное множество доменов, записывается в поле «Логин» соответствующей записи.

При этом в поле «Название» должны быть явно перечислены все доменные имена, которые встречаются в поле «Ссылка» у различных учетных записей. Например, если в базе есть учетные записи со ссылками https://passport.yandex.ru/ и https://www.yandex.by/?ncrnd=1851, то для записи об эквивалентных доменах Яндекса подойдет название |passport.yandex.ru|yandex.by| и логин ((mail|passport)\.)?yandex\.(ru|by|ua|com).

Внимание! Регулярное выражение должно быть таким, чтобы ему соответствовали только доменные имена, иначе возникнет угроза фишинга. Например, выражение .*\.livejournal\.com неприемлемо, потому что ему соответствует адрес http://bad-site.com#www.livejournal.com. Более безопасный вариант, охватывающий поддомены 3-го уровня, — выражение [\w\-]*\.livejournal\.com. А чтобы одновременно охватить и сам домен livejournal.com, и все его поддомены всех уровней, подойдет выражение ([\w\-\.]*\.)?livejournal\.com.

Как изменить работу с эквивалентными доменами

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

Можно сделать так, чтобы каждый домен подходил всем своим поддоменам, т.е. чтобы любая запись вида http://example.com подходила странице http://sub.example.com. Для этого отредактируйте запись WindowAssociation:

  • пароль: //(?i) \W*(?:\w+\:\/\/)?(?:[\w\-\.]+\.)?(?=\w)(?:{{}T-REPLACE-RX:/{{}REF:T@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{{}T-REPLACE-RX:/{{}REF:U@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/^\{{}.*//})(?:[\:\/#]\S*)?\W* (?:{T-REPLACE-RX:/{USERNAME}/([^\w\s\|])/\$1/})$//
  • ссылка: //^(?i)(?:\w+\:\/\/)?(?:[\w\-\.]+\.)?(?=\w)(?:{{}T-REPLACE-RX:/{{}REF:T@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{{}T-REPLACE-RX:/{{}REF:U@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/^\{{}.*//})(?:[\:\/#]\S*)?$//

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

  • пароль: //(?i) \W*(?:\w+\:\/\/)?(?:[\w\-\.]+\.)?(?=\w)(?:{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!})(?:[\:\/#]\S*)?\W* (?:{T-REPLACE-RX:/{USERNAME}/([^\w\s\|])/\$1/})$//
  • ссылка: //^(?i)(?:\w+\:\/\/)?(?:[\w\-\.]+\.)?(?=\w)(?:{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!})(?:[\:\/#]\S*)?$//

Если вы используете для глобального автонабора только плагин WebAutoType, можно сделать пустым пароль в записи WindowAssociation, а если только браузерные расширения — ссылку. Это уменьшит задержки.

Как это настроено

В группе settings создана запись WindowAssociation, в ее поля Пароль и Ссылка соответственно вписаны значения:

//(?i) \W*(?:\w+\:\/\/)?(?:www\.)?(?=\w)(?:{{}T-REPLACE-RX:/{{}REF:T@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{{}T-REPLACE-RX:/{{}REF:U@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/^\{{}.*//})(?:[\:\/#]\S*)?\W* (?:{T-REPLACE-RX:/{USERNAME}/([^\w\s\|])/\$1/})$//

//^(?i)(?:\w+\:\/\/)?(?:www\.)?(?=\w)(?:{{}T-REPLACE-RX:/{{}REF:T@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{{}T-REPLACE-RX:/{{}REF:U@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/^\{{}.*//})(?:[\:\/#]\S*)?$//

В различных шаблонах записей задано два целевых окна автонабора (Автонабор → Добавить) с последовательностью по умолчанию и заголовками {T-REPLACE-RX:/{REF:P@T:WindowAssociation}/\{\{\}/{/} и ??:URL:{T-REPLACE-RX:/{REF:A@T:WindowAssociation}/\{\{\}/{/}.

Как получены эти значения

Предположим, в браузеры Pale Moon и K-Meleon установлены расширения, добавляющие адрес сайта в заголовок. Обычно такие расширения отделяют адрес от остальной части заголовка пробелами и размещают его в конце, перед названием браузера. Некоторые из расширений заключают адрес в скобки и т.п. В качестве адреса они могут брать как полный URL, так и голое имя хоста. В результате можно задать целевое окно автонабора следующим регулярным выражением:

//(?i) \W*(?:\w+\:\/\/)?(?:www\.)?(?=\w)(?:{T-REPLACE-RX:/{REF:T@T:|{T-REPLACE-RX:!{URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{T-REPLACE-RX:/{REF:U@T:|{T-REPLACE-RX:!{URL:HOST}!^www\.!!}|}/^\{.*//})(?:[\:\/#]\S*)?\W* (?:Pale Moon|K-Meleon)$//

Поясню построение этого выражения. Двойные слеши в начале и в конце сообщают KeePass'у, что строка является регулярным выражением. Код {T-REPLACE-RX:!{URL:HOST}!^www\.!!} отбрасывает от доменного имени префикс www, если он есть. Выражения {REF:T@T:|...|} и {REF:U@T:|...|} ищут запись, название которой содержало бы доменное имя, окруженное знаками |. Если запись найдется, то первое выражение превратится в название этой записи (т.е. в список доменов), а второе — в ее логин (т.е. в регулярное выражение, задающее множество доменов). Если запись не найдется, то выражения {REF:T@T:|...|} и {REF:U@T:|...|} останутся самими собой, и в этом случае выражение {T-REPLACE-RX:/.../^\{.*//} превратит результат поиска логина в пустую строку (в случае успешного поиска оно ничего не изменит). Выражение {T-REPLACE-RX:/.../([^\w\s\|])/\$1/} экранирует списке доменов все спецсимволы, кроме знака |. Получившиеся строки — явный список доменов и регулярное выражение — вместе заключаются в скобки, образуя группу. Код (?=\w) перед этой группой (вкупе с кодом после нее) предписывает выбирать из группы только строки, начинающиеся алфавитно-цифровым символом (таким образом исключаются пустые строки, а также обрывки кода, полученные при неудачном поиске: {REF:T@T: и }). Выражения (?:\w+\:\/\/)?(?:www\.)? и (?:[\:\/#]\S*)? позволяют опознавать адрес в заголовке независимо от того, содержит ли он протокол, префикс www, порт или путь. Фрагменты  \W* и \W*  означают, что адрес отделен от остальной части заголовка пробелами и, возможно, спецсимволами, наподобие скобок, дефисов и т.п. Коду (?:Pale Moon|K-Meleon)$ соответствует название браузера, расположенное в конце заголовка.

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

Для плагина WebAutoType целевое окно задается похожим выражением. Оно отличается знаком ^, указывающим на начало строки, а также отсутствием пробелов и разделителей \W* вокруг адреса и отсутствием названия браузера:

//^(?i)(?:\w+\:\/\/)?(?:www\.)?(?=\w)(?:{T-REPLACE-RX:/{REF:T@T:|{T-REPLACE-RX:!{URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{T-REPLACE-RX:/{REF:U@T:|{T-REPLACE-RX:!{URL:HOST}!^www\.!!}|}/^\{.*//})(?:[\:\/#]\S*)?$//

Чтобы не дублировать эти выражения в каждой записи, они размещены в полях Пароль и Ссылка специальной записи WindowAssociation, а в обычных записях целевые окна автонабора заданы ссылками на эти поля. Поскольку браузеры, заголовок которых содержит адрес, перечисляются в поле Логин этой записи, фрагмент Pale Moon|K-Meleon заменен выражением, которое ссылается на это поле и экранирует спецсимволы: {T-REPLACE-RX:/{USERNAME}/([^\w\s\|])/\$1/}. Чтобы в полях записи WindowAssociation не произошло преждевременных преобразований, символ { в выражениях заменен последовательностью {{}. Соответственно, к ссылкам на эти поля применено преобразование, восстанавливающее символ {. Таким образом, в обычных записях заголовок браузера, содержащий адрес страницы, задается выражением {T-REPLACE-RX:/{REF:P@T:WindowAssociation}/\{\{\}/{/}, а адресная строка, читаемая плагином WebAutoType, — выражением ??:URL:{T-REPLACE-RX:/{REF:A@T:WindowAssociation}/\{\{\}/{/}. Префикс ??:URL: в последнем выражении означает, что оно предназначено для этого плагина.

В параметрах группы domains отключен поиск и автонабор.

Во избежание фишинга в разделе Сервис → Настройка → Дополнительно → Автонабор отключены все четыре опции вида Считать запись подходящей.... Для перестраховки от случайного нажатия горячих клавиш включена опция Всегда показывать окно выбора записи для глобального автонабора.

Работу кнопки [G] обеспечивают триггеры и скрипт GlobalAutoTypeHelper.js. В уже имеющийся триггер Добавить кнопки на панель инструментов добавлено действие: Добавить кнопку... с идентификатором btn_GlobalAutoType, именем [G] и описанием Выполнить глобальный автонабор. Создан триггер Выполнить глобальный автонабор при нажатии на кнопку [G]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_GlobalAutoType,
  • действия:
    • Выполнить команду/ссылку:
      • файл/ссылка: %windir%\System32\wscript.exe,
      • аргументы: "{APPDIR}\GlobalAutoTypeHelper.js",
      • опция Ждать выхода включена;
    • Выполнить глобальный автонабор,

Скрипт GlobalAutoTypeHelper.js симулирует нажатие клавиш Alt+Esc, чтобы убрать окно KeePass'а на задний план, перезапускается, чтобы триггер перешел к следующему шагу (глобальному автонабору), а затем активизирует окно выбора записи. Код скрипта:

var WshShell = WScript.CreateObject("WScript.Shell");
if (WScript.Arguments.Count() == 0) {
	WScript.Sleep(100);
	WshShell.SendKeys("%{ESC}");
	WshShell.Exec("%windir%\\System32\\wscript.exe \"" + WScript.ScriptFullName + "\" 0");
} else {
	for (var attempt = 1; attempt != 20; ++attempt) {
		WScript.Sleep(500);
		if (WshShell.AppActivate("Выбор записи для автонабора")) {
			break;
		}
	}
}

Глобальному автонабору назначены горячие клавиши Ctrl+Alt+Shift+A (Сервис → Настройка → Интеграция), а глобальному поиску записи — Ctrl+Alt+Shift+S (в настройке плагина AutoTypeShow).

Операции с прикрепленными файлами

Любая запись в базе KeePass'а может содержать не только текстовую информацию, но и файлы (Дополнительно → Прикрепленные файлы). Разумеется, они хранятся зашифрованными, как и прочие данные. Прикрепленные файлы можно извлекать, сохраняя в отдельное место; можно извлекать во временный каталог с EFS-шифрованием, чтобы открывать и редактировать в сторонних программах. Более того, их можно просматривать в самом KeePass'е, не извлекая: встроенный просмотрщик KeePass'а умеет показывать изображения, html-страницы, текст в формате RTF, простой текст, причем в разных кодировках, а также двоичные файлы в HEX-виде.

К примеру, вы можете вложить в запись сканы документов, а затем просмотривать их через контекстное меню записи: Прикрепленные файлы → Имя_файла.

И это еще не все — KeePass имеет встроенный редактор форматированного текста! Можно редактировать RTF-файл, присоединенный извне, а можно создать его с нуля (Добавить → Прикрепить пустой файл). При создании указывается имя и расширение: в случае *.txt текст будет обычным, в случае *.rtf форматированным. Такой файл становится своеобразным полем, вмещающим большой объем текста, в т.ч. форматированного.

Как просмотр, так и редактирование файлов KeePass'ом выполняется в памяти, без извлечения их на диск.

Все ходы записаны

KeePass хранит не только текущее состояние ваших учетных данных, но и историю их изменений. В любой записи вы можете открыть вкладку История и просмотреть до 10 ее версий, а при необходимости и откатить запись к любой из них. (Кстати, записи <Генератор паролей> это тоже касается: если вы сгенерировали новый пароль, а нужно воспользоваться старым, то это легко сделать.)

Если какая-либо запись слишком объемна (имеет прикрепленные файлы), то история сохранит меньшее число ее версий: общим размером до 6 МБ.

Если вы удалите запись целиком — она всего лишь отправится в группу Корзина, откуда ее всегда можно перетащить обратно. Для безвозвратного уничтожения записи ее следует повторно удалить, когда она в Корзине.

Любые изменения базы сразу сохраняются на диске. (Опять же, это касается и записи <Генератор паролей>: каждое создание пароля немедленно фиксируется.) Если какая-либо запись открыта и редактируется, то изменения сохранятся после закрытия ее окна.

Перед каждым сохранением базы создается ее резервная копия. В папке Base\BackUp для каждой базы хранится 20 ее прежних версий.

Как изменить параметры сохранения, резервного копирования и хранения истории

При желании вы можете отказаться от создания резервных копий или автоматического сохранения базы. Откройте окно Сервис → Триггеры и измените триггер Создавать резервную копию перед сохранением или Автоматически сохранять изменения: отключите опцию Включен (другие параметры менять не нужно). Включение выполняется аналогично.

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

Вы можете изменить количество версий каждой отдельной базы, хранящихся в папке BackUp: оно задается логином записи <BackUp> в группе settings. Логин 0 отключает резервное копирование данной базы.

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

Параметры хранения истории и использования корзины задаются в настройке базы (Файл → Настройка базы паролей).

Если вы захотите облегчить базу, удалив из нее всю историю, — временно установите нулевой размер истории, выполните синхронизацию на всех устройствах, восстановите параметры истории и повторите синхронизацию.

Как это настроено

В базе параметры хранения истории и использования корзины оставлены по умолчанию. Чтобы задать число хранимых версий базы, создана запись <BackUp> с логином 20.

Для сохранения базы при каждом ее изменении в разделе Сервис → Триггеры создан триггер Автоматически сохранять изменения:

  • событие: Состояние интерфейса пользователя обновлено,
  • условия:
    • Строка:
      • строка: {DB_DIR},
      • операция: Равно,
      • значение: {APPDIR}{ENV_DIRSEP}Base;
    • база паролей содержит несохраненные изменения, база — Текущая;
  • действие: Сохранить текущую базу паролей.

Резервное копирование запускается триггером Создавать резервную копию перед сохранением:

  • событие: Сохранение файла базы паролей, фильтр оставлен пустым;
  • условия:
    • Строка:
      • строка: {DB_DIR},
      • операция: Равно,
      • значение: {APPDIR}{ENV_DIRSEP}Base;
    • Строка:
      • опция Отрицание включена,
      • строка: {REF:U@T:<BackUp>},
      • операция: Равно,
      • значение: 0;
    • существует файл {DB_PATH};
  • действие: Выполнить команду/ссылку:
    • файл/ссылка: %windir%\System32\wscript.exe,
    • аргументы: "{APPDIR}\BackUp.js" "{DB_NAME}" {T-REPLACE-RX:/{REF:U@T:<BackUp>}/^(.*\D.*|)$/20/},
    • опция Ждать выхода включена.

Копирование выполняет скрипт BackUp.js: он создает в папке Base\BackUp копию текущей базы, добавляя к имени текущее время, и удаляет старые ее версии. Имя базы и количество хранимых версий он получает в аргументах командной строки. Код скрипта:

(function() {
	if (WScript.Arguments.Count() != 2) {
		WScript.Echo("Использование: BaskUp.js <имя_файла> <количество_версий>");
		return;
	}
	var name = WScript.Arguments(0);
	var backUpCount = +WScript.Arguments(1);
	
	var appDir = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.length - WScript.ScriptName.length - 1);
	var baseDir = appDir + "\\Base";
	var backUpDir = baseDir + "\\BackUp";
	
	var FSO = WScript.CreateObject("Scripting.FileSystemObject");
	try {
		if (!FSO.FolderExists(backUpDir)) {
			FSO.CreateFolder(backUpDir);
		}
	} catch (e) {
		WScript.Echo("Невозможно создать каталог \"" + backUpDir + "\"");
		return;
	}
	var d = new Date();
	var toXX = function(x) {return x < 10 ? "0" + x : x;}
	var prefix = d.getFullYear() + "." + toXX(d.getMonth() + 1) + "." + toXX(d.getDate()) + "-" + toXX(d.getHours()) + "." + toXX(d.getMinutes()) + "." + toXX(d.getSeconds());
	try {
		FSO.CopyFile(baseDir + "\\" + name, backUpDir + "\\" + prefix + "-" + name);
	} catch (e) {
		WScript.Echo("Невозможно создать резервную копию файла \"" + baseDir + "\\" + name + "\"");
		return;
	}
	try {
		var files = [];
		for (var en = new Enumerator(FSO.GetFolder(backUpDir).Files); !en.atEnd(); en.moveNext()) {
			if (en.item().Name.indexOf("-" + name) == prefix.length) {
				files[files.length] = en.item();
			}
		}
		files.sort(function(f1, f2) {
			if (f1.Name < f2.Name)
				return -1;
			if (f1.Name > f2.Name)
				return 1;
			return 0;
		});
		for (var i = 0; i < files.length - backUpCount; ++i) {
			files[i].Delete();
		}
	} catch (e) {
		WScript.Echo("Невозможно удалить старые версии");
		return;
	}
})();

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

  • файл/ссылка: %comspec%,
  • аргументы: /c "copy "{DB_PATH}" "{DB_DIR}\BackUp\{DT_SIMPLE}-{DB_NAME}"& for /f "skip={T-REPLACE-RX:/{REF:U@T:<BackUp>}/^(.*\D.*|)$/20/} tokens=*" %X in ('dir "{DB_DIR}\BackUp\*-{DB_NAME}" /b /o:-n') do del "{DB_DIR}\BackUp\%X" /q",
  • опция Ждать выхода включена;
  • стиль окна: Скрытое.

Данные триггеры работают только для баз, расположенных непосредственно в папке Base.

Дополнительная настройка защиты

Ваш мастер-пароль по-настоящему сложен? Уверены, что даже часть его никогда не попадет в хакерские словари? Прибегнем к небольшой подстраховке: в свойствах базы (Файл → Настройка базы паролей → Безопасность) увеличим количество циклов шифрования. Там же его можно рассчитать, чтобы не перегнуть палку, сделав открытие и сохранение базы чересчур медленным. С учетом частого сохранения базы и ее использования на мобильных устройствах, я выставил миллион. Таким образом, KeePass способен усилить защиту небезупречных паролей. Но злоупотреблять этим не будем: сложность и секретность мастер-пароля — наше все.

Чтобы затруднить кражу данных из самой программы, в ней запрещены некоторые опасные операции. Для этого в окне Сервис → Настройка → Политика отключены опции: Экспорт без пароля, Печать, Печать без пароля, Копирование всех записей и Основной пароль — без пароля.

Во избежание кражи паролей из памяти KeePass'а, он настроен на завершение своей работы вместо блокировки базы (Сервис → Настройка → Безопасность → Всегда выходить вместо блокирования).

Также программа настроена на блокировку (вернее, на выход) после 5 минут общего бездействия, при переключении пользователя, при переходе в спящий режим и при изменении режима удаленного доступа (Сервис → Настройка → Безопасность). На вкладке Внешний вид установлено нулевое значение опции Запоминать недавно использованные файлы.

Импорт базы паролей

Если вы уже пользуетесь каким-нибудь менеджером паролей, в т.ч. KeePass'ом, то, скорее всего, накопили большую базу паролей. Их нетрудно перенести в нашу новую базу.

Экспортируем пароли из прежнего менеджера в файл, а затем откроем KeePass и импортируем этот файл в предложенную базу (Файл → Импорт). При этом важно правильно указать формат файла и каким менеджером паролей он был создан. Если KeePass спросит о способе импорта, выберем вариант Новые идентификаторы.

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

  1. создадим в базе группу toImprove;
  2. переместим в эту группу все записи, для которых нужно активировать усложнение автонабора и глобальный автонабор (можно перетаскивать как записи, так и целые группы с подгрупами);
  3. чтобы включить усложнение автонабора, откроем окно Сервис → Сервис базы паролей → XML-замена и выполним замену с параметрами:
    • Узлы дерева: //Group[Name="toImprove"]//Entry/AutoType/DataTransferObfuscation
    • Действие: Заменить данные
    • Данные: Текст
    • Искать: 0
    • Заменить на: 1
  4. чтобы настроить записи для глобального автонабора, откроем это же окно и выполним замену с параметрами:
    • Узлы дерева: //Group[Name="toImprove"]//Entry/AutoType
    • Действие: Заменить данные
    • Данные: Внешний XML
    • Искать: </AutoType>\Z
    • Заменить на: <Association><Window>{T-REPLACE-RX:/{REF:P@T:WindowAssociation}/\{\{\}/{/}</Window><KeystrokeSequence /></Association><Association><Window>??:URL:{T-REPLACE-RX:/{REF:A@T:WindowAssociation}/\{\{\}/{/}</Window><KeystrokeSequence /></Association></AutoType>
    • опция Регулярное выражение включена;
  5. расформируем группу toImprove: переместим записи Google в группу 2-страничные, записи Mail.ru в одноименную группу, другие почтовые записи в группу Почта и т.д.;
  6. удалим или переименуем группу toImprove.

Импорт данных в KeePass

Комментарии и отзывы

Добавляя комментарий, ознакомьтесь с Правилами сообщества