Ubuntuでサードパーティーのソフトウェアをインストールする際、過去には、apt-key コマンドでパッケージの電子署名用のOpenPGP公開鍵を扱っていました。
しかし、現在、apt-keyは廃止となりました。
私の中で混乱があったのでポイントをまとめました。
- 公開鍵は asc でも gpg でもいいが、gpgの方がいいかもしれない。(gpgの方がファイルサイズも少し小さい)
- サードパーティーの鍵は /etc/apt/keyrings に保存する
- sources.list のマニュアルに以下の記載があります。”The recommended locations for keyrings are /usr/share/keyrings for keyrings managed by packages, and /etc/apt/keyrings for keyrings managed by the system operator.”
- sources.list.d/ の下にそのパッケージの list ファイルを作成するが、リポジトリに [signed-by=/etc/apt/keyrings/そのパッケージのkey.gpg] を追記する
実際に Google Chrome をこの方法で行うとどうなっていたか見てみたいと思います。
apt-key 時代
- 過去にはこう紹介されていました。
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add - echo "deb http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
- 1行目で、wget で入手した linux_signing_key.pub を apt-key を使って登録しています。apt-keyで追加された鍵は、すべてのリポジトリが信頼する場所(/etc/apt/trusted.gpg.d/)に保存されていました。これがセキュリティ上のリスクでした。
- 2行目は aptのために list ファイルを作成しています。
現在
- 現在はこうなります。
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub |\ gpg --dearmor | sudo tee /etc/apt/keyrings/google-chrome.gpg > /dev/null echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main" |\ sudo tee /etc/apt/sources.list.d/google-chrome.list
- 1行目の wget で入手するのは変わりませんが、その後、gpg –dearmor でダウンロードした鍵をバイナリ形式に変換した後、/etc/apt/keyrings の下に google-chrome.gpg として保存します。
- 2行目では、[arch=amd64]でシステムアーキテクチャを指定し(これは本筋ではありませんが有用です)、[signed-by=/etc/apt/keyrings/google-chrome.gpg] で鍵がどこにあるかを明示しています。
このように理解することですっきりしました。