tarを克服する方法:メンバー名から先行する「/」を削除します。

tarを克服する方法:メンバー名から先行する「/」を削除します。

Linuxでこのコマンドを実行しようとしています。

tar zcvf ABCD.tar.gz -T Files.txt

次のエラーが発生します。

Error: tar: Removing leading `/' from member names

に基づいて検索/SED crontabの1行tarステートメントで絶対パスを相対パスに変換する、次のコマンドを試しました。

tar -C / -zcvf ABCD.tar.gz -T Files.txt

しかし、まだ同じエラーメッセージが表示されます。

答え1

これは特徴です!

圧縮および抽出中にアーカイブにスラッシュプレフィックスが含まれていると、/攻撃者が重要なファイル(たとえば/etc/shadow)を抽出するように誘導してそのファイルを上書きできることを意味します。

実際にはエラーメッセージではなくメッセージです。

実際に無効にするには、ディレクトリを親ディレクトリに変更し、相対名を使用します。

cd /
tar -zcvf path/to/files

代わりに

tar -zcvf /path/to/files

あなたの場合、ファイル名は-T Files.txt絶対的な場所だと思います。

答え2

GNU tarでファイル名の先行スラッシュを保持するために必要なオプションは次のとおりです。

   -P, --absolute-names
          Don't strip leading slashes from file names when creating archives.

だから、tar zcvf ABCD.tar.gz -P -T Files.txt

もちろん、スラッシュを使用しない限り、アーカイブを抽出するとスラッシュが削除されることがあります-P

一方、スラッシュを削除したいがtarが文句を言わない場合は、同様のことを行う必要がありますsed s,^/,, files.txt | tar czf foo.tar.gz -C / -T -

答え3

もう一つの可能​​な答えは、アーカイブが安全に抽出できるパス名を持つことを望み、ファイルリストから先行スラッシュを削除したいということです。

この場合、オプションはありませんが、互換ファイルtar生成を使用できます。tarpax

pax -s '#^/##' -wz < Files.txt > ABCD.tar.gz

-s '#^/##'ファイルがアーカイブに書き込まれると、ファイル名に代替パターンが適用されます。これは先導的なものを奪う/

関連情報