tarball是否可以更改提取文件的位置,而与提取文件所使用的命令无关?


27

我有一个同事,他说您需要谨慎提取tar包,因为它们会做出您不知道的更改。我一直认为压缩包只是压缩文件的层次结构,因此,如果将其解压缩到/ tmp / example /,则不可能将文件潜入/ etc /或类似的文件中。


1
您关心什么操作系统环境?-P在这方面,GNU / Linux的tar有一个影响其行为的选项。
杰夫·谢勒

1
我猜是在这种情况下的CentOS,但我想知道我应该知道的一切。
亚当·R·格雷

1
在更长的时间里,GNU tar可能会以一种欺骗的方式被欺骗,例如/etc/passwd,以root身份运行时将其删除。一段时间以来,我相信可以gtar提供与您类似的安全性star
schily

Answers:


41

在这方面,不同的tar实用程序的行为有所不同,因此请务必小心。对于尚未创建的tar文件,请始终在提取目录之前列出目录。

Solaris tar

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

tar归档文件中包含的绝对路径名是使用绝对路径名解包的,也就是说,不会删除前导斜杠(/)。

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

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

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

GNU焦油

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

--absolute-names

-P

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

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

tar:/从成员名称中删除开头

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

AIX焦油

它什么也没说,并且表现为Solaris tar -它将创建和提取具有完整/绝对路径名的tar文件。

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

警告

无法将绝对路径名还原到相对位置。

OpenBSD焦油

-P

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

-P用于实施方案tar在MacOS,FreeBSD和NetBSD的为好,以相同的语义,增加该tar的FreeBSD和MacOS将“垃圾提取归档输入其路径名含有..或者其目标目录将通过一个符号链接来改变”没有-P

schilytools明星

-/

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


2
长期以来,GNU tar忽略了以下事实:包含的路径名..存在安全风险,因此请使用star或last gtar。还可以查看star示例tar归档文件,其中包括手工制作的tar标头,这些标头导致大多数tar实现甚至在没有警告的情况下删除文件。
schily

根据Jeff的报价,@ schily不适用于tarSolaris,AIX和HP-UX吗?如果是这样,为什么仅指出GNU tar,尤其是如果(再次根据上面的引用),它们已经变为不接受..?输入格式错误的问题当然是错误,我想您已经将它们报告为错误了。
ilkkachu

1
历史性的tar实现不会检查类似的事情。我需要发表评论,因为有人声称GNU tar没有问题而没有提到发行版。顺便说一句:像这样没有提及的列表star(最早的免费实现)必须被视为不完整。
schily

@schily,我搜索了主要操作系统的手册页(可能具有不同的tar实现);如果您有star的在线手册页的链接,我很乐意将其包含在内。
杰夫·谢勒


9

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

例如,如果压缩文件中包含“。” 目录,然后以root身份将其解压缩到/ tmp中,这会使/ tmp除root以外的其他用户无法写,从而破坏系统。


并且,如果将其解压缩/,则会更改根目录的权限,这将产生意外的后果(我记得在控制台上登录时会出现“无法执行/ bin / bash”,因为它/是770模式)。
Law

1
我曾经在官方软件上发生过这种情况-“ rancher-compose”的github版本都包含“”。例如,在tar文件中,如果将其提取到其中,则按nuke / tmp。
哈拉尔德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.