无论使用什么命令来提取文件,tarball 是否都可以更改文件的提取位置?

无论使用什么命令来提取文件,tarball 是否都可以更改文件的提取位置?

我的一位同事说您在提取 tarball 时需要小心,因为它们可能会进行您不知道的更改。我一直认为 tarball 只是压缩文件的层次结构,因此如果将其解压到 /tmp/example/ ,它不可能将文件偷偷放入 /etc/ 或类似的内容中。

答案1

不同的 tar 实用程序在这方面的行为有所不同,因此最好小心。对于您未创建的 tar 文件,请务必在解压之前列出目录。

Solaris 焦油:

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

tar 归档文件中包含的绝对路径名是使用绝对路径名解包的,即不去掉前导斜杠 (/)。

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

/tmp/real-file
/etc/sneaky-file-here

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

GNU 焦油:

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

--absolute-names

-P

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

...如果您使用 GNU tar 提取全路径 tar 文件没有使用该-P选项,它会告诉您:

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

并将文件提取到当前目录的子目录中。

AIX 焦油:

对此什么也没说,并且其行为与 Solaris tar 相同——它将创建并提取具有完整/绝对路径名的 tar 文件。

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

警告

无法将绝对路径名恢复到相对位置。

OpenBSD 焦油:

-P

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

在 macOS、FreeBSD 和 NetBSD 上也实现了一些选项,具有相同的语义,-P此外,tartar自由BSD如果..没有.-P

希利工具之星:

-/

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

答案2

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

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

相关内容