Record in the zone journal the rule a leaked key bought: a mechanism that aggregates a directory outward must carry a list of what it never takes, and that list starts with secrets
This commit is contained in:
parent
7e2226a96e
commit
4230b5e672
1 changed files with 32 additions and 0 deletions
|
|
@ -86,6 +86,38 @@ cannot be spawned on this host`. Приёмка разделена и обе п
|
|||
зоны — верно, обе в секции «Открытые — major» с весом `**major**`. Пропуск сознателен, спорить не с
|
||||
чем.
|
||||
|
||||
### ⛔ ПРАВИЛО, КУПЛЕННОЕ УТЕЧКОЙ КЛЮЧЕЙ: то, что уезжает С ХОСТА, не везёт секретов
|
||||
|
||||
⚠ **Отдельной секцией по просьбе оркестратора, и просьба верная: следующий помощник предложит ровно
|
||||
то же самое.** Ниже — не история починки, а правило, которое надо знать ДО того, как писать копир.
|
||||
|
||||
**Что было.** Первая редакция `internal/backup` копировала каталог книги «целиком, кроме `backups/`».
|
||||
Каталог книги по КОНВЕНЦИИ ДВИЖКА может содержать `.env` рядом с `book.yaml` — файл ПРОВАЙДЕРСКИХ
|
||||
КЛЮЧЕЙ (`backend/cmd/tmctl/main.go`, греп `loadDotEnv`). А раздел «Бэкап и восстановление» того же
|
||||
пака велит оператору увозить каталог точек ПРОЧЬ С ХОСТА. ⇒ механизм, построенный ради переживания
|
||||
потери диска, увозил бы ключи деплоя туда, куда уезжают бэкапы, **по расписанию, каждые шесть часов**.
|
||||
|
||||
**Почему это не поймал никто раньше.** Ни один гейт зоны такого не видит: батарея зелёная, линтер
|
||||
чист, `govulncheck` не про это, а норма `ENGINEERING_STANDARDS` §«Безопасность» говорит «секреты не
|
||||
попадают в репо и в логи» — про КОПИЮ КАТАЛОГА там нет ничего, потому что до этого пака зона ничего
|
||||
никуда не копировала. Нашёл Fable-помощник чтением, я подтвердил по коду движка и запинил.
|
||||
|
||||
**Правило, которое из этого следует — шире бэкапов:**
|
||||
> Любой механизм, который АГРЕГИРУЕТ чужой каталог и отдаёт результат наружу (бэкап, экспорт,
|
||||
> диагностический архив, «пришлите логи»), обязан иметь СПИСОК ТОГО, ЧТО НЕ БЕРЁТ, и этот список
|
||||
> обязан начинаться с секретов. «Копируем всё, кроме известного мусора» — неверная форма по
|
||||
> построению: она безопасна ровно до следующего файла, который кто-то положит рядом.
|
||||
|
||||
**Как это выглядит в коде сейчас:** дотфайлы не копируются вовсе, и каждый пропуск ИМЕНУЕТСЯ в
|
||||
манифесте (`books[].not_copied`) с причиной — чтобы через полгода читатель не выводил правило из
|
||||
того, что уцелело. Пин ищет ключ ПО ФАЙЛАМ ТОЧКИ, а не по манифесту:
|
||||
`TestProviderKeysBesideABookAreNeverCopiedAndTheOmissionIsRecorded` — то есть он краснеет и на
|
||||
починке, которая «записала, что пропустила», но всё-таки скопировала.
|
||||
⚠ И обратная половина того же правила: **исключать по расширению — тоже ловушка.** «Не брать `*.db`»
|
||||
съедало ИСХОДНИК книги, загруженной как `novel.db` (интейк хранит расширение пользователя дословно) —
|
||||
найдено воркфлоу-ревью, разбор в секции о пяти выживших. Список исключений опасен в обе стороны, и
|
||||
обе стороны обязаны быть запинены.
|
||||
|
||||
### Батарея и гейты
|
||||
|
||||
```
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue