如何克服 tar:从成员名称中删除前导“/”

如何克服 tar:从成员名称中删除前导“/”

我正在尝试在 Linux 中运行这个命令:

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

我收到以下错误:

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

基于查找 /SED 在 crontab 的单行 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 '#^/##'在将文件名写入存档时,会对文件名应用替换模式。这个剥夺了领先的/.

相关内容