Что было. Две связанные истории. В первой при apt-get update предупреждение: The key(s) in the keyring /etc/apt/trusted.gpg.d/vendor.asc are ignored as the file is not readable by user '_apt' (или просто «ignored»). Во второй администратор перенёс ключ из trusted.gpg.d в /usr/share/keyrings/, но apt отверг файл.
Причины.
/etc/apt/trusted.gpg.d/это устаревшее место: ключи оттуда доверяются всем репозиториям сразу, поэтому новые версии apt предупреждают о них, а источники в формате deb822 их не используют, если указанSigned-By. Ключи, на которые не ссылается ни один источник, «игнорируются».- Файлы ключей в ASCII-формате (
.asc, начинаются с-----BEGIN PGP PUBLIC KEY BLOCK-----) apt вSigned-Byпринимает только начиная с определённых версий, и то с расширением.asc; бинарный.gpgработает везде. Простое копирование.ascпод именем.gpgне работает. Автор второй истории получил рабочий файл, прогнав ключ черезgpg --dearmorпри скачивании. Обе истории подтверждены.
Правильная последовательность для стороннего репозитория.
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://repo.example.com/keys/example.asc | gpg --dearmor | sudo tee /etc/apt/keyrings/example.gpg >/dev/null
sudo chmod 644 /etc/apt/keyrings/example.gpg
Источник в /etc/apt/sources.list.d/example.sources:
Types: deb
URIs: https://repo.example.com/debian
Suites: bookworm
Components: main
Signed-By: /etc/apt/keyrings/example.gpg
Проверка ключа до установки: gpg --show-keys /etc/apt/keyrings/example.gpg и сравнение отпечатка с опубликованным поставщиком. /etc/apt/keyrings/ для ключей, добавленных администратором; /usr/share/keyrings/ для ключей из пакетов.
Как навести порядок в существующей системе.
ls /etc/apt/trusted.gpg.d/иapt-key list(пока команда существует): что лежит в устаревших местах.- Для каждого ключа найти репозиторий (
grep -r URIs\|^deb /etc/apt/sources.list*) и перевести его наSigned-By. - Убрать ключи из
trusted.gpg.dи удалить/etc/apt/trusted.gpg, если он есть. apt updateбез предупреждений.
Почему это не только косметика. Ключ в trusted.gpg.d подписывает любой репозиторий: если один из сторонних репозиториев скомпрометирован, его подпись примут и для пакетов, «притворяющихся» системными. Signed-By привязывает ключ к одному источнику.
Схема описана в документации Debian.