无论用于提取文件的命令如何,tarball 都可以更改文件提取到的位置,这是真的吗?

Ada*_*rey 29 tar filenames

我有一个同事说你需要小心提取 tarball,因为它们可以做出你不知道的改变。我一直认为 tarball 只是压缩文件的层次结构,因此如果您将其解压缩到 /tmp/example/ 中,则不可能将文件潜入 /etc/ 或类似内容中。

Jef*_*ler 43

不同的 tar 实用程序在这方面的表现不同,因此最好小心。对于不是您创建的 tar 文件,请务必在提取前列出目录。

Solaris 焦油

命名文件从 tarfile 中提取并写入 tarfile 中指定的目录,相对于当前目录。使用要提取的文件和目录的相对路径名。

tar 存档中包含的绝对路径名使用绝对路径名解包,即前导正斜杠 (/) 不会被剥离。

对于具有完整(绝对)路径名的 tar 文件,例如:

/tmp/real-file
/etc/sneaky-file-here
Run Code Online (Sandbox Code Playgroud)

...如果你提取这样的文件,你最终会得到这两个文件。

GNU 焦油

默认情况下,GNU tar 删除/输入或输出的前导,并抱怨包含..组件的文件名。有一个选项可以关闭此行为:

--absolute-names

-P

不要从文件名中去除前导斜杠,并允许包含..文件名组件的文件名。

...如果您在使用该-P选项的情况下使用GNU tar 提取完整路径的 tar 文件,它会告诉您:

tar:/从成员名称中删除前导

并将文件解压缩到当前目录的子目录中。

AIX 焦油

什么也没说,它的行为就像 Solaris tar——它将创建和提取具有完整/绝对路径名的 tar 文件。

HP-UX tar :( 欢迎更好的在线参考)

警告

没有办法将绝对路径名恢复到相对位置。

OpenBSD 焦油

-P

不要/从路径名中去除前导斜杠 ( )。默认是去掉前导斜杠。

在 macOS、FreeBSD 和 NetBSD 上也-P实现了一些选项tar,它们具有相同的语义,此外tarFreeBSD和 macOS 上将“拒绝提取其路径名包含..或其目标目录将被符号链接更改的存档条目”而没有-P.

schlytools 明星

-/

提取存档时不要从文件名中去除前导斜杠。包含绝对路径名的 Tar 档案通常是一个坏主意。对于其他 tar 实现,如果不破坏现有文件,它们可能永远不会被提取。出于这个原因,在提取模式下,默认情况下会从文件名中去除前导斜杠。

  • 很长一段时间,GNU tar 都忽略了包含`..` 的路径名存在安全风险的事实,所以使用`star` 或最近的`gtar`。还可以查看 `star` 示例 tar 存档,其中包含手工制作的 `tar` 标头,这些标头导致大多数 `tar` 实现在没有警告的情况下删除文件。 (2认同)
  • 检查 http://schlytools.sourceforge.net/man/man1/star.1.html (2认同)

mos*_*svy 9

tar 炸弹发生的有趣事情之一是它们将当前目录的权限更改为 tarball 中包含的权限。

例如,如果 tarball 包含 '.' 目录,然后您以 root 身份将其解压到 /tmp 中,它会使除 root 之外的任何人都无法写入 /tmp 从而破坏您的系统。