Перейти к основному содержимому
Проверка подлинности пакетов

Проверка подлинности пакетов

SelectOS предоставляет механизм проверки того, что пакет действительно пришел от официального мейнтейнера и не был модифицирован третьей стороной. Проверка происходит в процессе установки пакета. Этот механизм подробно описан в man apt-secure(8)

Зачем это

Если взломщик добавит в пакет вредоносный код и такой пакет будет установлен в систему, он сможет выполнять любые действия, задуманные взломщиком, в том числе кражу паролей и конфиденциальной информации. Для обеспечения безопасности сервера рекомендуется устанавливать только те пакеты, которые гарантированно получены из репозиториев SelectOS и не были подменены по пути.

Механизм использует цепочку криптографических хеш-функций и подпись. Подписанный файл в репозитории называется InRelease. Он содержит список файлов Packages и их SHA256-хеши, что позволяет убедиться, что файлы не были подменены. Пакетный менеджер apt использует набор доверенных публичных ключей GnuPG, чтобы проверить подписи в файле InRelease репозитория.

Публичные ключи загружаются:

  • из файлов в /usr/share/keyrings.d/,
  • из хранилища ключей /usr/share/keyrings/.

Для управления хранилищем ключей используется команда apt-key.

В установку включен официальный ключ репозитория SelectOS.

Добавление доверенных ключей

При добавлении стороннего репозитория в sources.list необходимо настроить доверие между apt и соответствующим GPG-ключом. Если доверие не настроено, apt не может проверить подлинность пакетов из этого источника и выдает соответствующие сообщения.

  1. Получить публичный ключ. Как правило, ключ содержится в текстовом файле, например, key.gpg.
  2. Добавить ключ в хранилище — сохранить его в директории /usr/share/keyrings/.

После добавления ключей в хранилище, apt будет проверять подписи перед любыми потенциально опасными операциями, и система будет показывать предупреждения перед установкой сомнительных пакетов.

Бинарные пакеты обычно не подписаны. Их подлинность подтверждается только сверкой контрольных сумм с данными из доверенного источника.

осторожно

Возможная проблема

При сохранении ключей в /etc/apt/trusted.gpg.d/ apt не имеет соответствия между ключами и репозиториями. Если один из ключей в хранилище соответствует подписи пакета, apt считает пакет подлинным.

Таким образом, если хранилище содержит ключ от злоумышленника, он может распространить свой вариант чужого репозитория, подписанный этим ключом.

Поэтому в SelectOS ключи хранятся только в /usr/share/keyrings/.

к сведению

Рекомендуется:

  • помещать файлы *.gpg в /usr/share/keyrings/
  • использовать поле Signed-By в sources.list для всех сторонних репозиториев, как показано в примере ниже.

Пример

Есть собственный публичный репозиторий компании. Компания подписывает его и размещает публичный ключ для загрузки. Чтобы ключ действовал только для репозитория компании, нужно выполнить команды:

sudo wget -O my-keyring.gpg -P /usr/share/keyrings https://apt.example.com/my-keyring.gpg
deb [ signed-by=/usr/share/keyrings/my-keyring.gpg ] https://apt.example.com/ selectos main

Неподписанные репозитории

Для работы apt с неподписанным репозиторием, перед URL репозитория нужно указать:

  • allow-insecure=yes, или
  • trusted=yes.

Пример записи:

deb [ trusted=yes ] https://apt.example.com updates/
deb [ trusted=yes ] https://apt.example.com internal/

Неподписанные репозитории стоит использовать, только если вы доверяете источнику.