Проверка пакетов
Содержимое зеркал подписано с использованием ключей PGP, прямо или косвенно. Начиная с «корня» дистрибутива Debian:
Release
, подписанный отдельной подписью Release.gpg
, содержит хэши (MD5, SHA1, SHA256) всех индексов пакетов и хэши установщика ( InRelease
теперь объединяет оба);
- индексы пакетов ( например ,
binary-amd64
) содержат хэши (MD5 и SHA256) пакетов.
Хеши и подписи проверяются такими инструментами, как apt-get
использование ключей PGP, хранящихся в системе (управляемых apt-key
). Таким образом, до тех пор, пока принимающая система работает нормально, по умолчанию ни один пакет не может быть установлен из архивов Debian, если он не был подписан (косвенно) ключом PGP архива. Любой злоумышленник на зеркалах не сможет заменить двоичные файлы, если они также не контролируют соответствующий ключ PGP.
Управление зеркалами
Это означает, что компрометация архива недостаточна для фактической компрометации систем конечного пользователя; Вам также необходимо скомпрометировать ключ PGP, которому эти системы уже доверяют. (Следствием этого является то, что добавление ключа в систему Debian не следует воспринимать легкомысленно.) Это в какой-то степени решает ваш первый вопрос, поскольку безопасность архива не имеет большого значения. Тем не менее, критические системы (где происходит подписание) строго контролируются и контролируются, и очень немногие люди имеют к ним доступ.
Ожидания сопровождающего
Обеспечение того, что пакеты «фактически являются теми, о которых думают сопровождающие», немного сложнее. Это путь, по которому идет пакет:
- пакет готовится сопровождающим и подписывается ключом в наборе ключей Debian ( т. е. ключом, принадлежащим загружающему разработчику Debian или сопровождающему Debian, загружаемым на сервер ключей Debian и объединяемым группой обслуживания связок ключей);
- подписанный пакет загружается в архив, где он проверяется (среди прочего, используемые ключи должны находиться в текущем наборе ключей и не должны истекать, подписи должны быть действительными, и если пакет был подписан DM, то DM должен иметь соответствующие разрешения для пакета);
- все загруженные двоичные файлы помещаются в окончательный архив как есть (я немного упрощаю здесь, но это эффект);
- любые отсутствующие двоичные файлы создаются buildd и подписываются ключом PGP buildd и передаются в окончательный архив (который знает, какие ключи buildd являются действительными, и проверяет файлы по ним);
- все эти обновления в конечном итоге отправляются в зеркальную сеть с соответствующими обновлениями индекса (которые подписаны, как описано выше).
Если сопровождающий загружает двоичные файлы вместе с источником пакета, это файлы, которые в конечном итоге обслуживаются (на данный момент). Поскольку загрузка двоичных файлов теперь является необязательной, их все чаще и чаще пропускают, и в конечном итоге загруженные двоичные файлы будут удалены. (Это всегда имело место в Ubuntu.) Соответствуют ли другие двоичные файлы ожиданиям сопровождающего, зависит от сети buildd; поэтому buildd также являются критически важными системами, находящимися под пристальным наблюдением и с ограниченным доступом людей. Поскольку все артефакты подписаны, всегда можно проверить целостность файлов: сначала по ключу сопровождающего, затем по ключам buildds и, наконец, по ключу архива.
Как указывает plugwash , оригинальные зеркала не доступны на зеркалах, и любой DD может загрузить отсутствующий двоичный файл. Оригинальные подписи могут быть получены из архивов debian-devel-changes .
Таким образом , хотя текущая система не идеальна, она обеспечивает отслеживаемость всех файлов, которые можно загрузить с зеркал. Есть несколько попыток улучшить ситуацию: воспроизводимые сборки (которые позволят независимую проверку соответствия двоичных файлов опубликованному источнику), удаление предоставленных сопровождающими двоичных файлов ...
apt-get
проверяет пакеты, используя эти локальные предварительно встроенные ключи, потому что они доверяют им?debian-archive-keyring
упаковке.apt-get
проверяетRelease
файлы , используя эти ключи, и пакеты , используя хэш , содержащиеся вRelease
иPackages
файлах.