Проверка подлинности пакетов
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 не может проверить подлинность пакетов из этого источника и выдает соответствующие сообщения.
- Получить публичный ключ. Как правило, ключ содержится в текстовом файле, например,
key.gpg
. - Добавить ключ в хранилище — сохранить его в директории
/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/
Неподписанные репозитории стоит использовать, только если вы доверяете источнику.