「Pacman/パッケージの署名」の版間の差分
(同期) |
Kusakata.bot (トーク | 投稿記録) 細 (文字列「[[zh-cn:」を「[[zh-hans:」に置換) |
||
8行目: | 8行目: | ||
[[ru:Pacman/Package signing]] |
[[ru:Pacman/Package signing]] |
||
[[tr:pacman paket imzaları]] |
[[tr:pacman paket imzaları]] |
||
− | [[zh- |
+ | [[zh-hans:Pacman/Package signing]] |
pacman-key は Arch Linux においてパッケージの署名を設定・管理するために使われるツールです。 |
pacman-key は Arch Linux においてパッケージの署名を設定・管理するために使われるツールです。 |
||
2017年2月9日 (木) 21:10時点における版
pacman-key は Arch Linux においてパッケージの署名を設定・管理するために使われるツールです。
目次
イントロダクション
Pacman は GnuPG keys を使っており web of trust モデルによってパッケージの信頼性を決定します。現在、5つの Master Signing Key が存在します。最低でも3つの Master Signing Key が開発者や Trusted User のキーに署名するのに使われ、署名されたキーはパッケージに署名するのに使われます。ユーザーにも、pacman-key を設定した時に、固有の PGP キーが生成されます。そして web of trust はユーザーのキーと5つのマスターキーを結合させます。
webs of trust の例:
- カスタムパッケージ: あなた自身がパッケージを作成し、あなた自身のキーを使って署名をします。
- 非公式パッケージ: 開発者がパッケージを作成し署名します。あなたはあなたのキーを使って開発者のキーに署名します。
- 公式パッケージ: 開発者がパッケージを作成し署名します。開発者のキーは Arch Linux のマスターキーによって署名されています。あなたはあなたのキーを使ってマスターキーに署名をすることで、開発者だと信頼することができます。
設定
pacman の設定
/etc/pacman.conf
内の SigLevel
オプションで、パッケージをインストールするのに必要な信頼がどのレベルか設定します。SigLevel
の詳細は pacman.conf man page やファイル内のコメントを見て下さい。署名チェックはリポジトリ毎にも、全体にも設定することができます。SigLevel
を [options] セクションに設定して、全てのパッケージに署名が必要にすると、あなたがビルドしたパッケージにも makepkg
を使って署名をしなくてはならなくなります。
デフォルト設定では
/etc/pacman.conf
SigLevel = Required DatabaseOptional
信頼されたキーで署名されたパッケージだけをインストールするようになっています。これは pacman のデフォルトパラメータが TrustOnly
になっているためです。よって上記設定は全体のオプションとして以下を設定するのと同じになります。
SigLevel = Required DatabaseOptional TrustedOnly
上記の設定と同じことを設定ファイルの下の方でリポジトリレベルで行うことができます、例えば:
[core] SigLevel = PackageRequired # ’Optional’ here would turn off a global ’Required’ for this repository Include = /etc/pacman.d/mirrorlist
リポジトリのパッケージの署名チェックを明示的に追加していますが、データベースが署名されていることは要求しません。
キーリングの初期化
pacman のキーリングを設定するには、以下を実行してください:
# pacman-key --init
この初期化には、エントロピーが必要です。マウスを動かいたり、キーボードの文字をランダムで押したり、ディスク操作を伴うコマンドを実行したりすることで (例えば、他のコンソールで ls -R /
や find / -name foo
, dd if=/dev/sda8 of=/dev/tty7
を実行する) エントロピーが生成されます。システムに十分なエントロピーが溜まっていないと、初期化にはかなりの時間がかかります; 積極的にエントロピーを生成すれば、早く初期化が完了するでしょう。
作成された乱数はキーリング (/etc/pacman.d/gnupg
) とあなたのシステムの GPG 署名キーのセットアップに使用されます。
キーリングの管理
5つのマスターキーを検証する
キーの初期設定は次を実行してください:
# pacman-key --populate archlinux
Master Signing Keys を検証するのは時間ががかります、他の全てのパッケージ作成者のキーに連署(そして信頼)するのに使われるからです。
PGP 鍵は人間には手に余る長さ (2048 ビット以上) なので、通常ハッシュ化されて16進数で40桁のフィンガープリントが作成されます。これを使って手動で2つのキーが同一であることを確認できます。フィンガープリントの最後の8桁はキーの名前として使われ 'key ID' と呼ばれます。
開発者のキーの追加
公式開発者と TU のキーはマスターキーによって署名されています。なので pacman-key を使ってそれらに署名をする必要はありません。pacman は未確認のキーに遭遇した時、/etc/pacman.d/gnupg/gpg.conf
に設定されている keyserver
から (もしくはコマンドラインの --keyserver
オプションを使って) キーをダウンロードするようになっています。Wikipedia が keyserver のリストを保守しています。
開発者のキーは一度ダウンロードすれば、またダウンロードする必要はありません。開発者によって署名されたパッケージ全てを、そのキーで確認することができます。
非公式のキーの追加
まず、キーの所有者から ID を取得してください。次を実行してキーサーバーからダウンロードしましょう:
# pacman-key -r <keyid>
マスターキー(やその他署名をするキー)でしたように、フィンガープリントの検証を必ずしてください。フィンガープリントの検証後、キーをローカルで署名する必要があります:
# pacman-key --lsign-key <keyid>
これでパッケージを署名するキーを信頼できました。
gpg を使う
pacman-key だけでは満足な操作が行えない場合、以下のように gpg を使って pacman のキーリングを管理することができます:
# gpg --homedir /etc/pacman.d/gnupg $OPTIONS
又は
# env GNUPGHOME=/etc/pacman.d/gnupg gpg $OPTIONS
トラブルシューティング
キーをインポートできない
ISP によっては PGP キーをインポートするために使われるポートをブロックされていることがあります。1つの解決方法としては、他のポートを提供している、MIT キーサーバーを使う方法があります。これを行うには、/etc/pacman.d/gnupg/gpg.conf
を編集して keyserver の行を次のように修正してください:
keyserver hkp://pgp.mit.edu:11371
pacman-key --populate archlinux
を実行するのを忘れていると、キーをインポートするときにエラーが表示されるかもしれません。
署名チェックの無効化
パッケージの署名について心配がないのなら、PGP 署名のチェックを完全に無効化することができます。/etc/pacman.conf
を編集して [options] の以下の行をアンコメントしてください:
SigLevel = Never
個々のリポジトリの SigLevel の設定もコメントアウトする必要があります、なぜならそれらは全体の設定を上書きするからです。 この設定により署名チェックが無効化され、pacman 4 以前の挙動になります。署名チェックを無効にする場合、pacman-key でキーリングを設定する必要はありません。このオプションは後から(パッケージ検証を有効にしたいと思った時から)変更することができます。
全てのキーのリセット
システムにインストールされた全てのキーを削除・リセットしたい場合、root で /etc/pacman.d/gnupg
フォルダを削除し pacman-key --init
を再度実行してから上の記述に従ってキーを追加してください。
腐ったパッケージを削除する
同じパッケージが失敗し続けていて、pacman-key に関することを全て正しく行っている場合、rm /var/cache/pacman/pkg/badpackage*
を実行するなどしてパッケージを一度削除してから新しくダウンロードしてみてください。
アップグレードの際に error: linux: signature from "Some Person <Some.Person@example.com>" is invalid
のようなメッセージが表示される場合、これが解決策になることが実際にあります (つまり、あなたは MITM 攻撃の犠牲者などではなく、単にダウンロードしたファイルが壊れていたということです)。