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
生成を使用できます。tar
pax
pax -s '#^/##' -wz < Files.txt > ABCD.tar.gz
-s '#^/##'
ファイルがアーカイブに書き込まれると、ファイル名に代替パターンが適用されます。これは先導的なものを奪う/
。