Обновляем ключи для apt
Nov 25, 2022 13:02 · 468 words · 3 minute read
В наше время тотальной слежки и всеобщего недоверия всё должно подписываться публичными ключами. Утрирую, конечно, но проблема стара как мир - как убедиться, что файл был создан действительно тем, кому мы доверяем? Сегодня речь пойдёт об apt и установку пакетов.
Прошло то время, когда люди ставили ПО из исходников. Это было реально неудобно по многим причинам, так что на свет появился сначала dpkg, а потом и apt-get. dpkg умеет работать с зависимостями и устанавливать пакеты, а apt - искать их в репозиториях. Отличная кооперация! Но как убедиться, что файл в репозитории не подменили? Для этого все они подписываются gpg-ключами, которые необходимо установить при добавлении репозитория.
Раньше это делалось с помощью apt-key -
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
. Но в Ubuntu 22.04 перешли на новый механизм проверки подписи, и apt-key стал считаться устаревшим. Теперь появляются предупреждения вида:
W: http://repo.yandex.ru/yandex-disk/deb/dists/stable/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
W: https://download.virtualbox.org/virtualbox/debian/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
W: http://packages.microsoft.com/repos/code/dists/stable/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
W: http://apt.kubernetes.io/dists/kubernetes-xenial/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
W: https://packagecloud.io/slacktechnologies/slack/debian/dists/jessie/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
Т.е. путь до ключа надо явно прописывать в строке подключения репозитория в /etc/apt/sources.list.d/. Для этого: экспортируем существующий ключ в файл, подключаем его и обновляем кеш apt.
Экспорт ключа
Раньше за хранение ключей отвечала утилита apt-key. В новой Ubuntu 22.04 от неё решили отказаться в пользу хранения ключей просто в виде файла. Так что надо экспортировать все ключи в файлы. Список всех зарегистированных можно посмотреть:
root@Server:~# apt-key list
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
/etc/apt/trusted.gpg
--------------------
pub rsa4096 2014-01-13 [SCEA] [expired: 2019-01-12]
418A 7F2F B0E1 E6E7 EABF 6FE8 C2E7 3424 D590 97AB
uid [ expired] packagecloud ops (production key) <ops@packagecloud.io>
pub rsa2048 2020-12-04 [SC] [expires: 2022-12-04]
59FE 0256 8272 69DC 8157 8F92 8B57 C5C2 836F 4BEB
uid [ unknown] gLinux Rapture Automatic Signing Key (//depot/google3/production/borg/cloud-rapture/keys/cloud-rapture-pubkeys/cloud-rapture-signing-key-2020-12-03-16_08_05.pub) <glinux-team@google.com>
sub rsa2048 2020-12-04 [E]
pub rsa2048 2015-10-28 [SC]
BC52 8686 B50D 79E3 39D3 721C EB3E 94AD BE12 29CF
uid [ unknown] Microsoft (Release signing) <gpgsecurity@microsoft.com>
На примере последнего ключа экспортируем:
$ sudo apt-key export BE1229CF | sudo gpg --dearmour -o /usr/share/keyrings/microsoft.gpg
В дальнейшем его можно удалить:
$ sudo apt-key del BE1229CF
Подключаем файл-ключ
Список сторонних репозиториев хранится в каталоге /etc/apt/sources.list.d/. Ищем там соответствующий файл и добавляем раздел signed-by с указанием ключа, чтобы было:
deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] http://packages.microsoft.com/repos/code stable main
Вполне возможно, что строка подключения репозитория находится в файле /etc/apt/sources.list.d/additional-repositories.list
.
Обновление кеша apt
Самое простое и знакомое - выполняем apt update
и убеждаемся, что предупреждение исчезло.