ファイルの抽出に使用されるコマンドに関係なく、ファイルが抽出される場所をtarballから変更できますか?

ファイルの抽出に使用されるコマンドに関係なく、ファイルが抽出される場所をtarballから変更できますか?

私の同僚の一人は、タルボールを抽出するときに自分が知らない間に変更が発生する可能性があるので注意する必要があると述べました。私はいつもタルボールが圧縮されたファイルの階層にすぎないと思いました。そのため、/tmp/example/ に解凍すると、ファイルを /etc/ やそのような場所にこっそり入れることはできません。

答え1

これに関して、さまざまなtarユーティリティが異なる動作をするので、注意することが最善です。作成されていないtarファイルの場合は、解凍する前にディレクトリを一覧表示する必要があります。

ソラリスタル:

tarファイルから指定されたファイルを抽出し、現在のディレクトリに基づいてtarfileで指定されたディレクトリに書き込みます。抽出するファイルとディレクトリの相対パス名を使用します。

tarアーカイブに含まれる絶対パス名は、絶対パス名を使用して解凍されます。つまり、先行スラッシュ(/)は削除しません。

フル(絶対)パス名を持つtarファイルの場合は、次のようになります。

/tmp/real-file
/etc/sneaky-file-here

...このようなファイルを抽出すると、最終的には2つのファイルになります。

GNU タール:

デフォルトでは、GNU tarは入力または出力から先行文字を削除し、コンポーネントを含む/ファイル名について文句を言います..。この動作をオフにするオプションがあります。

--absolute-names

-P

ファイル名から先行スラッシュを削除するのではなく、ファイル名に..ファイル名コンポーネントを含めることを許可します。

... GNU tarを使用してフルパスtarファイルを抽出する場合いいえこの-Pオプションを使用すると、次の内容が表示されます。

/tar: メンバー名から先行削除

現在のディレクトリのサブディレクトリにファイルを抽出します。

AIX タール:

これについては何も言わず、Solaris tarと同じように動作します。フル/絶対パス名を持つtarファイルを作成して抽出します。

HP-UX タール: (より良いオンライン参照を歓迎します)

警告する

絶対パス名を相対位置に復元することはできません。

OpenBSD タール:

-P

/パス名から先行スラッシュ()を削除しないでください。デフォルトは先行スラッシュを削除することです。

一部のオプションは、macOS、FreeBSD、およびNetBSDでも同じ意味で実装されています-PtartarFreeBSD..ない場合 。-P

ヒリー・ツールスター:

-/

アーカイブを抽出するときは、ファイル名から先行スラッシュを削除しないでください。絶対パス名を含むTarアーカイブは、一般的に良い考えではありません。他のtar実装では、既存のファイルを削除せずに抽出することはできません。したがって、抽出モードでは、デフォルトでファイル名から先行スラッシュが削除されます。

答え2

起こった興味深いことの一つタール爆弾現在のディレクトリの権限をtarballに含まれる権限に変更するのはまさにこれらです。

たとえば、tarballに「。」ディレクトリが含まれていてルートとして/ tmpに抽出すると、ルート以外は/ tmpに書き込むことができなくなり、システムが破損します。

関連情報