Документация

Хранение паролей

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

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

Как это выглядит

Ссылка на секрет показывается ключом — чипом прямо в предложении:

Подключаемся к базе под пользователем deploy, пароль — 🔑 прод-база · 1Password.

На чипе две вещи: подпись (её пишете вы) и название хранилища (его узнаём мы по адресу). Ссылка, стоящая отдельным абзацем, становится карточкой — для «главного секрета этой страницы».

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

Important

Подпись видна всем, кто видит страницу Называйте секрет по назначению, а не по содержимому: «прод-база», а не «пароль Пети от 1С». Скрыть подпись нельзя: иначе пришлось бы хранить её у нас, а мы секретов не храним.

Попробуйте

Ниже — настоящие ключи на демо-хранилище Hivelore. Значения за ними выдуманные.

Подключаемся к тестовой базе под пользователем demo_reader, пароль — 🔑 тестовая база. Для проверки оплаты нужен ключ песочницы — 🔑 платёжная песочница.

А так выглядит карточка:

🔑 гостевой Wi-Fi офиса

Демо-ключи открываются без входа, потому что сделаны ссылками «поделиться» (Bitwarden Send), — иначе посмотреть было бы нечем. Для настоящих секретов так не делайте, почему — ниже, в «Какие хранилища узнаются сами».

Как вставить

  • Вставьте ссылку. Скопируйте в менеджере паролей адрес записи и вставьте в текст — ссылка на знакомое хранилище сразу станет ключом, подписью станет сам адрес.
  • Командой /секрет. Откроется окно на два поля: «Ссылка в менеджере паролей» и «Подпись». Хвост команды сразу становится подписью: /секрет прод-база. Окно говорит, узнало ли оно хранилище, — «Узнали хранилище: 1Password» или «Хранилище незнакомое — пометим ссылку ключом». Та же команда отзывается на /пароль, /secret, /password, /vault и /ключ.

/секрет в пустой строке вставляет карточку, внутри текста — чип.

Если страницу можно править, у ключа при наведении появляется панель «Открыть · Изменить · Убрать»: «Изменить» открывает то же окно с заполненными полями, «Убрать» удаляет ключ из текста (вернёт Ctrl+Z). На сенсорном экране в режиме правки касание ключа показывает панель, а не уводит в хранилище.

Какие хранилища узнаются сами

Хранилище По чему узнаём
1Password ссылка на запись вида …/open/i?…i=… — на любом домене, включая командные
Bitwarden облачные bitwarden.com и bitwarden.eu
Vaultwarden и свой Bitwarden ссылка на запись вида …/#/vault?…itemId=… — на любом домене
Keeper keepersecurity.com и региональные домены, ссылка на запись …/vault#detail/…
Proton Pass pass.proton.me/…/item/…
Passbolt …/app/passwords/view/… — на любом домене
Yandex Lockbox …/lockbox/secret/…
HashiCorp Vault …/ui/vault/secrets/… — на любом домене

Одноразовые ссылки «поделиться» не узнаются намеренно. Такая ссылка сама открывает секрет без входа — то есть она и есть пароль, и место ей не в базе знаний.

LastPass, Dashlane и Zoho Vault не дают ссылки на отдельную запись веб-сейфа, поэтому в списке их нет. Для них и для любого другого хранилища — список проекта или /секрет.

Свой менеджер паролей проекта

Если команда пользуется хранилищем на своём домене — Пассворком, собственным Vaultwarden, корпоративным Vault, — назовите его проекту, и ссылки на него станут ключами сами, с вашим названием на чипе.

Настройки → Проект → «Менеджеры паролей». Раздел видит только владелец проекта. На каждое хранилище — строка из двух полей:

  • Название — то, что будет написано на чипе: «Пассворк компании». До 60 знаков.
  • Начало адреса — общая часть всех ссылок на записи: https://pass.example.ru/vault. Полный адрес с https://, без ? и #.

Как сравнивается:

  • По началу адреса с учётом границы пути. https://corp.ru/pass совпадёт с https://corp.ru/pass/…, но не с https://corp.ru/passport. Поэтому «весь домен» не превращается в секреты, если вы указали путь.
  • Список проекта проверяется раньше встроенного. Свой Vaultwarden под названием «Хранилище R&D» будет подписан вашим названием, а не общим «Vaultwarden».
  • Из нескольких совпавших побеждает самое длинное начало адреса.
  • Название на чип не записывается, а подставляется при показе. Переименовали хранилище в настройках — переименовались все чипы. Удалили строку — уже вставленные ключи остаются ключами, только без названия.

Записей — не больше 20. Изменения списка пишутся в журнал.

Если пароль всё-таки набрали текстом

Редактор замечает пароль в тексте и подсказывает, пока вы ещё на этой строке. Что он ловит:

  • пару «имя — значение»: password: …, пароль = …, DB_PASSWORD=…, token, api_key, client_secret, ключ: и похожие;
  • известные форматы ключей: токены GitHub, ключи OpenAI и AWS, приватные ключи -----BEGIN … PRIVATE KEY-----, JWT;
  • строку подключения с паролем внутри: postgres://user:пароль@host;
  • длинную случайную строку, похожую на сгенерированный пароль.

Плейсхолдеры (<пароль>, ***, changeme), ссылки на переменные (${DB_PASSWORD}) и строки со словом «например» он пропускает: ложная тревога здесь дороже пропуска.

Реакция в две ступени, и ни одна не мешает писать:

  1. Плашка у строки: «Похоже на пароль в тексте… Не храните его в тексте — вставьте ссылку на менеджер паролей» с кнопками «Вставить ссылку» и «Скрыть». Плашка одна на страницу и уходит сама, когда пароль пропал из текста.
  2. Вопрос после сохранения, один раз за открытие страницы: «В тексте страницы остался пароль» — «Вставить ссылку» или «Оставить как есть». Текст к этому моменту уже сохранён: модальное окно посреди набора стоило бы недописанного абзаца.

Проверка идёт целиком в вашем браузере. На сервер не уходит ни найденная строка, ни сам факт находки.

Warning

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

Кто ходил за паролем

Переход по ключу пишется в журнал строкой «Переход по ссылке на секрет»: кто, когда, с какой страницы, подпись и хранилище. Адрес записи в журнал не попадает.

Событие названо честно — переход по ссылке, а не «раскрытие секрета»: получил человек пароль или упёрся в отказ хранилища, мы не знаем и знать не можем.

Что видит гость

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

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

Как хранится

Обычной markdown-ссылкой со знаком ключа в подписи:

[🔑 прод-база](https://start.1password.com/open/i?a=…&v=…&i=…)

Выгруженный .md остаётся рабочим и вне Hivelore. Знак 🔑 — пометка «это секрет»: по ней ссылка на незнакомое хранилище остаётся ключом после сохранения. Название хранилища в текст не пишется.

Нет менеджера паролей

Hivelore работает с любым менеджером паролей: облачным или установленным на вашем сервере. Какой выбрать и как его развернуть — решение вашей команды и ваших требований к безопасности; мы не рекомендуем конкретный продукт или способ установки. Командные планы облачных менеджеров обычно платные, у части менеджеров есть бесплатные личные планы или серверные версии.

Пример установки своего сервера — Свой Vaultwarden. Это только пример: он не единственный и не рекомендуемый, и за его реализацию Hivelore ответственности не несёт.