Linuxサーバー全体をソース管理下に置く(git)


17

gitを使用して、Linuxサーバー全体をバージョン管理下に置くことを考えています。その背後にある理由は、悪意のある変更/ルートキットを検出する最も簡単な方法かもしれないということです。システムの整合性を確認するために必要だと思うすべて:レスキューシステムを使用して毎週Linuxパーティションをマウントし、gitリポジトリがまだ調子が悪いかどうかを確認し、システムに加えられた変更を検出するためにgitステータスを発行します。

ディスク容量の明らかな浪費とは別に、他の負の副作用はありますか?

それは完全にクレイジーなアイデアですか?

少なくとも/ devと/ procを除外する必要がある可能性が高いので、ルートキットをチェックする安全な方法ですらありますか?


5
私は「完全にクレイジーなアイデア」に投票しますが、意味合いが多すぎます。ファイルの変更は常に発生し、アップグレード手順が悪夢になります。
forcefsck

@forcefsck-ファイルの変更が常に発生するのはなぜですか?システムのアップグレード中に発生するのではないでしょうか?
トビアスヘルコルン

1
以下のようなものは使用しない理由だけではなく、思想、dirvish --link-DESTまたはrsyncのか?バックアップを作成するためにdirvishを使用すると、変更内容を示す各バックアップの優れたレポートが提供されます。--dry-runモードでrsyncを実行して、現在の状態とバックアップを比較できます。dirvishを使用する場合、バックアップシステムとして十分にテストされたツールを使用します。
ゾレダチェ

回答:


16

それは「悪い考え」(tm)です。他のすべてを除けば、リポジトリは動作が遅くなり、すべてのリビジョンが保持されるにつれて悪化します。

puppet / cfengine / chefなどの集中管理を試してください。期待どおりに物事を保持し、予期しない変更を元に戻します。

それをiwatchのようなものと組み合わせて、不正なファイル変更の電子メールを取得します。

カスタムアプリケーションを展開する必要がある場合は、さらにrpm / debファイルと組み合わせてください。

時々rkhunterやchkrootkitのようなものをキックに投入すれば、うまくいくはずです。

仕事完了。


悪い考えのための+1-集中管理(puppet / cfengine / chef / radmind / etc。)を使用すると、定義された要件に従ってシステムが構成され、ほとんどが「tripwire」としても使用できるようになります。 type systemは、必要のないものが変更されたときに通知します。
voretaq7

本当に悪い考えだと思います。わかりました、どのファイルが新しく、変更されたかを見ることができます。しかし、gitを実行する場合、ファイルを解凍して計算するには大量のCPUが必要です。マシン全体でこれを行うと、多くの時間がかかります。
ルネ・ヘレ

1
そのリストにもう1つ追加します。etckeeperを除き、etckeeperはgitリポジトリを実行します。
シェーンマッデン

gitのようなリポジトリは信じられないほど高速です。そして、私が念頭に置いているサーバーはダウンタイムをスケジュールしているので、CPUまたはIOを心配していません(そのため、レスキューシステムを使用してマウントする可能性があります)
トバイアスHertkorn

私は理解していないもの:どのように集中管理システムでは、偽陽性が存在しないことを保証しない-システムは、システムをチェックするために使用されるツールが損なわ=偽陽性されている+侵害された
トビアスHertkorn

5

もう1つの方法は、tripwireをセットアップすることです。これは、システム上のすべての重要なファイルをスパイダーし、許容できないと定義した方法で変更されたものを判別するGPLのソフトウェアです。変更は、iノード番号を介して、暗号強度の強いチェックサムまでmtimeとして定義できます。

の変更されたファイル、/var/runでのDHCPクライアントファイルの変更などについて、毎晩大量のレポートを取得したくない場合は、設定と調整が必要になりますが/etc、その問題が発生した場合は、とても助かります。

ファイルプロパティのデータベースは、マシンに認識されていないキーで署名されているため、ツールがデータベースまたはtripwireバイナリを悪意を持って変更したことはありません。完全な確実性を確保するために、完全なフォレンジック分析が必要な場合は、tripwireツールとデータベースのコピーを読み取り専用メディアに焼き付けることができます。これは、サーバーにマウントし、ディスクの焼き付け以降のすべての変更を検証するために使用できます。

これを行う場合は、マシンを運用環境に展開する前にtripwireをセットアップして実行することが非常に重要です。そうしないと、悪意のあるユーザーがマシンに感染する機会がなかったことを完全に確信することはできません。配線された。



2

@Sirexはすでに非常に良い答えを提供してくれましたが、セキュリティをさらに強化したい場合、それに対処する最善の方法は、最初に予防してから検出することです。

/ filesystemが読み取り専用でマウントされたシステムをセットアップしてください。/ tmpをnoexec、nodevオプションでマウントされた別個のramfsにします。システムが機能するためには、実際に/ varを読み書き可能にマウントするだけです。そのため、/ varの下でrw、noexec、nodevを使用してfsをマウントし、/ var / tmpへの書き込み許可を削除します(デーモンではほとんど必要ありません。これは構成可能である必要があります)。また、カーネルのセキュリティパッチを使用して、ユーザーによるリソースへのアクセスをさらに制限します。たとえば、grsecを試してください。可能な限り最も制限の厳しいルールでファイアウォールを使用してください。

一部のディストリビューションでは、システム強化に関する詳細なドキュメントを提供しています。例えば:


0

システムでツールが行う変更を分析することをお勧めします。

  1. VMに裸のLinuxをインストールする
  2. ルートGitを初期化する
  3. 分析したいツールをインストールする
  4. ロールがシステムで行ったすべての変更を確認する

... VMを削除します

.gitignore procなどのようにファイルに多くのフォルダーを追加する必要があります。


0

ファイルシステム全体の特定のフォルダーをバージョン管理下に置くことに関心がある場合は、次のアプローチが有効です。

まず、/レベルでGitリポジトリを作成します。

$ cd /
# git init

次に、(/programming//a/11018557/320594に基づいて)/.gitignore特定のフォルダーのみをホワイトリストに登録するなど、ホワイトリストのみに作成/path/to/versioned/config/folder/ます

/*
!/path/
/path/*
!/path/to/
/path/to/*
!/path/to/versioned/
/path/to/versioned/*
!/path/to/versioned/config/
/path/to/versioned/config/*
!/path/to/versioned/config/folder/
!/.gitignore

次に、最初のコミットを作成します。

# git add -A
# git commit -m "Initial commit"

次に、必要に応じてバージョン管理下にある追加のフォルダーを追加します。

PS:

前の方法に加えて、/ etc /をバージョン管理下に置く必要がある場合は、その特定のフォルダーがその目的により特化されているため、その特定のフォルダーのバージョン管理にetckeeperhttps://etckeeper.branchable.com/)を使用することをお勧めします(たとえば、パッケージのインストール後に自動的にコミットされます)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.