【Ubuntu】apt updateでKey is stored in legacy trusted.gpg keyringと注意されたので対応する

2023年5月6日Linux,Windows,環境構築

こんにちは、しきゆらです。
今回は公式のドキュメントを見ながら対応したのに、apt updateで怒られるようになったので
なぜなのか調べつつ、対応方法を見つけて対応したのでメモしておきます。


はじめに

なお、今回起こったのはPostgreSQLのインストール時のこと。
PostgreSQLをインストールするためにリポジトリ追加を行った。 手順はこれ。

該当箇所は以下の通り。

# Create the file repository configuration:
sudo sh -c 'echo "deb <http://apt.postgresql.org/pub/repos/apt> $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the repository signing key:
wget --quiet -O - <https://www.postgresql.org/media/keys/ACCC4CF8.asc> | sudo apt-key add -

# Update the package lists:
sudo apt-get update # <= ここでWarningが出た
...
Key is stored in legacy trusted.gpg keyring

ということで、記載されているが、そもそも何を怒っているのかを調べてみました。

何が起きているのか

apt-keyコマンドがだいぶ前の2020年8月ころから廃止予定で、2022年Q2に廃止となっていたようです。
手元の環境はWSL2上のUbuntu 22.10でしたが、まだ残っているようでした。
今後はなくなるんでしょう。

セキュリティ上の懸念点からくるもので、簡単にまとめると次の2点が理由です。

  1. apt-key addは単一ファイル(/etc/apt/trusted.gpg)に鍵を追加していくため、複数のリスクの異なるリポジトリの鍵を同じ権限で管理しなくてはならない。
  2. リポジトリ鍵として追加した鍵は、すべてのリポジトリに対して適用される
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0675

ということで、リポジトリごとにリスクが異なるカギを全体で使うのよくいないよね、ということでこれをやめた、という感じなのかなと。

やめたはいいが、この記事時点では代替となるものが用意されていないようです。 今後は、各リポジトリで利用するカギを/usr/share/keyrings/配下に設置して個別に指定する運用が良いだろう、として締めています。

対応方法

大きく分けると以下の通り。

  1. 既存のカギを削除する
  2. 別途カギを取得し設定しなおす
  3. リポジトリとカギを紐づける

1, 既存のカギを削除する

$ apt-key list
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
/etc/apt/trusted.gpg.d/apt.postgresql.org.gpg # <= これを削除する
---------------------------------------------
pub   rsa4096 2011-10-13 [SC]
      B97B 0AFC AA1A 47F0 44F2  44A0 7FCC 7D46 ACCC 4CF8
uid           [ unknown] PostgreSQL Debian Repository
...

# 鍵の削除はfinger printの最後の8文字のようです
$ sudo apt-key del ACCC4CF8
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
OK

# 消えたことを確認
$ apt-key list
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
...

2, 別途カギを取得し設定しなおす

カギについては、ここに記載されているので取得して入れなおします。

PostgreSQL: Linux downloads (Ubuntu)

# カギの取得
$ wget <https://www.postgresql.org/media/keys/ACCC4CF8.asc>

# カギをgpgコマンドを使って変換
$ gpg --no-default-keyring -o postgresql-keyring.gpg --dearmor ACCC4CF8.asc

# カギを確認
$ file postgres-keyring.gpg
postgres-keyring.gpg: GPG keybox database version 1 ...

# 変換したカギを/usr/share/keyrings/へ設置する
# 手元ではフォルダがなかったので手動で作成
$ sudo mkdir -p /usr/share/keyrings
$ sudo cp postgres-keyring.gpg /usr/local/share/keyrings

3, リポジトリとカギを紐づける

リポジトリは/etc/apt/sources.list.d/pgdg.listに作成しているので、このファイルを以下のように変更。

# deb [signed-by=/path/to/gpg_key] URLの形式でカギの場所を記載
deb [signed-by=/usr/local/share/keyrings/postgresql-keyring.gpg] <http://apt.postgresql.org/pub/repos/apt> kinetic-pgdg main

これにて対応完了です。
Warningが出ないことを確認しましょう。

# warningが出ないことを確認
$ sudo apt update
...
Hit:7 <http://apt.postgresql.org/pub/repos/apt> kinetic-pgdg InRelease

まとめ

今回は、apt-keyコマンドが廃止となっているために、ドキュメント通りに対応してもWarningが出てしまっていたので、諸々調べつつ対応してみました。 そもそもの廃止から知らなかったので勉強になりました。

なお、DockerやGithub CLIでは /etc/apt/keyrings 配下に設置しているようです。

管理をユーザ側でやる、という形であれば1か所にまとめたほうが良いので どこか1か所を決めて、リポジトリ追加時にそこへ追加していく方法をとったほうが良いかもしれません。

DebianのWikiにも /etc/apt/keyrings 配下に設置しよう、となっているのでこっちに合わせたほうが良いかもしれません。

今回はここまで。
おわり

Posted by しきゆら