ここには、*。rpmファイルから「平文」(署名された領域)を抽出する短いシェルスクリプトがあります。これはヘッダー+ペイロードシグネチャー、ヘッダーのみのシグネチャーplaintextは似ていますが、ヘッダーBLOBのみです)。
署名が必要です(rpm-pythonバインディングを使用することができます、以下の注意を参照してください)。パッケージの署名を検証するにはgpgへのPythonバインディングが必要です。
プレーンテキストを検索して署名を取得するために解析が必要な、ダウンロードされた可能性のある改ざんされたパッケージを検証することは、すでに手間のかかるビジネスであることに注意してください。
==============================は/ usr/libに/回転数/ tgpg
#!/bin/sh
for pkg in $*
do
if [ "$pkg" = "" -o ! -e "$pkg" ]; then
echo "no package supplied" 1>&2
exit 1
fi
plaintext=$(mktemp /tmp/tgpg-$$.XXXXXX)
detached=$(mktemp /tmp/tgpg-$$.XXXXXX)
# --- Extract detached signature
rpm -qp -vv --qf '%{siggpg:armor}' $pkg > $detached
# --- Figger the offset of header+payload in the package
leadsize=96
o=$(expr $leadsize + 8)
set $(od -j $o -N 8 -t u1 $pkg)
il=$(expr 256 \* \(256 \* \(256 \* $2 + $3 \) + $4 \) + $5)
dl=$(expr 256 \* \(256 \* \(256 \* $6 + $7 \) + $8 \) + $9)
sigsize=$(expr 8 + 16 \* $il + $dl)
o=$(expr $o + $sigsize + \(8 - \($sigsize \% 8 \) \) \% 8)
# --- Extract header+payload
dd if=$pkg ibs=$o skip=1 2>/dev/null > $plaintext
# --- Verify DSA signature using gpg
gpg --batch -vv --debug 0xfc02 --verify $detached $plaintext
# --- Clean up
rm -f $detached $plaintext
done
ありがとうこの答えのために。 rpmコマンドの--qfは--queryformatと同等です。潜在的に改ざんされたパッケージを扱うときには、分離された署名をrpmを使って抽出するときに厄介な部分があると私は推測します。署名を抽出する際にセキュリティ上のリスクを最小限に抑えるためには何ができますか?私はchrootがそれほど助けにならないと思いますか? – rasebo
あり-qfは--queryformatのシングルダッシュエイリアスです。より困難な問題は、--queryformatがロードされたヘッダで機能し、--queryformatが値を取得できるようにヘッダをロードできると仮定していることです。実際には、あなたはうまくいくでしょう:一方で、ヘッダーをロードする前に悪用の可能性があります。 chrootは損傷を最小限に抑えますが、それは正しいエンジニアリングの解決策ではありません。署名検証を実行するには、1)平文2)署名、3)外部手段を介して供給できるpubkeyの3つの項目が必要です。 –