web-dev-qa-db-ja.com

apt-checkは、linux-genericがない場合にセキュリティに必要なカーネルアップグレードを検出できますか?

これは不明確であるため保留にされました。たぶん、私はあまりにも多くの背景説明を入れました。ミー・カルパ。そう:

このIS質問、別の言い回し:


Apt-check、つまり

/usr/lib/update-notifier/apt-check

潜在的なカーネルアップグレードを非カーネルアップグレードと同じ方法で処理し、それらを検出し、セキュリティ修正が組み込まれているものとそうでないものを区別します。そうすることで、aptの2番目のフィールドに反映されます-checkの出力、メタパッケージlinux-genericをインストールせずに?

そして、apt-checkでこれができない場合、他にできるプログラムはありますか?


user535733は、コメントで明示的に理解して回答したようです。

「。。。メタパッケージをアンインストールする場合、カーネルのアップグレードを確認する他の自動化された方法はありません...自分で作成しない限り。」

誰も同意せず、user535733が私が彼を誤解したと言っておらず、それを答えに入れた場合、私は彼にブラウニーポイントを与えます。

user535733とwaltinatorはどちらも、自分でこれを行うプログラムを作成できることを示唆しています。 Waltinatorはapt-checkのソースコードを書き直しているかもしれませんが、私はそうではありません。回避策をスクリプト化することもできますが、新しいセキュリティ修正があるカーネルアップグレードとそうでないカーネルアップグレードを区別する方法を見つける必要があります。

ありがとう、紳士。

= = =追加された素材の終了-元の投稿が続きます= = =

apt-check(update-notifierパッケージから)。これは通常MOTDの記述に使用されますが、直接呼び出すことができ、次の形式の出力を返します。

x;y

ここで、xは可能なアップグレードの数です。
およびyは、可能なセキュリティアップグレードの数です。

linux-genericがインストールされていない場合、カーネルのアップグレードは最初の数にカウントされません。古いカーネルのセキュリティ上の欠点を修正するためにカーネルのアップグレードが必要な場合、2番目の数にカウントされますか?言い換えれば、apt-checkに依存して、最新のカーネルに依存するメタパッケージがない場合にカーネルをアップグレードする必要があることを伝えることができますか?

これが明確でない場合、具体例を次に示します。
4.4.0-77にアップグレードするたびに、同じマシン上にある2つのXenialシステムが停止します。私が実際に動作することがわかった唯一の解決策は、壊れたシステムのfsarchiverバックアップを復元し、すべてのシステムをマウントし、lilo(異なるブートローダーのupdate-grubなど)を実行して新しい/古いカーネルを見つけ、再起動することです復元されたシステムにlinux-genericをアンインストールして、自動的に4.4.0-77をインストールしないようにします。現在、次のコマンドを実行して、どのカーネルlinux-generic WOULDがインストールされているかを確認します。

apt-get install --simulate linux-generic.

たぶん、78または80、さらには4.4.1に達したら、linux-genericを再試行します。

それで、apt-checkは、新しいカーネルのアップグレードの1つが光沢のある新しいgee-whiz機能のためだけでなく、実際にセキュリティ上の欠陥を修正していることを教えてくれますか?または、これを行うにはlinux-genericに依存しますか?後者の場合、この目的のためにapt-checkに代わるものがありますか?

4

あなたの質問は少し複雑ですが、タイトルの単一の質問に要約されると思うので、それが私が対処しようとしていることです

Aptがアップグレードするパッケージを選択する方法

いいえ、 AdvancedP ackageTool 、意図されている方法で、別のパッケージが依存しない限り、新しいパッケージ(たとえばlinux-image-*-generic)を自動的にインストールできないその上。既にインストールされているパッケージのみを自動的にアップグレードし、そのプロセスで以前のバージョンを置き換えます。

これが、linux-image-generic:のようなメタパッケージを使用する1つの理由です。Aptに、古いバージョンを置き換えることなく、インストールする新しいパッケージを認識させます。現在実行中のカーネルを置き換えることは困難であり、何か問題が発生した場合に人々が以前の動作確認済みのカーネルバージョンに簡単に戻りたいため、カーネルパッケージに対してこれを行います。

さらに、Aptはバージョン番号のセマンティクスを認識または気にしません。気にするのは、バージョン番号文字列の順序と、構成可能な評価システムに基づいてインストールに最適なバージョンを選択するために使用可能なバージョンのリストです。パッケージ(リポジトリ)マネージャーは、アップストリームの変更を含む組み込みおよび公開を担当します。適切なバージョン文字列を使用した交換パッケージのセキュリティ修正。

apt-checkの意味

これでAptの概要を説明したので、update-notifierを提供するパッケージであるapt-checkに関する質問にどのように影響するかを説明できます。すでにインストールされているか、インストールされる予定のパッケージ。 linux-image-genericがインストールされていない場合、Aptは新しいカーネルパッケージを表示せず、Aptにアップグレード可能なパッケージを照会するときにupdate-notifierも表示されません。

この機能が本当に必要な場合はどうすればよいですか?

もちろん、Linuxのほとんどのものと同様に、利用可能なすべてのパッケージからパターンを検索して(半)自動的にインストールするツールを作成してもかまいません。少なくともこれを実行できるオンボードツールは知りませんが、このタスクは十分に汎用的であるため、一部の管理者が一緒にハッキングしたこのスクリプトを見て驚かないでしょう。

3
David Foerster

Xenialでは、無人アップグレードはデフォルトでセキュリティ修正のみをインストールします。また、Software Updaterでは、インストールするセキュリティアップデートのみを選択できます。しかし、あなたの問題に関しては、今後のセキュリティアップデートにはシステムを破壊する以前のセキュリティ以外のアップデートの変更が含まれる可能性が高いため、Linuxに対してバグを報告して、今後のアップデートで問題を修正することをお勧めします。

とにかく、コマンドラインで実行できます

apt-cache policy linux-generic

利用可能な最新の更新プログラムがセキュリティ更新プログラムであるかどうかを確認します。

Xenialでは、linux-genericの最新のセキュリティ更新プログラムを手動でインストールできます。

apt-get install linux-generic/xenial-security
2
jarno

皆様に感謝し、別のフォーラムでいくつかの良い指針を与えたCanonicalのAndyに感謝します。ここだけでなく、これについて少し突っついてきました。いくつかのことを学び、他の人を疑うようになりました。コメントを入れるには多すぎます。

厳密に言えば、質問は最初の投稿に対する2番目のコメントでuser535733によって正しくかつ迅速に回答され、公平に回答しました。回答に入れていただければ、喜んで受け入れます。

@ user535733-上記に注意してください。

しかし、最初のコメントでワルティネーターが仕事をするツールを作成する可能性を含めるようにウォルティネーターによって拡張され、どのようにapt-checkが動作するかについてDavidが説明しました。

以下は完全に近いものではなく、その一部は推測であり(明確にラベル付けされていることを願っています)、いくつかの完全な間違いさえあるかもしれません(それを想像してください)そして戻って編集します。このページで誰かがつまずくかもしれません興味深いものをいくつか見つけてください。出力を正しい形式で明確に表示するには、独自のシステムでコマンドを実行する必要がある場合があります。


apt-checkおよびlinux-genericを再実行します。

Linuxジェネリックは赤いニシンのようです。ちなみに、私はそれが問題だと思いました。 linux-generic ATがインストールされていても、apt-checkがIS ALLを実行できないとは思わない。 4.4.0-77をインストールせずにテストするのは難しい質問です。将来的には、一貫して私のxenialシステムを壊すカーネルについて心配する必要がないときにテストします。

問題は、apt-checkが必要なデータにアクセスできないということではありません。カーネルアップグレードの可能性に関するメタデータを取得し、利用可能なものとセキュリティ修正があるかどうかを示すのに、linux-genericをインストールする必要はありません。

私はaptの一部である「apt-get update」が情報を取得すると仮定します(詳細は以下を参照)が、何でも取得できます。

  • カーネルのアップグレードの可能性を確認するためにlinux-genericをインストールする必要はありません。

  • linux-genericが現在依存しているカーネルバージョンを判別するためにlinux-genericをインストールする必要はありません。

  • 潜在的なカーネルアップグレードにセキュリティ修正が含まれているかどうかを判断するためにlinux-genericは必要ありません。

さらに、この情報を最初に取得するものは何でも、情報はローカルに保持されます(おそらくクリアするまで)。そのため、オフラインでlinux-genericがインストールされていなくても、apt-checkは必要な情報にアクセスできます。おそらくそれはBY DESIGNによって使用されません。ただし、スクリプトで使用できます。linux-genericはインストールされていません。オフラインでもシステムで動作するテストの2つの例を次に示します。

$ apt-cache showpkg linux-image-4.4.0-75-generic | grep "$(lsb_release --codename --short)-security"

そして出力:

4.4.0-75.96 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_xenial-security_main_binary-AMD64_Packages) (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_xenial-updates_main_binary-AMD64_Packages)

File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_xenial-security_main_binary-AMD64_Packages

File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_xenial-security_main_i18n_Translation-en

$

したがって、4.4.0-75 HASセキュリティ修正。

対照的に:

$ apt-cache showpkg linux-image-4.4.0-77-generic | grep "$(lsb_release --codename --short)-security"

および出力(プロンプトの戻り値):

$ 

4.4.0-77にはありません。


apt-checkとaptを再実行します。

Update-notifier-common(上記のupdate-notifierではない)の一部であるapt-checkは、Davidが示すように、おそらく「apt-get update」に依存する場合でも、パッケージに関する情報をaptに依存する場合があります。カーネルのアップグレードの可能性については、linux-genericに依存してください。それは私が期待するものであり、代替手段はありませんが、奇妙なことに、開発者が依存関係を間違ってマークしていない限り、aptはapt-checkの依存関係ではありません:

$ apt-rdepends update-notifier-common | grep apt

そして出力:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
  Depends: python3-apt
python3-apt
  Depends: libapt-inst2.0 (>= 1.1~exp9)
  Depends: libapt-pkg5.0 (>= 1.1~exp9)
  Depends: python-apt-common
libapt-inst2.0
  Depends: libapt-pkg5.0 (>= 1.1~exp9)
libapt-pkg5.0
python-apt-common
$

したがって、理論的には、apt-checkを実行するのにaptは必要ありません。dpkgとdselectで管理されるシステムで使用できますが、どのように機能するかはわかりません。確かに、実際に試してみるまではそうなる可能性はありませんが(後で好奇心がなくなるかもしれません)、それが依存関係のマーク方法です。コマンドの1つが機能する必要がある場合、開発者はaptをupdate-notifier-commonの依存関係としてマークすると思いますが、それは見落としかもしれません。

だから、元の質問に関して、私が今疑っていることは本当です:

「潜在的なカーネルアップグレードを処理するためにapt-checkを行うことができます。これは非カーネルアップグレードと同じ方法で、それらを検出し、セキュリティ修正を組み込むものとメタを持たないものを区別します。 -package linux-generic installed? "

いいえ、おそらくlinux-genericでは使用できません。

「そして、apt-checkでこれができない場合、他にできるプログラムはありますか?」

いいえ、いわば、箱から出してではありません。

しかし、できることを作り直す

Waltinatorが示唆したように、知識と傾向があれば、apt-checkを書き直すことができます。しかし、Davidが提案したように、この関数はおそらく他のツールでスクリプト化でき、おそらくapt-checkを書き直す方法を学ぶよりもずっと簡単にできるでしょう。

前に述べたように、grepを適用し、出力にマジックをカットすることで、Canonicalに祝福された最新の最も輝くカーネルを含むパッケージの名前を取得できます。

apt-get install --simulate linux-generic

そして、あなたはそれを次のようなものでセキュリティ修正を持っている/持たないとして分類することができます

apt-cache showpkg linux-image-4.4.0-75-generic | grep "$(lsb_release --codename --short)-security"

上記のように。

理想的には、これをスクリプト化するために、linux-genericが依存していたものの完全なバージョン履歴が必要です。

バージョン100がインストールされています。

バージョン101にはセキュリティの修正がありましたが、その週はコンピューターの電源が入りませんでした。

バージョン102にはセキュリティ修正がありません(101に関連していますが、101で作成されたものがまだあるため、100に関連しています)。

Linux-genericの完全なバージョン履歴をカールし、依存カーネルがどのリポジトリの「ポケット」に公開されているかを何らかの方法で見つけることができればいいと思います。これまでのところ、古いバージョンでこれを行う方法を発見しましたまだリポジトリにあります。

このコマンド:

apt-cache madison linux-generic

正しい方向に向かっていますが、レポジトリのWASではなく、レポジトリのISのみを取得していると思うので、得られる情報が偽陰性のシナリオを防ぐのに十分かどうかわかりません上記で詳述。上記の例で、101がレポからすでに削除されている場合、「apt-cache madison linux-generic」からの情報では十分ではないと思います。

そして、そうそう

誰かがこれに興味を持ち、それを知らずに多くの時間を費やさないように、もう1つ指摘しなければなりません:

始めたばかりで頑固なので、私はまだこれをいじっています。しかし、私が知る限り、偶然のことですが、問題を与えたカーネルにはセキュリティの修正がないため、このための作業スクリプトがあれば、ゼニアルシステムを壊すことはなかったでしょう、とAndyは私に言います4.4.0-77はまれなケースであり、linux-genericがDOに依存しているカーネルアップグレードの大部分にはセキュリティ修正が含まれています。彼が「99%」と言ったとき、彼は比/的/双曲線的だったと思うが、それを可能にしたとしても、潜在的なカーネルのアップグレードに適用されるapt-checkのようなメカニズムは不必要な(セキュリティの面で)非常に頻繁にアップグレードするため、不必要なカーネルアップグレードがaptやその他の重要なシステムコンポーネントを破壊することを防ぎます。私にとっては偶然の出来事だったようです。ところで、4.4.0-78は私には問題なく動作します。アンディは正しかった-77については何でも修正された。

0