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

/root/.gnupg/pubring.kbx
------------------------
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 http://192.168.1.1/linux/debian/gpg/public.key | apt-key add -

# apt-key list

/etc/apt/trusted.gpg
--------------------
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]

/etc/apt/trusted.gpg.d/debian-archive-buster-automatic.gpg
----------------------------------------------------------
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) <ftpmaster@debian.org>
sub   rsa4096 2019-04-14 [S] [expires: 2027-04-12]

/etc/apt/trusted.gpg.d/debian-archive-buster-security-automatic.gpg
-------------------------------------------------------------------
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) <ftpmaster@debian.org>
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 http://192.168.1.1/linux/debian buster InRelease [3941 B]
Hit:2 http://ftp.jp.debian.org/debian testing InRelease
Get:3 http://192.168.1.1/linux/debian buster/stable amd64 Packages [1752 B]
Get:4 http://192.168.1.1/linux/debian 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:
  docker-ce-cli

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

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

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

依存するパッケージを追加
linux
|-- 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 containerd.io docker-ce-cli
Suggested packages:
  aufs-dev
The following NEW packages will be installed:
  aufs-dkms aufs-tools cgroupfs-mount containerd.io 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 containerd.io.
Preparing to unpack .../3-containerd.io_1.2.6-3_amd64.deb ...
Unpacking containerd.io (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 containerd.io (1.2.6-3) ...
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service -> /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
Done.

...

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

[編集者: すずき]
[更新: 2019年 8月 12日 12:13]
link 編集する

コメント一覧

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



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

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 8/23 23:38

カレンダー

<2019>
<<<08>>>
----123
45678910
11121314151617
18192021222324
25262728293031

最近のコメント 5件

  • 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)
  • link 19年07月18日
    すずき 「OFをセットして例外を出したければINT...」
    (更新:07/20 11:02)
  • link 19年07月18日
    すずき 「MUL については、結果が倍のビット幅に...」
    (更新:07/20 10:56)

最近の記事 3件

link もっとみる
  • link 19年08月21日
    すずき 「[RockPro64 と linux-next とヘッドフォン] ...」
    (更新:08/23 23:38)
  • link 19年08月12日
    すずき 「[独自の apt サーバー - その 3 - apt の信頼シ] ...」
    (更新:08/12 12:13)
  • link 19年08月11日
    すずき 「[独自の apt サーバー - その 2 - apt-ftpa] ...」
    (更新:08/12 12:13)

こんてんつ

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 過去日記について

その他の情報

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