ex1-lab

Linux, CentOS, Mac OS X, Windows, 仮想化, Apache等のLinux中心に気になることをメモがわりに・・・

pacthコマンドの当て方・適用方法(Linux)

    この記事は約4分で読むことができます。

Patchの当て方・適用の仕方

Apacehの脆弱性の関係でPatchを当てたのですが、久しぶりにPatchコマンドを使うと「-p」のオプションの使い方が忘れていたので備忘録としてメモしておきます

Patchの「-p」のオプションについて

patchコマンドはオリジナルファイルに差分ファイルを適用するコマンドです。差分を適用することで脆弱性等の対策したファイルとして脆弱性の対応します。
このパッチを当てる際によく使うオプションの「-p」にオプションをよく使います。
オプションをmanページで確認すると下記のようになっていますがわかりにくいですが、パッチコマンドの叩く階層から「-pnum」で指定した階層を何回層省略するかを指定する時に使います

少しわかりにくいので、サンプルのパッチファイルを確認しながら説明します

-pnum または --strip=num
パッチファイルで見つかったファイル名それぞれについて、num個のスラッシュを含む最小のプレフィクスを取り除く。
隣接した1個または複数のスラッシュの並びは 1 個のスラッシュとして数えられる。
このオプションはパッチを送った人と異なるディレクトリにファイルを格納している場合のために、パッチファイル中のファイル名の扱いを変更する。

patchコマンドを実行する位置からpatchを適用するファイルの場所を指定する際に使用します。実際にApacehのパッチを当てる時の手順で説明します

まずはパッチを当てるApacheのファイルとPatchファイルをダウンロードします。

Apacheは解凍して、Patchファイルは、中身を確認します

中身を確認すると「diff --git include/ap_mmn.h include/ap_mmn.h」と記述があります。この「ap_mmn.h」というファイルに差分を適用します。
このpatchファイルではそのファイルのパスは「include/ap_mmn.h include/ap_mmn.h」となります。

Apacheを解答してできたディレクトリは階層は以下のようになります。

「ap_mmn.h」は「httpd-2.2.32/include/ap_mmn.h」の箇所にあるので、パッチを適用する場合は「httpd-2.2.32/」に移動してパッチコマンド「patch -p0 < ../CVE-2017-3167.patch」と叩けばOKです

-p0」とオプションを付けていますが、「/」の位置は変更しなくても差分を適用できるので「-p0」となります。

patchコマンドで「-p1」のオプションを使用する場合

「-p1」となる場合は、パッチファイルの中身を確認して説明します。下記のパッチファイルですがqmailのパッチファイルです。

中身を確認するとqmailのソースを解答したディレクトリに移動して「patch -s -p1 < patch-to-patch-file」となっています。これは差分ファイルが「qmail-1.03.orig/date822fmt.c」とqmailソースディレクトリのバージョンを含んでいたり「qmail-1.03.orig」のようにバックアップ用途のディレクトリ名になっているので、「/」の位置を1個取り除く必要があるためです。

To apply this patch, cd into the qmail source directory and type...
patch -s -p1 < patch-to-patch-file

「-p1」とすることで、「qmail-1.03.orig/date822fmt.c 」の場合は「qmail-1.03.orig」を取り除き、「date822fmt.c 」となります。「qmail-1.03/date822fmt.c 」の場合は「qmail-1.03」を取り除き、「date822fmt.c」となります。

こちらもわかりにくい場合はlsコマンド等で、差分対象のファイルを指定してエラーならないか確認すればいいと思います。

 



 - Linux , , ,