Хранение паролей
В базу знаний рано или поздно попадают пароли. Человек пишет инструкцию по выкату, и пароль от базы оказывается в тексте: так быстрее, а другого способа ему никто не предложил.
Hivelore предлагает другой способ: в тексте стоит ссылка на запись в вашем менеджере паролей, а сам пароль остаётся там. Сами мы секретов не храним ни в каком виде.
Как это выглядит
Ссылка на секрет показывается ключом — чипом прямо в предложении:
Подключаемся к базе под пользователем
deploy, пароль — 🔑 прод-база · 1Password.
На чипе две вещи: подпись (её пишете вы) и название хранилища (его узнаём мы по адресу). Ссылка, стоящая отдельным абзацем, становится карточкой — для «главного секрета этой страницы».
Клик открывает запись в менеджере паролей в новой вкладке. Дальше работает вход самого менеджера: у кого там есть доступ к записи, тот увидит пароль, у кого нет — увидит отказ. Своих прав у ключа нет: кто видит страницу, видит чип и подпись; кто имеет доступ в хранилище, видит секрет.
Important
Подпись видна всем, кто видит страницу Называйте секрет по назначению, а не по содержимому: «прод-база», а не «пароль Пети от 1С». Скрыть подпись нельзя: иначе пришлось бы хранить её у нас, а мы секретов не храним.
Попробуйте
Ниже — настоящие ключи на демо-хранилище Hivelore. Значения за ними выдуманные.
Подключаемся к тестовой базе под пользователем demo_reader, пароль — 🔑 тестовая база. Для проверки оплаты нужен ключ песочницы — 🔑 платёжная песочница.
А так выглядит карточка:
Демо-ключи открываются без входа, потому что сделаны ссылками «поделиться» (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}) и строки со словом «например» он пропускает: ложная тревога здесь дороже пропуска.
Реакция в две ступени, и ни одна не мешает писать:
- Плашка у строки: «Похоже на пароль в тексте… Не храните его в тексте — вставьте ссылку на менеджер паролей» с кнопками «Вставить ссылку» и «Скрыть». Плашка одна на страницу и уходит сама, когда пароль пропал из текста.
- Вопрос после сохранения, один раз за открытие страницы: «В тексте страницы остался пароль» — «Вставить ссылку» или «Оставить как есть». Текст к этому моменту уже сохранён: модальное окно посреди набора стоило бы недописанного абзаца.
Проверка идёт целиком в вашем браузере. На сервер не уходит ни найденная строка, ни сам факт находки.
Warning
Пароль, оставленный в тексте, уходит дальше страницы Он попадает в поиск, в ответы ассистента, в историю правок и в выгрузки. Стереть его из текста мало — он останется в истории версий. Если пароль был настоящим, его надёжнее сменить.
Кто ходил за паролем
Переход по ключу пишется в журнал строкой «Переход по ссылке на секрет»: кто, когда, с какой страницы, подпись и хранилище. Адрес записи в журнал не попадает.
Событие названо честно — переход по ссылке, а не «раскрытие секрета»: получил человек пароль или упёрся в отказ хранилища, мы не знаем и знать не можем.
Что видит гость
Гость по ссылке и читатель публичного сайта документации видят тот же ключ: подпись, название хранилища и рабочую ссылку. Панели правки у них нет, переход в журнал не пишется. Пароль им откроет только сам менеджер паролей — если у них там есть доступ.
Список менеджеров проекта наружу не отдаётся. Поэтому ссылка на хранилище из этого списка у гостя станет ключом, только когда страницу хотя бы раз сохранили после того, как вставили ссылку: при сохранении знак 🔑 попадает в текст, и по нему ключ узнаётся уже без списка.
Как хранится
Обычной markdown-ссылкой со знаком ключа в подписи:
[🔑 прод-база](https://start.1password.com/open/i?a=…&v=…&i=…)
Выгруженный .md остаётся рабочим и вне Hivelore. Знак 🔑 — пометка «это секрет»: по ней ссылка на незнакомое хранилище остаётся ключом после сохранения. Название хранилища в текст не пишется.
Нет менеджера паролей
Hivelore работает с любым менеджером паролей: облачным или установленным на вашем сервере. Какой выбрать и как его развернуть — решение вашей команды и ваших требований к безопасности; мы не рекомендуем конкретный продукт или способ установки. Командные планы облачных менеджеров обычно платные, у части менеджеров есть бесплатные личные планы или серверные версии.
Пример установки своего сервера — Свой Vaultwarden. Это только пример: он не единственный и не рекомендуемый, и за его реализацию Hivelore ответственности не несёт.