我有一个同事说你需要小心提取 tarball,因为它们可以做出你不知道的改变。我一直认为 tarball 只是压缩文件的层次结构,因此如果您将其解压缩到 /tmp/example/ 中,则不可能将文件潜入 /etc/ 或类似内容中。
Jef*_*ler 43
不同的 tar 实用程序在这方面的表现不同,因此最好小心。对于不是您创建的 tar 文件,请务必在提取前列出目录。
命名文件从 tarfile 中提取并写入 tarfile 中指定的目录,相对于当前目录。使用要提取的文件和目录的相对路径名。
tar 存档中包含的绝对路径名使用绝对路径名解包,即前导正斜杠 (/) 不会被剥离。
对于具有完整(绝对)路径名的 tar 文件,例如:
/tmp/real-file
/etc/sneaky-file-here
Run Code Online (Sandbox Code Playgroud)
...如果你提取这样的文件,你最终会得到这两个文件。
默认情况下,GNU tar 删除
/
输入或输出的前导,并抱怨包含..
组件的文件名。有一个选项可以关闭此行为:
--absolute-names
-P
不要从文件名中去除前导斜杠,并允许包含
..
文件名组件的文件名。
...如果您在不使用该-P
选项的情况下使用GNU tar 提取完整路径的 tar 文件,它会告诉您:
tar:
/
从成员名称中删除前导
并将文件解压缩到当前目录的子目录中。
什么也没说,它的行为就像 Solaris tar——它将创建和提取具有完整/绝对路径名的 tar 文件。
HP-UX tar :( 欢迎更好的在线参考)
警告
没有办法将绝对路径名恢复到相对位置。
-P
不要
/
从路径名中去除前导斜杠 ( )。默认是去掉前导斜杠。
在 macOS、FreeBSD 和 NetBSD 上也-P
实现了一些选项tar
,它们具有相同的语义,此外tar
在FreeBSD和 macOS 上将“拒绝提取其路径名包含..
或其目标目录将被符号链接更改的存档条目”而没有-P
.
-/
提取存档时不要从文件名中去除前导斜杠。包含绝对路径名的 Tar 档案通常是一个坏主意。对于其他 tar 实现,如果不破坏现有文件,它们可能永远不会被提取。出于这个原因,在提取模式下,默认情况下会从文件名中去除前导斜杠。