tag:crieit.net,2005:https://crieit.net/tags/Ubuntu22.10/feed
「Ubuntu22.10」の記事 - Crieit
Crieitでタグ「Ubuntu22.10」に投稿された最近の記事
2023-05-07T08:55:07+09:00
https://crieit.net/tags/Ubuntu22.10/feed
tag:crieit.net,2005:PublicArticle/18427
2023-05-07T08:47:15+09:00
2023-05-07T08:55:07+09:00
https://crieit.net/posts/resolve-key-is-stored-in-legacy-truste-gpg-keyring-issue
【Ubuntu】apt updateでKey is stored in legacy trusted.gpg keyringと注意されたので対応する
<p>こんにちは、しきゆらです。<br />
今回は公式のドキュメントを見ながら対応したのに、<code>apt update</code>で怒られるようになったので<br />
なぜなのか調べつつ、対応方法を見つけて対応したのでメモしておきます。</p>
<h2 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h2>
<p>今回起こったのはPostgreSQLのインストール時のこと。<br />
PostgreSQLをインストールするためにリポジトリ追加を行った。 手順はこれ。<br />
<a target="_blank" rel="nofollow noopener" href="https://www.postgresql.org/download/linux/ubuntu/">PostgreSQL: Linux downloads (Ubuntu) </a></p>
<p>該当箇所は以下の通り。</p>
<pre><code class="zsh"># 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
</code></pre>
<p>ということで、記載されているが、そもそも何を怒っているのかを調べてみました。</p>
<h2 id="何が起きているのか"><a href="#%E4%BD%95%E3%81%8C%E8%B5%B7%E3%81%8D%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%8B">何が起きているのか</a></h2>
<p><a target="_blank" rel="nofollow noopener" href="https://gihyo.jp/admin/serial/01/ubuntu-recipe/0675">apt-keyはなぜ廃止予定となったのか</a><br />
<a target="_blank" rel="nofollow noopener" href="https://salsa.debian.org/apt-team/apt/-/commit/ee284d5917d09649b68ff1632d44e892f290c52f">Fully deprecate apt-key, schedule removal for Q2/2022 (ee284d59) · Commits · APT Developers / apt · GitLab</a></p>
<p>apt-keyコマンドがだいぶ前の2020年8月ころから廃止予定で、2022年Q2に廃止となっていたようです。<br />
手元の環境はWSL2上のUbuntu 22.10でしたが、まだ残っているようでした。<br />
今後はなくなるんでしょう。</p>
<blockquote>
<p>セキュリティ上の懸念点からくるもので、簡単にまとめると次の2点が理由です。</p>
<ol>
<li>apt-key addは単一ファイル(/etc/apt/trusted.gpg)に鍵を追加していくため、複数のリスクの異なるリポジトリの鍵を同じ権限で管理しなくてはならない。</li>
<li>リポジトリ鍵として追加した鍵は、すべてのリポジトリに対して適用される。</li>
</ol>
<p>引用元: https://gihyo.jp/admin/serial/01/ubuntu-recipe/0675</p>
</blockquote>
<p>ということで、リポジトリごとにリスクが異なるカギを全体で使うのよくいないよね、ということでこれをやめた、という感じなのかなと。<br />
やめたはいいが、この記事時点では代替となるものが用意されていないようです。 今後は、各リポジトリで利用するカギを/usr/share/keyrings/配下に設置して個別に指定する運用が良いだろう、として締めています。</p>
<h2 id="対応方法"><a href="#%E5%AF%BE%E5%BF%9C%E6%96%B9%E6%B3%95">対応方法</a></h2>
<p>大きく分けると以下の通り。</p>
<ol>
<li>既存のカギを削除する</li>
<li>別途カギを取得し設定しなおす</li>
<li>リポジトリとカギを紐づける</li>
</ol>
<h3 id="1. 既存のカギを削除する"><a href="#1.+%E6%97%A2%E5%AD%98%E3%81%AE%E3%82%AB%E3%82%AE%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B">1. 既存のカギを削除する</a></h3>
<pre><code class="zsh">$ 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)).
...
</code></pre>
<h3 id="2. 別途カギを取得し設定しなおす"><a href="#2.+%E5%88%A5%E9%80%94%E3%82%AB%E3%82%AE%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%AA%E3%81%8A%E3%81%99">2. 別途カギを取得し設定しなおす</a></h3>
<p>カギについては、ここに記載されているので取得して入れなおします。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://www.postgresql.org/download/linux/ubuntu/">PostgreSQL: Linux downloads (Ubuntu) </a></p>
<pre><code class="zsh"># カギの取得
$ 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
</code></pre>
<h3 id="3. リポジトリとカギを紐づける"><a href="#3.+%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%A8%E3%82%AB%E3%82%AE%E3%82%92%E7%B4%90%E3%81%A5%E3%81%91%E3%82%8B">3. リポジトリとカギを紐づける</a></h3>
<p>リポジトリは/etc/apt/sources.list.d/pgdg.listに作成しているので、このファイルを以下のように変更。</p>
<pre><code class="zsh"># 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
</code></pre>
<p>これにて対応完了です。<br />
Warningが出ないことを確認しましょう。</p>
<pre><code class="zsh"># warningが出ないことを確認
$ sudo apt update
...
Hit:7 <http://apt.postgresql.org/pub/repos/apt> kinetic-pgdg InRelease
</code></pre>
<h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2>
<p>今回は、apt-keyコマンドが廃止となっているために、ドキュメント通りに対応してもWarningが出てしまっていたので、諸々調べつつ対応してみました。 そもそもの廃止から知らなかったので勉強になりました。</p>
<p>なお、DockerやGithub CLIでは /etc/apt/keyrings 配下に設置しているようです。<br />
<a target="_blank" rel="nofollow noopener" href="https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository">Install Docker Engine on Ubuntu | Docker Documentation</a><br />
<a target="_blank" rel="nofollow noopener" href="https://github.com/cli/cli/issues/5122">Linux installation instructions recommend storing GPG keyring in the wrong location · Issue #5122 · cli/cli · GitHub</a></p>
<p>管理をユーザ側でやる、という形であれば1か所にまとめたほうが良いので どこか1か所を決めて、リポジトリ追加時にそこへ追加していく方法をとったほうが良いかもしれません。<br />
DebianのWikiにも /etc/apt/keyrings 配下に設置しよう、となっているのでこっちに合わせたほうが良いかもしれません。<br />
<a target="_blank" rel="nofollow noopener" href="https://wiki.debian.org/DebianRepository/UseThirdParty">DebianRepository/UseThirdParty - Debian Wiki</a></p>
<p>今回はここまで。<br />
おわり</p>
しきゆら