DevOps & Platform Eng

Debianファイル整合性:パッケージチェックはdebsumsで

インストールしたはいいが、本当に「正しい」状態のままだろうか?延々と続くdiff作業は忘れろ。`debsums`は、Debianパッケージファイルが乗っ取られていないか、まっすぐに答えてくれる。

{# Always render the hero — falls back to the theme OG image when article.image_url is empty (e.g. after the audit's repair_hero_images cleared a blocked Unsplash hot-link). Without this fallback, evergreens with cleared image_url render no hero at all → the JSON-LD ImageObject loses its visual counterpart and LCP attrs go missing. #}
debsumsコマンドとその出力を表示するターミナルのスクリーンショット。

Key Takeaways

  • `debsums`はDebianパッケージファイルを保存されたMD5チェックサムと比較して、ローカルの変更や破損を検出するのに役立つ。
  • これは、既知のエクスプロイトではなくファイル整合性に焦点を当てることで、`debsecan`のような脆弱性スキャナーを補完する。
  • `/etc`内の設定ファイルはデフォルトで除外されるが、`-a`フラグを使用して含めることができる。
  • このツールはチェックサムのないパッケージ(`-l`)を特定でき、キャッシュされた`.deb`ファイルを使用してより広範なチェックを実行する方法を提供する。
  • 実用的なワークフローには、初期スキャン、設定ファイルのチェック、チェックサムの欠落の特定、および包括的な整合性スキャンの実行が含まれる。

ファイルは変わる。

これは、システム管理の歴史と同じくらい古い話だ。DebianやUbuntuのボックスにパッケージをインストールして、しばらくは世界が平和な状態にある。だが、ふとした拍子に、過剰にクリーンアップしすぎるスクリプトが走ったり、誰かが触ってはいけない設定ファイルをいじったり、あるいは予期せぬシャットダウンの後にディスクが反抗したりするかもしれない。突然、頭を抱えることになる。「これ、期待通りの状態のままだろうか?何かが、いや、何でもいいから、いじられていないだろうか?」

<a href="/tag/debsums/">debsums</a>がその答えをくれる。

いや、みんな経験あるはずだ。システムがおかしい、と感じながら、ログをgrepしたり、ディレクトリをdiffしたり、暗闇で手探りしたり、何時間も費やす。あるいは、まさにこうしたデジタルの探偵作業のために作られたツールを使えばいい。Debianベースのシステムにとって、そのツールこそがdebsumsだ。

派手さはない。見出しを飾ることもない。だが、パッケージがインストールしたファイルが、文字通り、ディスク上で変更されていないかを知りたいとき、これがお役立ちちなのだ。そして、正直に言おう、テクノロジーの熱狂の渦の中で、これほど根本的に実用的なものを見つけるのは勝利に他ならない。

脆弱性スキャンを超えて

さて、これを万能のセキュリティ対策だと混同しないでほしい。ブレーキを踏もう。debsecanツールを書いている連中は、既知の脆弱性――セキュリティチームを寝汗にさせるCVE――を探すのに忙しい。debsumsは全く別のゲームをしている。パッケージが脆弱かどうかを問うているのではない。そのパッケージがそこへ置いたファイルが、元のファイルのままだろうか、と問うているのだ。

こう考えてみてほしい。debsecanはお前のIDをチェックして、監視リストに載っていないか確認する警官だ。debsumsは、お前の荷物をマニフェストと照合する警備員だ。2つの異なる仕事、どちらも重要だが、容疑者尋問に荷物検査員を送ったりはしない。

debsumsの魔法は、システム上のファイルをMD5チェックサムと比較することで行われる。これらのチェックサムは、各パッケージについて/var/lib/dpkg/info/*.md5sumsにきれいにしまわれている。ディスク上のファイルの計算されたチェックサムが、その.md5sumsファイルに記録されているものと一致しなければ、debsumsはフラグを立てる。

何が検知できるのか?

  • ローカルで変更されたパッケージファイル(典型的な原因)。
  • 完全に紛失したファイル。
  • 発生する可能性のある、特定の種類のデータ破損やビットローテーション。

しかし、manページが素早く指摘しているように――そして、これに注意すべきだ――これは完全なセキュリティ監査ではない。主に、ローカルで改ざんされたファイルや、ハードウェアの問題によって破損したファイルを見つけるためのものだ。その区別は、期待値を設定する上で極めて重要だ。

始め方:簡単(ほとんど)

DebianやUbuntuを使っているなら、debsumsの導入は標準的なコマンドをいくつか実行するだけだ。

sudo apt-get update
sudo apt-get install debsums

念のため、これがあることを確認するには、簡単なコマンドを打つ。

debsums --version

これで確認できる。

ただ様子を見ているときは、小さく始めるのが良い。もし特定のパッケージ、例えばbashがおかしいなら、こう実行する。

debsums bash

すべて問題なければ、おそらく何も表示されないだろう。システム管理者にとっては、それが良い沈黙だ。

より迅速なトリアージのために、特に問題だけを確認したい場合は、--silentフラグが役立つ。

debsums --silent bash

これは変更されていないファイルの出力をすべて抑制し、エラーのみを残す。便利だ。

さて、ホスト全体を素早くスキャンしたい場合――私がシステムヘルスチェックで使うようなコマンド――これがお勧めだ。

sudo debsums -c

-cフラグは--changedを意味し、--silentを内包している。つまり、実際に変更されたファイルのみを報告する。このコマンドが何も返さなければ、通常は安堵のため息をついていいだろう。

設定ファイル:慎重に扱え

ここでdebsumsが少しニュアンスが出てくる、そして正直、賢い点だ。

デフォルトでは、debsums/etcにある設定ファイルを積極的に無視する。なぜか?これらのファイルは変更されることが期待されているからだ。アプリケーションをインストールするとき、その設定を微調整することがよくある。これらのカスタム変更をパッケージのデフォルトで上書きするのは悲劇だ。

もし設定ファイルもチェックに含めたい――たとえば、意図しない変更が心配だ――という場合は、-aフラグ(--allの略)を使える。

sudo debsums -ca

そして、設定ファイルだけをチェックしたい場合も、カバーされている。

sudo debsums -ce

これらのオプションは慎重に使おう。変更された設定ファイルが必ずしも悪いことではない。時には、それは単に通常の、責任あるシステム管理の一部だ。

チェックサムが見つからない場合

すべてのパッケージに便利な.md5sumsファイルが付属しているわけではない。debsumsは、-lフラグを使って、これらの情報が欠けているパッケージを教えてくれる。

debsums -l

これは、これらのパッケージが本質的に侵害されているとか壊れているという意味ではない。単に、debsumsがローカルチェックサムに対してそのファイルを検証できない、なぜならそもそも比較対象がないからだ。これらのパッケージについては、個別に、リポジトリを信頼するか、より深い手動チェックを行うなどの方法で対応する必要がある。

チェックサムキャッシュの再構築

debsumsにもっと多くのデータを与えたい、特にチェックサムのないパッケージのためにどうすればいいか?Debianのmanページには便利なトリックがある:APTキャッシュにパッケージアーカイブをダウンロードすることだ。

まず、チェックサムが欠けているパッケージのリストを取得する。

debsums -l

次に、そのリストを使って対応する.debファイルをダウンロードする。

sudo apt-get --reinstall -d install $(debsums -l)

これで、/var/cache/apt/archivesディレクトリがポピュレーションされる。すると、debsumsはこれらのキャッシュされたアーカイブを使用して、以前は利用できなかった場所のチェックサムを生成できる。その後、-g(generate)と-p(path)フラグを使用して、より包括的なチェックを実行できる。

sudo debsums -cagp /var/cache/apt/archives

これらのフラグの意味はこうだ。

  • -c: 変更されたファイルを表示。
  • -a: 設定ファイルを含める。
  • -g: チェックサムを欠いているパッケージのチェックサムを生成する(キャッシュされた.debファイルを使用)。
  • -p /var/cache/apt/archives: キャッシュされた.debファイルがあるディレクトリを指定する。

このコマンドシーケンスは、Debianホストで実行できる最も強力な整合性チェックの1つと言えるだろう。これは、単に迅速な変更を探すだけでなく、システム全体をスキャンするものだ。

システムチェックのための実践的なワークフロー

もし私がDebianサーバーの調子がおかしいというタスクを与えられたら、おそらく次のような順序で進めるだろう。

  1. 変更箇所のクイックスキャン: bash sudo debsums -c これは、インストール以来変更されたファイルがないか、即座に確認できる。これが最初の防御線だ。

  2. 設定ファイルを含める: bash sudo debsums -ca 最初のスキャンで何も検出されなかったが、まだ疑わしい場合は、設定ファイルを含めるように範囲を広げる。これらはしばしば意図的に変更されるものだが、何が変更されたかを知っておくのは良いことだ。

  3. チェックサムのないパッケージの特定: bash debsums -l これは、debsumsが検証できないパッケージをフラグ付けする。これらのパッケージは別途調査が必要だ。

  4. 欠落しているパッケージアーカイブのダウンロード: bash sudo apt-get --reinstall -d install $(debsums -l) 必要なファイルをGrabして、より詳細なチェックの準備をする。

  5. 包括的な整合性スキャン: bash sudo debsums -cagp /var/cache/apt/archives これがグランドフィナーレだ。利用可能なすべての情報を使用して、システムの整合性についての最も明確な画像を提供する、徹底的なチェックだ。

この構造化されたアプローチは、/usr以下のファイルをランダムにdiffして、正しい問題に偶然行き当たることを願うよりも、はるかに明確な信号を提供する。それは体系的だ。

変更からの復旧

さて、debsums -c/usr/bin/example-toolのようなファイルを変更したと出力されたら、どうするか?それがどのパッケージに属するかを知る必要がある。dpkg -Sコマンドが役に立つ。

dpkg -S /usr/bin/example-tool

これはexample-package: /usr/bin/example-toolのようなものを教えてくれ、責任あるパッケージを明確に特定してくれる。

パッケージ名がわかったら、再インストールに進むことができる。debsumsのmanページにはこのためのパイプラインが記載されているが、ステップバイステップで分解すると、より多くの制御が得られる。

  1. 変更されたファイルを見つける: bash sudo debsums -c

  2. 変更されたすべてのファイルの所有パッケージを取得し、一意にする: bash dpkg -S $(sudo debsums -c) | cut -d: -f1 | sort -u

  3. それらのパッケージを再インストールする: bash sudo apt-get install --reinstall $(dpkg -S $(sudo debsums -c) | cut -d: -f1 | sort -u)

最後のコマンドには注意してほしい。パッケージ管理されたファイルを元の状態に復元するのに非常に役立つ。しかし、それはすべての変更されたファイルを盲目的に上書きすべきだという魔法の杖ではない。もしそのファイルが意図的に変更され、その変更がまだ必要なのであれば、完全な再インストールはシステムを壊す可能性がある。盲目的に復元する前に、常にファイルが変更された理由を理解すること。

これは絶対的で達成不可能なセキュリティに関するものではない。実用的で検証可能な整合性に関するものだ。そして、そのために、debsumsはDebian管理者のツールキットにおいて不可欠なツールだ。それは憶測を排除する。


🧬 関連インサイト

Written by
DevTools Feed Editorial Team

Curated insights, explainers, and analysis from the editorial team.

Worth sharing?

Get the best Developer Tools stories of the week in your inbox — no noise, no spam.

Originally reported by dev.to