抽出されたすべてのファイルが特定のプレフィックスディレクトリの下に配置されるようにtarファイルを抽出したいと思います。 tarファイルを外部ディレクトリに書き込もうとすると、抽出は失敗します。
あなたが想像できるように、これにより信頼できないtarファイルを安全に抽出できます。
GNUを使用してこれをどのように実行できますかtar
?
私は次のことを思い出しました。
tar --exclude='/*' --exclude='*/../*' --exclude='../*' -xvf untrusted_file.tar
しかし、それが妄想的な程度かどうかはよくわかりません。
ベストアンサー1
妄想に陥る必要は全くありません。 GNU -tar
事実どのtar
過去30年間に書かれたよく設計されたプログラムは、基本的に..
スラッシュで始まるか、要素を含むtarballのファイル抽出を拒否します。
tar
現代のプログラムが潜在的に悪意のあるタルボールを抽出することを強制するには、多くの努力が必要です。 GNUとBSDの両方にこの保護を無効にするオプションがtar
必要です。-P
リソースセクションを参照してください。絶対ファイル名GNU tar マニュアルにあります。
-P
ただし、POSIXはこのフラグを指定しないため、他のtar
プログラムではこの問題を処理する別の方法があるかもしれません。たとえば、Schilyツールはstar
プログラムこれらの保護機能を使用し-/
て-..
無効にしてください。
単純なコマンドに追加することを検討できる唯一のことは、安全な一時ディレクトリにコンテンツを抽出するように強制するtar
フラグであるため、最初にそこに-C
到達する必要はありません。cd
火法:
技術的には、
tar
POSIXはこれを指定しません。彼らはUnixコンピューティングの世界で私たちが何を使うべきかを話そうとします。pax
tar
これでとが置き換えられましたが、cpio
コンピューティングの世界では、これを無視します。ここで、POSIX仕様には、
pax
前のスラッシュや埋め込み要素を処理する方法が記載されていないことに注意することが重要です..
。非標準--insecure
フラグがあります。BSDpax
埋め込みパス要素に対する保護を抑制します..
が、先行スラッシュに対する基本的な保護はありません。 BSDpax
のマニュアルページでは、-s
絶対パスリスクを処理するための代替ルールの作成を間接的にお勧めします。これは、事実上の基準が依然として積極的に使用され、法的基準がほとんど無視される場合に発生します。