我问了几个人,才想在这里问一下。我们从一家国际公司收到 zip 格式的设计工作文件。当我运行脚本来解压终端中的文件时,我收到一个 zip 错误仅有的在Linux中。我们可以整天用7zip和winzip测试、解压缩、浏览和修改文件。当 7zip 或 Winzip 运行时,它们也不表示任何安全性。
终端错误:
compressed WinNT security missing (-7 bytes)
我到处搜索,但没有找到解决方案或更正。一位同事建议,
“使用不同语言版本的 Unzip 可能会更改提取文件所需的 Unicode。将其视为密码,如果没有正确的代码,您将无法进入。”
为什么在Ubuntu终端解压时会显示错误?
答案1
我对源代码进行了一些挖掘(从 Ubuntu raring 中解压缩60,尽管我怀疑旧版本没有太大区别)。有问题的错误TruncNTSD
在内部调用和定义extract.c:295
。正如预期的那样,此消息的大多数用途都在win32/win32.c
并且确实引用了 NTFS 安全数据,但是代码中只有一处您应该在 win32 系统之外遇到此错误(因为您报告在 ubuntu 上看到了它)。
有问题的地方 ( extract.c:2118
) 位于名为 的函数中TestExtraField
。正如维基百科解释的那样:
.ZIP 文件格式包括文件头中的额外字段功能,可用于存储现有 .ZIP 规范未定义的额外数据,并允许不识别字段的合规归档程序安全地跳过这些字段。
这确实是 NT 存储安全信息的方式。重要的是,该函数打印错误注释
/* we know the regular compressed file data tested out OK, or else we
* wouldn't be here ==> print filename if any extra-field errors found
*/
因此,如果您可以很好地解压缩文件本身,那么似乎可以安全地忽略此错误。进一步看,win32 代码之外唯一引发此错误的地方(假设这不是解压缩中的可怕错误)是test_compr_eb:extract.c:2227
,从代码看,它似乎发生在以下情况:压缩文件具有标记为压缩的关联额外字段,但字段数据的长度为 0 字节。
我不知道这是怎么发生的——也许创建 zip 文件的程序是偶然这样做的,也许额外的字段被安全软件过滤掉了。无论如何,它看起来无害,并且可能与 NT 安全性完全无关。总之,如果你的文件解压正常,忽略是完全安全的。