web-dev-qa-db-ja.com

独自のaptリポジトリーでの署名の問題

アプリケーション用に独自のリポジトリを作成したい。前にpgpでサブキーに署名してマスターキーを作成し、debパッケージに次のように署名します。

dpkg-sig --sign builder sample.deb

次に、repreproでリポジトリを作成します。

reprepro --ask-passphrase -b base includedeb all sample.deb

Repreproは必要な署名済みファイルを作成します。

./conf:
distributions  options

./db:
checksums.db  contents.cache.db  packages.db  references.db  release.caches.db  version

./dists:
all

./dists/all:
InRelease  main  Release  Release.gpg

./dists/all/main:
binary-AMD64  binary-i386

./dists/all/main/binary-AMD64:
Packages  Packages.gz  Release

./dists/all/main/binary-i386:
Packages  Packages.gz  Release

./pool:
main

./pool/main:
s

./pool/main/s:
sample

./pool/main/s/sample:
sample_2.2.48.9015_all.deb

クライアントマシンに公開キーをインストールしますが、パッケージをインストールした後、次のメッセージを受け取ります。

WARNING: The following packages cannot be authenticated!
  sample
Install these packages without verification? [y/N]

どうして?

2
crazyman

GPG署名は複雑です。 APTリポジトリの場合、GPG署名の2つの層があります。

  1. dpkg-sigまたはまたはdebsignを使用したパッケージ自体の署名。
  2. リポジトリメタデータの署名。

APTはリポジトリメタデータに署名を表示しないため、このメッセージが表示されます。これは、reprepro構成​​にSignWithを追加することで実現できます。私が書いた包括的なブログ投稿 here

Release.gpgまたはSignWithという名前のファイルを探すことで、InReleaseが機能したことを確認できます。 InReleaseという名前のファイルを見つけた場合、ファイルの内容を表示し、GPG署名が下部にあることを確認します。その場合、repreproは署名を適切に生成しました。 GPGで署名されたリポジトリは、HTTPS経由で提供されない限り、多数の中間者攻撃に対して依然として脆弱であることに注意してください。

また、apt-key listを実行して、GPG公開キーがクライアントシステムに正しくインポートされたことを確認することをお勧めします。リストにキーが表示されない場合は、apt-key add filenameでキーを追加する必要があります。

UbuntuとDebianはパッケージのGPG署名を検証しないことに注意することが重要です。デフォルトでは無効になっており、動作するのは非常に困難です。 GPGがパッケージに署名しないようにすることをお勧めします。

また、大量のセキュリティバグ(GPG署名を含む)を回避するために、HTTPSを介してリポジトリを配布する必要があることにも注意してください。

2
Joe Damato