我正在尝试在 linux 中运行以下命令
Command: tar zcvf ABCD.tar.gz -T Files.txt
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息
Error: tar: Removing leading `/' from member names
Run Code Online (Sandbox Code Playgroud)
我尝试了以下命令,但仍然收到相同的错误消息(/sf/ask/2914888861/ -tar-sta )
tar -C / -zcvf ABCD.tar.gz -T Files.txt
Run Code Online (Sandbox Code Playgroud)
这是一个特点!
如果/
在压缩和提取期间压缩文件中包含斜杠前缀,则意味着攻击者只需说服您提取文件即可覆盖敏感文件(如/etc/shadow
)。
它实际上不是错误消息,而是信息。
如果您真的想取消它,请将目录更改为父目录并使用相对名称:
cd /
tar -zcvf path/to/files
Run Code Online (Sandbox Code Playgroud)
而不是
tar -zcvf /path/to/files
Run Code Online (Sandbox Code Playgroud)
在您的情况下,我认为 中的文件名-T Files.txt
是绝对位置。
在 GNU tar 中,如果你想在文件名前面保留斜线,你需要的选项是:
-P, --absolute-names
Don't strip leading slashes from file names when creating archives.
Run Code Online (Sandbox Code Playgroud)
所以,tar zcvf ABCD.tar.gz -P -T Files.txt
。
提取存档时可能会删除斜杠,除非您当然-P
也在那里使用。
另一方面,如果您想删除斜杠,但又不想 tar 抱怨,则需要执行类似sed s,^/,, files.txt | tar czf foo.tar.gz -C / -T -
.