link もっと前
   2019年 8月 12日 -
      2019年 8月 12日  
link もっと後

link 未来から過去へ表示(*)
link 過去から未来へ表示


link permalink

独自の apt サーバー - その 3 - apt の信頼システム

Packages には各 Debian パッケージのハッシュ値が記述されていて、悪意ある者が Debian パッケージを改変しても検知できるようになっています。Release には Packages のハッシュ値が記述されていて、Packages を改変されても検知できるようになっています。

Release の改変に対しては、サーバーの作成者が署名を付け、Release が作成時から改変されていないことを保証します。

パッケージ(*.deb) <--(ハッシュ値)-- Packages <--(ハッシュ値)-- Release <--(署名)-- InRelease もしくは Release.gpg

保証の関係を図示すると上記のとおりです。前回の apt-get update のエラーメッセージは InRelease もしくは Release.gpg が存在しない、もしくは、あっても信頼できない署名だと言って怒っているのです。


最初から apt-get に信頼されている鍵は公式サーバーが使っている鍵ですが、当然ながら私は知りません。ですので、

  • 秘密鍵、公開鍵を作成
  • 自作した鍵を apt に信用してもらう
  • 自作した鍵で Release ファイルに署名


# gpg --gen-key

gpg (GnuPG) 2.2.12; Copyright (C) 2018 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Note: Use "gpg --full-generate-key" for a full featured key generation dialog.

GnuPG needs to construct a user ID to identify your key.

Real name:

名前やメールアドレスを聞かれるので適宜答えてください。途中でパスフレーズを聞かれます。今回はテストなので、名前は Test User、パスフレーズは abcd1234 にしました。

自作した鍵を apt に信用してもらう

自作した鍵を apt に信用してもらうには、公開鍵(秘密鍵ではありません)を apt の信頼済み鍵束に登録します。

自分用の公開鍵をエクスポートし apt に登録
# gpg --list-keys

pub   rsa3072 2019-08-11 [SC] [expires: 2021-08-10]
      A24D479395FF7F2B4A787D29439D445DCA4AF8F6      ★この ID を指定する
uid           [ultimate] Test User
sub   rsa3072 2019-08-11 [E] [expires: 2021-08-10]

# mkdir /var/www/linux/debian/gpg
# gpg --export A24D479395FF7F2B4A787D29439D445DCA4AF8F6 > /var/www/linux/debian/gpg/public.key

# curl | apt-key add -

# apt-key list

pub   rsa3072 2019-08-11 [SC] [expires: 2021-08-10]
      A24D 4793 95FF 7F2B 4A78  7D29 439D 445D CA4A F8F6    ★自作の鍵が追加された
uid           [ unknown] Test User
sub   rsa3072 2019-08-11 [E] [expires: 2021-08-10]

pub   rsa4096 2019-04-14 [SC] [expires: 2027-04-12]
      80D1 5823 B7FD 1561 F9F7  BCDD DC30 D7C2 3CBB ABEE
uid           [ unknown] Debian Archive Automatic Signing Key (10/buster) <>
sub   rsa4096 2019-04-14 [S] [expires: 2027-04-12]

pub   rsa4096 2019-04-14 [SC] [expires: 2027-04-12]
      5E61 B217 265D A980 7A23  C5FF 4DFA B270 CAA9 6DFA
uid           [ unknown] Debian Security Archive Automatic Signing Key (10/buster) <>
sub   rsa4096 2019-04-14 [S] [expires: 2027-04-12]


自分で作った鍵ペアのうち、公開鍵を gpg --export でファイルにエクスポートし、HTTP サーバーに配置します。公開鍵ファイルを apt-key add で信頼済みの鍵束に追加します。

今回作成した鍵はテストが終わったら不要なので apt-key del ’キーID’ で削除してください。apt-key list で出てきたキー ID をコピペすれば良いです(スペースもそのまま入れて OK)。

自作した鍵で Release ファイルに署名する

最後に Release ファイルに署名します。Release ファイルの署名には 2種類あって、署名を Release ファイルと一緒に書く InRelease ファイルと、署名だけを別に書く Release.gpg ファイルがあります。

InRelease だけ作成すれば機能するようですが、とりあえず両方の作り方を紹介しておきます。

Release の署名を作成する

### GnuPG で Release ファイルに署名

# echo -n "abcd1234" | gpg --batch --passphrase-fd 0 --pinentry-mode loopback --clearsign -o InRelease Release
# echo -n "abcd1234" | gpg --batch --passphrase-fd 0 --pinentry-mode loopback -abs -o Release.gpg Release
# chmod 644 Release InRelease Release.gpg

署名が完了したら apt-get update してみましょう。

Release の署名を作成する
# apt-get update

Get:1 buster InRelease [3941 B]
Hit:2 testing InRelease
Get:3 buster/stable amd64 Packages [1752 B]
Get:4 buster/stable amd64 Contents (deb) [1242 B]
Fetched 6935 B in 0s (25.7 kB/s)                               
Reading package lists... Done

うまくいきました。apt-get install docker-ce を実行すると、、、

apt-get を実行
# apt-get install docker-ce

Reading package lists... Done
Building dependency tree
Reading state information... Done
Package docker-ce is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:

E: Package 'docker-ce' has no installation candidate

どうやら依存関係を無視して Docker のパッケージを 1つしか登録しなかったため、依存関係のエラーが出てしまったようです。

他のパッケージ(docker-ce_cli,もダウンロードしましょう。pool/stable/amd64 の下に追加し、apt-ftparchive と署名をやり直します。

|-- conf
|   |-- apt_generate_debian_buster.conf
|   `-- apt_release_debian_buster.conf
`-- debian
    |-- dists
    |   `-- buster
    |       |-- InRelease
    |       |-- Release
    |       |-- Release.gpg
    |       |-- packages-amd64.db
    |       |-- pool
    |       |   `-- stable
    |       |       `-- amd64
    |       |           |-- containerd.io_1.2.6-3_amd64.deb
    |       |           |-- docker-ce-cli_19.03.1~3-0~debian-buster_amd64.deb
    |       |           `-- docker-ce_19.03.1~3-0~debian-buster_amd64.deb
    |       `-- stable
    |           |-- Contents-amd64
    |           |-- Contents-amd64.bz2
    |           |-- Contents-amd64.gz
    |           `-- binary-amd64
    |               |-- Packages
    |               |-- Packages.bz2
    |               `-- Packages.gz
    `-- gpg
        `-- public.key

10 directories, 16 files

以上のようなディレクトリ構成になるはずです。もう一度 apt-get install docker-ce してみましょう。

再び apt-get を実行
# apt-get install docker-ce

Reading package lists... Done
Building dependency tree 
Reading state information... Done
The following additional packages will be installed:
  aufs-dkms aufs-tools cgroupfs-mount docker-ce-cli
Suggested packages:
The following NEW packages will be installed:
  aufs-dkms aufs-tools cgroupfs-mount docker-ce docker-ce-cli
0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/88.0 MB of archives.
After this operation, 390 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Selecting previously unselected package aufs-dkms.
(Reading database ... 325385 files and directories currently installed.)
Preparing to unpack .../0-aufs-dkms_4.19+20190211-1_all.deb ...
Unpacking aufs-dkms (4.19+20190211-1) ...
Selecting previously unselected package aufs-tools.
Preparing to unpack .../1-aufs-tools_1%3a4.14+20190211-1_amd64.deb ...
Unpacking aufs-tools (1:4.14+20190211-1) ...
Selecting previously unselected package cgroupfs-mount.
Preparing to unpack .../2-cgroupfs-mount_1.4_all.deb ...
Unpacking cgroupfs-mount (1.4) ...
Selecting previously unselected package
Preparing to unpack .../3-containerd.io_1.2.6-3_amd64.deb ...
Unpacking (1.2.6-3) ...
Selecting previously unselected package docker-ce-cli.
Preparing to unpack .../4-docker-ce-cli_5%3a19.03.1~3-0~debian-buster_amd64.deb ...
Unpacking docker-ce-cli (5:19.03.1~3-0~debian-buster) ...
Selecting previously unselected package docker-ce.
Preparing to unpack .../5-docker-ce_5%3a19.03.1~3-0~debian-buster_amd64.deb ...
Unpacking docker-ce (5:19.03.1~3-0~debian-buster) ...
Setting up aufs-tools (1:4.14+20190211-1) ...
Setting up (1.2.6-3) ...
Created symlink /etc/systemd/system/ -> /lib/systemd/system/containerd.service.
Setting up docker-ce-cli (5:19.03.1~3-0~debian-buster) ...
Setting up aufs-dkms (4.19+20190211-1) ...
Loading new aufs-4.19+20190211 DKMS files...
Building for 4.19.0-5-amd64
Building initial module for 4.19.0-5-amd64


以上のように apt-get もうまくいきました。良かった良かった。

[編集者: すずき]
[更新: 2019年 11月 8日 00:41]
link 編集する


  • コメントはありません。
open/close この記事にコメントする

link もっと前
   2019年 8月 12日 -
      2019年 8月 12日  
link もっと後


link 記事を新規作成

合計:  counter total
本日:  counter today

link About
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 1/13 01:00



最近のコメント 5件

  • link 19年09月01日
    すずき 「私も正直びっくりです。間違って違う製品を...」
    (更新:09/04 23:39)
  • link 19年09月01日
    hdk 「車向けの製品の中でも、車載コンピューター...」
    (更新:09/02 23:20)
  • link 19年07月18日
    hdk 「あっ、AAMはマニュアルのオペレーション...」
    (更新:07/25 00:02)
  • link 19年07月18日
    すずき 「AAM(ASCII Adjust AX ...」
    (更新:07/24 22:22)
  • link 19年07月18日
    hdk 「加算減算は符号のありなしどちらも命令が同...」
    (更新:07/24 07:25)

最近の記事 3件

link もっとみる
  • link 20年01月12日
    すずき 「[ぼくの考えた最強の memset] NEON intrinsic...」
    (更新:01/13 01:00)
  • link 20年01月11日
    すずき 「[memset に一番効く最適化] Cortex-A72 での m...」
    (更新:01/13 00:42)
  • link 20年01月06日
    すずき 「[memset のベンチマーク(AArch64, Cortex] ...」
    (更新:01/12 02:34)


open/close wiki
open/close Java API


open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 過去日記について


open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報