fix(security): harden diagnostics storage boundary
This commit is contained in:
@@ -254,7 +254,7 @@ preflight-ошибка со словом `nftables` приводила к отк
|
||||
него нельзя ни при одном взведённом флаге, включая `stateTouched`. В этом
|
||||
случае system rollback не выполняется, `install-state.json` не пишется,
|
||||
diagnostics-бандл не собирается (его сбор сам создал бы каталоги в
|
||||
`/var/log/hy2xs`).
|
||||
`/var/lib/hy2xs/diagnostics`).
|
||||
- `systemctl stop/disable` выполняется **только если текущая операция сама
|
||||
развернула эти unit-файлы**.
|
||||
|
||||
@@ -695,7 +695,15 @@ Diagnostics не копирует env/YAML и не перенаправляет
|
||||
редакцию и лишь затем записываются с режимом `0600`. Некорректный UTF-8 в
|
||||
конфигурационном файле даёт безопасный маркер пропуска без исходных байтов.
|
||||
Вывод каждой внешней команды ограничен 8 МиБ на поток и при усечении явно
|
||||
помечается; архив создаётся сразу под `umask 077`.
|
||||
помечается.
|
||||
|
||||
Staging и архив лежат только в `/var/lib/hy2xs/diagnostics`, а не в
|
||||
service-writable `HY2XS_LOG_DIR`. Родитель проверяется через `lstat`: symlink,
|
||||
не-root владелец, доступ на запись для группы/остальных или режим дочернего
|
||||
каталога не `0700` останавливают сбор fail closed. Рабочий каталог получает
|
||||
непредсказуемое имя через `mkdtemp`, archive path заранее резервируется через
|
||||
эксклюзивный `open("wx")`, итоговый файл проверяется как обычный
|
||||
`root:root 0600`. После успешной упаковки staging удаляется.
|
||||
|
||||
Это не косметика. Построчное правило `auth:\s*(.*)` подставляло маркер в
|
||||
заголовок mapping'а и оставляло нетронутым вложенный
|
||||
|
||||
Reference in New Issue
Block a user