Обновляем ключи для apt

Nov 25, 2022 13:02 · 468 words · 3 minute read linux админство

В наше время тотальной слежки и всеобщего недоверия всё должно подписываться публичными ключами. Утрирую, конечно, но проблема стара как мир - как убедиться, что файл был создан действительно тем, кому мы доверяем? Сегодня речь пойдёт об 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 и убеждаемся, что предупреждение исчезло.