無論用於提取文件的命令如何,tarball 都可以更改文件提取到的位置,這是真的嗎?
我有一位同事說您需要小心提取 tarball,因為它們可以進行您不知道的更改。我一直認為 tarball 只是壓縮文件的層次結構,所以如果你將它解壓縮到 /tmp/example/ 它不可能將文件偷偷溜進 /etc/ 或類似的東西。
不同的 tar 實用程序在這方面的行為不同,所以要小心。對於您未創建的 tar 文件,請務必在解壓縮之前列出目錄。
命名文件從 tarfile 中提取並寫入 tarfile 中指定的相對於目前目錄的目錄。使用要提取的文件和目錄的相對路徑名。
tar 存檔中包含的絕對路徑名使用絕對路徑名解壓縮,也就是說,前導正斜杠 (/) 不會被剝離。
對於具有完整(絕對)路徑名的 tar 文件,例如:
/tmp/real-file /etc/sneaky-file-here
…如果你提取這樣的文件,你最終會得到這兩個文件。
預設情況下,GNU tar 會
/
在輸入或輸出中刪除前導,並抱怨包含..
組件的文件名。有一個選項可以關閉此行為:
--absolute-names
-P
不要從文件名中去除前導斜杠,並允許文件名包含
..
文件名組件。…如果您使用 GNU tar 提取完整路徑的 tar 文件而不使用該
-P
選項,它會告訴您:
/
tar:從成員名稱中刪除前導並將文件提取到目前目錄的子目錄中。
對此一無所知,它的行為與 Solaris tar 一樣——它將創建和提取具有完整/絕對路徑名的 tar 文件。
HP-UX tar:( 歡迎更好的線上參考)
警告
無法將絕對路徑名恢復到相對位置。
-P
不要
/
從路徑名中去除前導斜杠 ( )。預設是去除前導斜杠。
-P
在 macOS、FreeBSD 和 NetBSD 上也實現了一些選項tar
,它們具有相同的語義,此外,tar
在FreeBSD和 macOS 上,將“拒絕提取路徑名包含..
或目標目錄將被符號連結更改的存檔條目”而沒有-P
.
-/
提取檔案時,不要從文件名中去除前導斜杠。包含絕對路徑名的 Tar 檔案通常是個壞主意。對於其他 tar 實現,它們可能永遠不會在不破壞現有文件的情況下被提取。出於這個原因,預設情況下,在提取模式下會從文件名中去除前導斜杠。