Проверка SHA256¶
В закрытом контуре целостность поставки подтверждается контрольными суммами
SHA256. Рядом с каждым архивом публикуется файл SHA256SUMS; те же суммы
публикуются на странице релиза. Цифровых подписей нет — только хеш.
Что подтверждает SHA256
Совпавший хеш означает, что файл не изменился при переносе. Он не
подтверждает авторство: если злоумышленник заменил и архив, и SHA256SUMS,
проверка это не обнаружит. По возможности сверяйте сумму по двум независимым
источникам (например, GitHub Releases и внутреннее зеркало) и храните
эталонную сумму отдельно от архива.
Где взять эталонные суммы¶
- рядом с архивом — файл
SHA256SUMS; - на странице релиза GitHub —
https://github.com/itphx/synth/releases/tag/v<version>; - на странице релиза GitVerse —
https://gitverse.ru/itphx/synth/releases.
GitHub Releases — канонический источник ассетов. В GitVerse публикуются ссылки
на релиз, реестр Docker/Helm и — best-effort — сами ассеты: API GitVerse может
отвечать 500, поэтому отсутствие файла там не означает, что релиз не вышел.
Если ассет недоступен в GitVerse, берите его из GitHub Releases.
Linux¶
Перейдите в каталог с архивом и файлом SHA256SUMS:
Для одного файла:
Ожидаемый результат — строка с именем файла и OK. Команда sha256sum входит
в coreutils и есть во всех поддерживаемых дистрибутивах.
macOS¶
В macOS нет sha256sum; используйте shasum:
Для одного файла:
Для Intel используйте synth-<version>-darwin-x64.tar.gz.
Windows¶
PowerShell, один файл:
Сверьте вывод с соответствующей строкой SHA256SUMS вручную. Проверка всего
файла сумм:
Get-Content .\SHA256SUMS | ForEach-Object {
$expected, $file = $_ -split '\s+\*?', 2
$actual = (Get-FileHash -Path $file -Algorithm SHA256).Hash
if ($actual -ne $expected.ToUpper()) {
Write-Error "FAIL: $file"
} else {
"OK: $file"
}
}
Альтернатива без PowerShell:
certutil выводит хеш в верхнем регистре без разделителей — сравнивайте с
SHA256SUMS с учётом регистра.
Allowlist по хешу¶
Если в контуре используется allowlist приложений, заносите туда хеш конкретного артефакта, а не имя файла или каталог:
| Среда | Как ограничить запуск |
|---|---|
| Linux | Пакетная политика (например, fapolicyd) или allowlist в системе управления конфигурацией по SHA256 |
| macOS | Политика MDM (PPPC/Application Management) по хешу или пути; для локальной машины — одобрение конкретного приложения |
| Windows | WDAC или AppLocker: правило по хешу файла; SmartScreen не отключать глобально |
| Контейнеры | Проверка digest загруженного образа, если образ переносился через реестр |
Хеш меняется с каждым релизом
При обновлении бандла обновляйте и allowlist. Не добавляйте в исключения целые каталоги или шаблоны имён — это сводит проверку к нулю.
Предупреждения macOS Gatekeeper¶
Если архив скачан из сети, macOS может пометить его карантином. При запуске появляется сообщение вида «Synth cannot be opened because the developer cannot be verified».
Что делать:
- Проверьте SHA256 архива и распакованных файлов.
- Убедитесь, что путь установки совпадает с ожидаемым.
-
Для локального запуска одобрите конкретный артефакт средствами macOS, если это разрешено политикой организации. Не снимайте карантин рекурсивно с каталогов и не отключайте Gatekeeper.
-
В управляемом парке добавьте приложение в allowlist MDM по хешу/пути.
Не отключайте Gatekeeper глобально
spctl --master-disable и отключение SIP снижают защиту всей машины. Для
закрытого контура добавьте конкретный артефакт в allowlist по хешу (MDM) или
одобрите его средствами ОС, если это разрешено политикой.
Предупреждения Windows SmartScreen¶
Так как установщик и бинарники не подписаны, SmartScreen может показать «Windows protected your PC».
Что делать:
- Проверьте SHA256 архива.
- В управляемом парке используйте allowlist WDAC/AppLocker по хешу.
- Локальное одобрение запуска — только если это разрешено политикой организации, после проверки хеша.
Не отключайте SmartScreen и Defender глобально
Постоянное отключение защиты или добавление всего каталога в исключения не является способом установки. Если политика организации запрещает запуск неподписанных файлов, согласуйте allowlist по хешу с ИБ.
Если сумма не совпала¶
- Не запускайте файл.
- Повторите перенос: проверьте, не изменился ли размер архива, не оборвалась ли передача.
- Сверьте сумму с другим источником (GitHub Releases, внутреннее зеркало).
- Если сумма расходится на двух источниках — обратитесь к поставщику сборки: это признак повреждения или подмены.