サードパーティのAPTリポジトリを使用するリスクを制限しようとしています。私が回避しようとしているのは、私がDebianからインストールしたものよりも最新のバージョンを使用しているサードパーティのリポジトリに悪意のあるパッケージが侵入していることです。
最近、新しいAPTソースを追加するたびに、次のようにAPT固定を使用してそのソースの特定のパッケージのみをインストールします。
Package: *
Pin: origin debian.nabijaczleweli.xyz
Pin-Priority: -1
Package: systemd-zram
Pin: origin debian.nabijaczleweli.xyz
Pin-Priority: 500
Pin: origin <hostname>
これを行う代わりに使用していますOrigin: <tag>
。私が正しく理解した場合、元のタグはリポジトリ自体(リリースファイル内)によって制御され、悪意debian
や無知のために簡単に設定される可能性があります。 (私はこれが実際に起こっているのを見ました。)対照的に、ソースホスト名は指定されたURIから派生しますsources.list
。
これはうまく機能しているようで、今ではすべてのサードパーティのAPTソースに適用したいと思います。これを行うには、各サードパーティのリポジトリからどのパッケージをインストールしたかを知る必要があります。問題は、インストールされたパッケージのリストと元のURIまたはホスト名を取得する方法が見つからないことです。
Origin URI
適性はこれを発表することを嬉しく思います。パッケージ情報画面1(含まない)検索述語それも表示されませんパッケージ一覧。
dpkg-query
apt-cache
パッケージに関する多くの情報を提供できますが、元のURIまたはホスト名を取得する方法が見つかりませんでした。
私はファイル名の最初の部分を元のホスト名として使用してコンテンツを解決できると仮定しています/var/lib/apt/lists/*_Packages
が、これは影響を受けたくありません。
だから:
この状況を考えてみる価値はありますか?破損したリポジトリがさまざまな方法で私を台無しにする可能性があるので、心配を止め、爆弾を愛する方法を学ぶ必要があります。
パッケージソースを表す
Releases
ファイルのフィールドが、ここで使用されている元のホスト名よりも信頼性が低いと思うのは正しいですか?Origin
Pin: origin <hostname>
インストールされているすべてのパッケージのリストと元のホスト名を取得する方法はありますか?
ありがとうございます!
¹該当するページのスクリーンショットは表示されているフィールドを説明するには古すぎますが、Origin-URI
最新バージョンのAptitudeはここにパッケージの完全なURIを表示します。
答え1
aptitude
欲しいロジックに愚かなようです。
解決策はPythonに切り替えることです。
import apt
CACHE = apt.Cache()
for pkg in CACHE:
if not pkg.installed:
continue
for orig in pkg.candidate.origins if pkg.candidate else []:
if len(orig.site) == 0:
continue
print(pkg, pkg.candidate.version, orig.site)
修正するパッケージapt
には以下が含まれます。
bash# dpkg -S /usr/lib/python3/dist-packages/apt/__init__.py
python3-apt: /usr/lib/python3/dist-packages/apt/__init__.py